{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,19 +1,19 @@\n-Zip file size: 5491094 bytes, number of entries: 414\n+Zip file size: 5490965 bytes, number of entries: 414\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat    47134 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n -rw----     2.0 fat    11358 bX stor 70-Jan-01 00:00 META-INF/LICENSE\n -rw----     2.0 fat      263 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat      160 bX stor 70-Jan-01 00:00 META-INF/NOTICE\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.properties\n -rw----     2.0 fat     7850 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.xml\n--rw----     2.0 fat     1293 bX stor 70-Jan-01 00:00 build.properties\n+-rw----     2.0 fat     1188 bX stor 70-Jan-01 00:00 build.properties\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/2.0.0-M4/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/2.0.0-M4/org.apache.nifi.processors.airtable.QueryAirtableTable/\n -rw----     2.0 fat     2722 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/2.0.0-M4/org.apache.nifi.processors.airtable.QueryAirtableTable/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-amqp-nar/\n@@ -408,9 +408,9 @@\n -rw----     2.0 fat     3375 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/2.0.0-M4/org.apache.nifi.processors.zendesk.GetZendesk/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/2.0.0-M4/org.apache.nifi.processors.zendesk.PutZendeskTicket/\n -rw----     2.0 fat     7289 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/2.0.0-M4/org.apache.nifi.processors.zendesk.PutZendeskTicket/additionalDetails.html\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/2.0.0-M4/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/2.0.0-M4/org.apache.nifi.services.zendesk.ZendeskRecordSink/\n -rw----     2.0 fat     7449 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/2.0.0-M4/org.apache.nifi.services.zendesk.ZendeskRecordSink/additionalDetails.html\n--rw----     2.0 fat  4330847 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n-414 files, 5368700 bytes uncompressed, 5368700 bytes compressed:  0.0%\n+-rw----     2.0 fat  4330823 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n+414 files, 5368571 bytes uncompressed, 5368571 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -270,21854 +270,21854 @@\n #\n 010814 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 010816   Length              0005 (5)\n 010818   Flags               01 (1) 'Modification'\n 010819   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 01081D PAYLOAD\n \n-010D2A DATA DESCRIPTOR       08074B50 (134695760)\n-010D2E CRC                   091B3793 (152778643)\n-010D32 Compressed Size       0000050D (1293)\n-010D36 Uncompressed Size     0000050D (1293)\n-\n-010D3A LOCAL HEADER #12      04034B50 (67324752)\n-010D3E Extract Zip Spec      14 (20) '2.0'\n-010D3F Extract OS            00 (0) 'MS-DOS'\n-010D40 General Purpose Flag  0000 (0)\n-010D42 Compression Method    0000 (0) 'Stored'\n-010D44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-010D48 CRC                   00000000 (0)\n-010D4C Compressed Size       00000000 (0)\n-010D50 Uncompressed Size     00000000 (0)\n-010D54 Filename Length       0005 (5)\n-010D56 Extra Length          0009 (9)\n-010D58 Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x10D58: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-010D5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-010D5F   Length              0005 (5)\n-010D61   Flags               01 (1) 'Modification'\n-010D62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-010D66 LOCAL HEADER #13      04034B50 (67324752)\n-010D6A Extract Zip Spec      14 (20) '2.0'\n-010D6B Extract OS            00 (0) 'MS-DOS'\n-010D6C General Purpose Flag  0000 (0)\n-010D6E Compression Method    0000 (0) 'Stored'\n-010D70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-010D74 CRC                   00000000 (0)\n-010D78 Compressed Size       00000000 (0)\n-010D7C Uncompressed Size     00000000 (0)\n-010D80 Filename Length       0015 (21)\n-010D82 Extra Length          0009 (9)\n-010D84 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10D84: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-010D99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-010D9B   Length              0005 (5)\n-010D9D   Flags               01 (1) 'Modification'\n-010D9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-010DA2 LOCAL HEADER #14      04034B50 (67324752)\n-010DA6 Extract Zip Spec      14 (20) '2.0'\n-010DA7 Extract OS            00 (0) 'MS-DOS'\n-010DA8 General Purpose Flag  0000 (0)\n-010DAA Compression Method    0000 (0) 'Stored'\n-010DAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-010DB0 CRC                   00000000 (0)\n-010DB4 Compressed Size       00000000 (0)\n-010DB8 Uncompressed Size     00000000 (0)\n-010DBC Filename Length       0027 (39)\n-010DBE Extra Length          0009 (9)\n-010DC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10DC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-010DE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-010DE9   Length              0005 (5)\n-010DEB   Flags               01 (1) 'Modification'\n-010DEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-010DF0 LOCAL HEADER #15      04034B50 (67324752)\n-010DF4 Extract Zip Spec      14 (20) '2.0'\n-010DF5 Extract OS            00 (0) 'MS-DOS'\n-010DF6 General Purpose Flag  0000 (0)\n-010DF8 Compression Method    0000 (0) 'Stored'\n-010DFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-010DFE CRC                   00000000 (0)\n-010E02 Compressed Size       00000000 (0)\n-010E06 Uncompressed Size     00000000 (0)\n-010E0A Filename Length       0030 (48)\n-010E0C Extra Length          0009 (9)\n-010E0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10E0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-010E3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-010E40   Length              0005 (5)\n-010E42   Flags               01 (1) 'Modification'\n-010E43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-010E47 LOCAL HEADER #16      04034B50 (67324752)\n-010E4B Extract Zip Spec      14 (20) '2.0'\n-010E4C Extract OS            00 (0) 'MS-DOS'\n-010E4D General Purpose Flag  0000 (0)\n-010E4F Compression Method    0000 (0) 'Stored'\n-010E51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-010E55 CRC                   00000000 (0)\n-010E59 Compressed Size       00000000 (0)\n-010E5D Uncompressed Size     00000000 (0)\n-010E61 Filename Length       0067 (103)\n-010E63 Extra Length          0009 (9)\n-010E65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10E65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-010ECC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-010ECE   Length              0005 (5)\n-010ED0   Flags               01 (1) 'Modification'\n-010ED1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-010ED5 LOCAL HEADER #17      04034B50 (67324752)\n-010ED9 Extract Zip Spec      14 (20) '2.0'\n-010EDA Extract OS            00 (0) 'MS-DOS'\n-010EDB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-010EDD Compression Method    0000 (0) 'Stored'\n-010EDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-010EE3 CRC                   00000000 (0)\n-010EE7 Compressed Size       00000000 (0)\n-010EEB Uncompressed Size     00000000 (0)\n-010EEF Filename Length       007D (125)\n-010EF1 Extra Length          0009 (9)\n-010EF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10EF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-010F70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-010F72   Length              0005 (5)\n-010F74   Flags               01 (1) 'Modification'\n-010F75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-010F79 PAYLOAD\n-\n-011A1B DATA DESCRIPTOR       08074B50 (134695760)\n-011A1F CRC                   9CB4EC6B (2629102699)\n-011A23 Compressed Size       00000AA2 (2722)\n-011A27 Uncompressed Size     00000AA2 (2722)\n-\n-011A2B LOCAL HEADER #18      04034B50 (67324752)\n-011A2F Extract Zip Spec      14 (20) '2.0'\n-011A30 Extract OS            00 (0) 'MS-DOS'\n-011A31 General Purpose Flag  0000 (0)\n-011A33 Compression Method    0000 (0) 'Stored'\n-011A35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-011A39 CRC                   00000000 (0)\n-011A3D Compressed Size       00000000 (0)\n-011A41 Uncompressed Size     00000000 (0)\n-011A45 Filename Length       0023 (35)\n-011A47 Extra Length          0009 (9)\n-011A49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11A49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-011A6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-011A6E   Length              0005 (5)\n-011A70   Flags               01 (1) 'Modification'\n-011A71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-011A75 LOCAL HEADER #19      04034B50 (67324752)\n-011A79 Extract Zip Spec      14 (20) '2.0'\n-011A7A Extract OS            00 (0) 'MS-DOS'\n-011A7B General Purpose Flag  0000 (0)\n-011A7D Compression Method    0000 (0) 'Stored'\n-011A7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-011A83 CRC                   00000000 (0)\n-011A87 Compressed Size       00000000 (0)\n-011A8B Uncompressed Size     00000000 (0)\n-011A8F Filename Length       002C (44)\n-011A91 Extra Length          0009 (9)\n-011A93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11A93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-011ABF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-011AC1   Length              0005 (5)\n-011AC3   Flags               01 (1) 'Modification'\n-011AC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-011AC8 LOCAL HEADER #20      04034B50 (67324752)\n-011ACC Extract Zip Spec      14 (20) '2.0'\n-011ACD Extract OS            00 (0) 'MS-DOS'\n-011ACE General Purpose Flag  0000 (0)\n-011AD0 Compression Method    0000 (0) 'Stored'\n-011AD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-011AD6 CRC                   00000000 (0)\n-011ADA Compressed Size       00000000 (0)\n-011ADE Uncompressed Size     00000000 (0)\n-011AE2 Filename Length       0058 (88)\n-011AE4 Extra Length          0009 (9)\n-011AE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11AE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-011B3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-011B40   Length              0005 (5)\n-011B42   Flags               01 (1) 'Modification'\n-011B43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-011B47 LOCAL HEADER #21      04034B50 (67324752)\n-011B4B Extract Zip Spec      14 (20) '2.0'\n-011B4C Extract OS            00 (0) 'MS-DOS'\n-011B4D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-011B4F Compression Method    0000 (0) 'Stored'\n-011B51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-011B55 CRC                   00000000 (0)\n-011B59 Compressed Size       00000000 (0)\n-011B5D Uncompressed Size     00000000 (0)\n-011B61 Filename Length       006E (110)\n-011B63 Extra Length          0009 (9)\n-011B65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11B65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-011BD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-011BD5   Length              0005 (5)\n-011BD7   Flags               01 (1) 'Modification'\n-011BD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-011BDC PAYLOAD\n-\n-012B9B DATA DESCRIPTOR       08074B50 (134695760)\n-012B9F CRC                   445AD7B2 (1146804146)\n-012BA3 Compressed Size       00000FBF (4031)\n-012BA7 Uncompressed Size     00000FBF (4031)\n-\n-012BAB LOCAL HEADER #22      04034B50 (67324752)\n-012BAF Extract Zip Spec      14 (20) '2.0'\n-012BB0 Extract OS            00 (0) 'MS-DOS'\n-012BB1 General Purpose Flag  0000 (0)\n-012BB3 Compression Method    0000 (0) 'Stored'\n-012BB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-012BB9 CRC                   00000000 (0)\n-012BBD Compressed Size       00000000 (0)\n-012BC1 Uncompressed Size     00000000 (0)\n-012BC5 Filename Length       0058 (88)\n-012BC7 Extra Length          0009 (9)\n-012BC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12BC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-012C21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-012C23   Length              0005 (5)\n-012C25   Flags               01 (1) 'Modification'\n-012C26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-012C2A LOCAL HEADER #23      04034B50 (67324752)\n-012C2E Extract Zip Spec      14 (20) '2.0'\n-012C2F Extract OS            00 (0) 'MS-DOS'\n-012C30 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-012C32 Compression Method    0000 (0) 'Stored'\n-012C34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-012C38 CRC                   00000000 (0)\n-012C3C Compressed Size       00000000 (0)\n-012C40 Uncompressed Size     00000000 (0)\n-012C44 Filename Length       006E (110)\n-012C46 Extra Length          0009 (9)\n-012C48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12C48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-012CB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-012CB8   Length              0005 (5)\n-012CBA   Flags               01 (1) 'Modification'\n-012CBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-012CBF PAYLOAD\n-\n-01439D DATA DESCRIPTOR       08074B50 (134695760)\n-0143A1 CRC                   A2A96EA2 (2729012898)\n-0143A5 Compressed Size       000016DE (5854)\n-0143A9 Uncompressed Size     000016DE (5854)\n-\n-0143AD LOCAL HEADER #24      04034B50 (67324752)\n-0143B1 Extract Zip Spec      14 (20) '2.0'\n-0143B2 Extract OS            00 (0) 'MS-DOS'\n-0143B3 General Purpose Flag  0000 (0)\n-0143B5 Compression Method    0000 (0) 'Stored'\n-0143B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0143BB CRC                   00000000 (0)\n-0143BF Compressed Size       00000000 (0)\n-0143C3 Uncompressed Size     00000000 (0)\n-0143C7 Filename Length       002F (47)\n-0143C9 Extra Length          0009 (9)\n-0143CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x143CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0143FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0143FC   Length              0005 (5)\n-0143FE   Flags               01 (1) 'Modification'\n-0143FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-014403 LOCAL HEADER #25      04034B50 (67324752)\n-014407 Extract Zip Spec      14 (20) '2.0'\n-014408 Extract OS            00 (0) 'MS-DOS'\n-014409 General Purpose Flag  0000 (0)\n-01440B Compression Method    0000 (0) 'Stored'\n-01440D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-014411 CRC                   00000000 (0)\n-014415 Compressed Size       00000000 (0)\n-014419 Uncompressed Size     00000000 (0)\n-01441D Filename Length       0038 (56)\n-01441F Extra Length          0009 (9)\n-014421 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x14421: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-014459 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01445B   Length              0005 (5)\n-01445D   Flags               01 (1) 'Modification'\n-01445E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-014462 LOCAL HEADER #26      04034B50 (67324752)\n-014466 Extract Zip Spec      14 (20) '2.0'\n-014467 Extract OS            00 (0) 'MS-DOS'\n-014468 General Purpose Flag  0000 (0)\n-01446A Compression Method    0000 (0) 'Stored'\n-01446C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-014470 CRC                   00000000 (0)\n-014474 Compressed Size       00000000 (0)\n-014478 Uncompressed Size     00000000 (0)\n-01447C Filename Length       0068 (104)\n-01447E Extra Length          0009 (9)\n-014480 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x14480: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0144E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0144EA   Length              0005 (5)\n-0144EC   Flags               01 (1) 'Modification'\n-0144ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0144F1 LOCAL HEADER #27      04034B50 (67324752)\n-0144F5 Extract Zip Spec      14 (20) '2.0'\n-0144F6 Extract OS            00 (0) 'MS-DOS'\n-0144F7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0144F9 Compression Method    0000 (0) 'Stored'\n-0144FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0144FF CRC                   00000000 (0)\n-014503 Compressed Size       00000000 (0)\n-014507 Uncompressed Size     00000000 (0)\n-01450B Filename Length       007E (126)\n-01450D Extra Length          0009 (9)\n-01450F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1450F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01458D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01458F   Length              0005 (5)\n-014591   Flags               01 (1) 'Modification'\n-014592   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-014596 PAYLOAD\n-\n-015AA8 DATA DESCRIPTOR       08074B50 (134695760)\n-015AAC CRC                   7416DF2A (1947655978)\n-015AB0 Compressed Size       00001512 (5394)\n-015AB4 Uncompressed Size     00001512 (5394)\n-\n-015AB8 LOCAL HEADER #28      04034B50 (67324752)\n-015ABC Extract Zip Spec      14 (20) '2.0'\n-015ABD Extract OS            00 (0) 'MS-DOS'\n-015ABE General Purpose Flag  0000 (0)\n-015AC0 Compression Method    0000 (0) 'Stored'\n-015AC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015AC6 CRC                   00000000 (0)\n-015ACA Compressed Size       00000000 (0)\n-015ACE Uncompressed Size     00000000 (0)\n-015AD2 Filename Length       0022 (34)\n-015AD4 Extra Length          0009 (9)\n-015AD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15AD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015AF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015AFA   Length              0005 (5)\n-015AFC   Flags               01 (1) 'Modification'\n-015AFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-015B01 LOCAL HEADER #29      04034B50 (67324752)\n-015B05 Extract Zip Spec      14 (20) '2.0'\n-015B06 Extract OS            00 (0) 'MS-DOS'\n-015B07 General Purpose Flag  0000 (0)\n-015B09 Compression Method    0000 (0) 'Stored'\n-015B0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015B0F CRC                   00000000 (0)\n-015B13 Compressed Size       00000000 (0)\n-015B17 Uncompressed Size     00000000 (0)\n-015B1B Filename Length       002B (43)\n-015B1D Extra Length          0009 (9)\n-015B1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15B1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015B4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015B4C   Length              0005 (5)\n-015B4E   Flags               01 (1) 'Modification'\n-015B4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-015B53 LOCAL HEADER #30      04034B50 (67324752)\n-015B57 Extract Zip Spec      14 (20) '2.0'\n-015B58 Extract OS            00 (0) 'MS-DOS'\n-015B59 General Purpose Flag  0000 (0)\n-015B5B Compression Method    0000 (0) 'Stored'\n-015B5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015B61 CRC                   00000000 (0)\n-015B65 Compressed Size       00000000 (0)\n-015B69 Uncompressed Size     00000000 (0)\n-015B6D Filename Length       006C (108)\n-015B6F Extra Length          0009 (9)\n-015B71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15B71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015BDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015BDF   Length              0005 (5)\n-015BE1   Flags               01 (1) 'Modification'\n-015BE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-015BE6 LOCAL HEADER #31      04034B50 (67324752)\n-015BEA Extract Zip Spec      14 (20) '2.0'\n-015BEB Extract OS            00 (0) 'MS-DOS'\n-015BEC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-015BEE Compression Method    0000 (0) 'Stored'\n-015BF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-015BF4 CRC                   00000000 (0)\n-015BF8 Compressed Size       00000000 (0)\n-015BFC Uncompressed Size     00000000 (0)\n-015C00 Filename Length       0082 (130)\n-015C02 Extra Length          0009 (9)\n-015C04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15C04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-015C86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-015C88   Length              0005 (5)\n-015C8A   Flags               01 (1) 'Modification'\n-015C8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-015C8F PAYLOAD\n-\n-0166B4 DATA DESCRIPTOR       08074B50 (134695760)\n-0166B8 CRC                   15D4B854 (366262356)\n-0166BC Compressed Size       00000A25 (2597)\n-0166C0 Uncompressed Size     00000A25 (2597)\n-\n-0166C4 LOCAL HEADER #32      04034B50 (67324752)\n-0166C8 Extract Zip Spec      14 (20) '2.0'\n-0166C9 Extract OS            00 (0) 'MS-DOS'\n-0166CA General Purpose Flag  0000 (0)\n-0166CC Compression Method    0000 (0) 'Stored'\n-0166CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0166D2 CRC                   00000000 (0)\n-0166D6 Compressed Size       00000000 (0)\n-0166DA Uncompressed Size     00000000 (0)\n-0166DE Filename Length       0065 (101)\n-0166E0 Extra Length          0009 (9)\n-0166E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x166E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-016747 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-016749   Length              0005 (5)\n-01674B   Flags               01 (1) 'Modification'\n-01674C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-016750 LOCAL HEADER #33      04034B50 (67324752)\n-016754 Extract Zip Spec      14 (20) '2.0'\n-016755 Extract OS            00 (0) 'MS-DOS'\n-016756 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-016758 Compression Method    0000 (0) 'Stored'\n-01675A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01675E CRC                   00000000 (0)\n-016762 Compressed Size       00000000 (0)\n-016766 Uncompressed Size     00000000 (0)\n-01676A Filename Length       007B (123)\n-01676C Extra Length          0009 (9)\n-01676E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1676E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0167E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0167EB   Length              0005 (5)\n-0167ED   Flags               01 (1) 'Modification'\n-0167EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0167F2 PAYLOAD\n-\n-019782 DATA DESCRIPTOR       08074B50 (134695760)\n-019786 CRC                   826E1CC4 (2188254404)\n-01978A Compressed Size       00002F90 (12176)\n-01978E Uncompressed Size     00002F90 (12176)\n-\n-019792 LOCAL HEADER #34      04034B50 (67324752)\n-019796 Extract Zip Spec      14 (20) '2.0'\n-019797 Extract OS            00 (0) 'MS-DOS'\n-019798 General Purpose Flag  0000 (0)\n-01979A Compression Method    0000 (0) 'Stored'\n-01979C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0197A0 CRC                   00000000 (0)\n-0197A4 Compressed Size       00000000 (0)\n-0197A8 Uncompressed Size     00000000 (0)\n-0197AC Filename Length       006E (110)\n-0197AE Extra Length          0009 (9)\n-0197B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01981E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-019820   Length              0005 (5)\n-019822   Flags               01 (1) 'Modification'\n-019823   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-019827 LOCAL HEADER #35      04034B50 (67324752)\n-01982B Extract Zip Spec      14 (20) '2.0'\n-01982C Extract OS            00 (0) 'MS-DOS'\n-01982D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01982F Compression Method    0000 (0) 'Stored'\n-019831 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-019835 CRC                   00000000 (0)\n-019839 Compressed Size       00000000 (0)\n-01983D Uncompressed Size     00000000 (0)\n-019841 Filename Length       0084 (132)\n-019843 Extra Length          0009 (9)\n-019845 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+010CC1 DATA DESCRIPTOR       08074B50 (134695760)\n+010CC5 CRC                   92D455DD (2463389149)\n+010CC9 Compressed Size       000004A4 (1188)\n+010CCD Uncompressed Size     000004A4 (1188)\n+\n+010CD1 LOCAL HEADER #12      04034B50 (67324752)\n+010CD5 Extract Zip Spec      14 (20) '2.0'\n+010CD6 Extract OS            00 (0) 'MS-DOS'\n+010CD7 General Purpose Flag  0000 (0)\n+010CD9 Compression Method    0000 (0) 'Stored'\n+010CDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+010CDF CRC                   00000000 (0)\n+010CE3 Compressed Size       00000000 (0)\n+010CE7 Uncompressed Size     00000000 (0)\n+010CEB Filename Length       0005 (5)\n+010CED Extra Length          0009 (9)\n+010CEF Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x10CEF: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+010CF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+010CF6   Length              0005 (5)\n+010CF8   Flags               01 (1) 'Modification'\n+010CF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+010CFD LOCAL HEADER #13      04034B50 (67324752)\n+010D01 Extract Zip Spec      14 (20) '2.0'\n+010D02 Extract OS            00 (0) 'MS-DOS'\n+010D03 General Purpose Flag  0000 (0)\n+010D05 Compression Method    0000 (0) 'Stored'\n+010D07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+010D0B CRC                   00000000 (0)\n+010D0F Compressed Size       00000000 (0)\n+010D13 Uncompressed Size     00000000 (0)\n+010D17 Filename Length       0015 (21)\n+010D19 Extra Length          0009 (9)\n+010D1B Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10D1B: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+010D30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+010D32   Length              0005 (5)\n+010D34   Flags               01 (1) 'Modification'\n+010D35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+010D39 LOCAL HEADER #14      04034B50 (67324752)\n+010D3D Extract Zip Spec      14 (20) '2.0'\n+010D3E Extract OS            00 (0) 'MS-DOS'\n+010D3F General Purpose Flag  0000 (0)\n+010D41 Compression Method    0000 (0) 'Stored'\n+010D43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+010D47 CRC                   00000000 (0)\n+010D4B Compressed Size       00000000 (0)\n+010D4F Uncompressed Size     00000000 (0)\n+010D53 Filename Length       0027 (39)\n+010D55 Extra Length          0009 (9)\n+010D57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10D57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+010D7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+010D80   Length              0005 (5)\n+010D82   Flags               01 (1) 'Modification'\n+010D83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+010D87 LOCAL HEADER #15      04034B50 (67324752)\n+010D8B Extract Zip Spec      14 (20) '2.0'\n+010D8C Extract OS            00 (0) 'MS-DOS'\n+010D8D General Purpose Flag  0000 (0)\n+010D8F Compression Method    0000 (0) 'Stored'\n+010D91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+010D95 CRC                   00000000 (0)\n+010D99 Compressed Size       00000000 (0)\n+010D9D Uncompressed Size     00000000 (0)\n+010DA1 Filename Length       0030 (48)\n+010DA3 Extra Length          0009 (9)\n+010DA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10DA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+010DD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+010DD7   Length              0005 (5)\n+010DD9   Flags               01 (1) 'Modification'\n+010DDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+010DDE LOCAL HEADER #16      04034B50 (67324752)\n+010DE2 Extract Zip Spec      14 (20) '2.0'\n+010DE3 Extract OS            00 (0) 'MS-DOS'\n+010DE4 General Purpose Flag  0000 (0)\n+010DE6 Compression Method    0000 (0) 'Stored'\n+010DE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+010DEC CRC                   00000000 (0)\n+010DF0 Compressed Size       00000000 (0)\n+010DF4 Uncompressed Size     00000000 (0)\n+010DF8 Filename Length       0067 (103)\n+010DFA Extra Length          0009 (9)\n+010DFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10DFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+010E63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+010E65   Length              0005 (5)\n+010E67   Flags               01 (1) 'Modification'\n+010E68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+010E6C LOCAL HEADER #17      04034B50 (67324752)\n+010E70 Extract Zip Spec      14 (20) '2.0'\n+010E71 Extract OS            00 (0) 'MS-DOS'\n+010E72 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+010E74 Compression Method    0000 (0) 'Stored'\n+010E76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+010E7A CRC                   00000000 (0)\n+010E7E Compressed Size       00000000 (0)\n+010E82 Uncompressed Size     00000000 (0)\n+010E86 Filename Length       007D (125)\n+010E88 Extra Length          0009 (9)\n+010E8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10E8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+010F07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+010F09   Length              0005 (5)\n+010F0B   Flags               01 (1) 'Modification'\n+010F0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+010F10 PAYLOAD\n+\n+0119B2 DATA DESCRIPTOR       08074B50 (134695760)\n+0119B6 CRC                   9CB4EC6B (2629102699)\n+0119BA Compressed Size       00000AA2 (2722)\n+0119BE Uncompressed Size     00000AA2 (2722)\n+\n+0119C2 LOCAL HEADER #18      04034B50 (67324752)\n+0119C6 Extract Zip Spec      14 (20) '2.0'\n+0119C7 Extract OS            00 (0) 'MS-DOS'\n+0119C8 General Purpose Flag  0000 (0)\n+0119CA Compression Method    0000 (0) 'Stored'\n+0119CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0119D0 CRC                   00000000 (0)\n+0119D4 Compressed Size       00000000 (0)\n+0119D8 Uncompressed Size     00000000 (0)\n+0119DC Filename Length       0023 (35)\n+0119DE Extra Length          0009 (9)\n+0119E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x119E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+011A03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+011A05   Length              0005 (5)\n+011A07   Flags               01 (1) 'Modification'\n+011A08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+011A0C LOCAL HEADER #19      04034B50 (67324752)\n+011A10 Extract Zip Spec      14 (20) '2.0'\n+011A11 Extract OS            00 (0) 'MS-DOS'\n+011A12 General Purpose Flag  0000 (0)\n+011A14 Compression Method    0000 (0) 'Stored'\n+011A16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+011A1A CRC                   00000000 (0)\n+011A1E Compressed Size       00000000 (0)\n+011A22 Uncompressed Size     00000000 (0)\n+011A26 Filename Length       002C (44)\n+011A28 Extra Length          0009 (9)\n+011A2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11A2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+011A56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+011A58   Length              0005 (5)\n+011A5A   Flags               01 (1) 'Modification'\n+011A5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+011A5F LOCAL HEADER #20      04034B50 (67324752)\n+011A63 Extract Zip Spec      14 (20) '2.0'\n+011A64 Extract OS            00 (0) 'MS-DOS'\n+011A65 General Purpose Flag  0000 (0)\n+011A67 Compression Method    0000 (0) 'Stored'\n+011A69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+011A6D CRC                   00000000 (0)\n+011A71 Compressed Size       00000000 (0)\n+011A75 Uncompressed Size     00000000 (0)\n+011A79 Filename Length       0058 (88)\n+011A7B Extra Length          0009 (9)\n+011A7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11A7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+011AD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+011AD7   Length              0005 (5)\n+011AD9   Flags               01 (1) 'Modification'\n+011ADA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+011ADE LOCAL HEADER #21      04034B50 (67324752)\n+011AE2 Extract Zip Spec      14 (20) '2.0'\n+011AE3 Extract OS            00 (0) 'MS-DOS'\n+011AE4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+011AE6 Compression Method    0000 (0) 'Stored'\n+011AE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+011AEC CRC                   00000000 (0)\n+011AF0 Compressed Size       00000000 (0)\n+011AF4 Uncompressed Size     00000000 (0)\n+011AF8 Filename Length       006E (110)\n+011AFA Extra Length          0009 (9)\n+011AFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11AFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+011B6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+011B6C   Length              0005 (5)\n+011B6E   Flags               01 (1) 'Modification'\n+011B6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+011B73 PAYLOAD\n+\n+012B32 DATA DESCRIPTOR       08074B50 (134695760)\n+012B36 CRC                   445AD7B2 (1146804146)\n+012B3A Compressed Size       00000FBF (4031)\n+012B3E Uncompressed Size     00000FBF (4031)\n+\n+012B42 LOCAL HEADER #22      04034B50 (67324752)\n+012B46 Extract Zip Spec      14 (20) '2.0'\n+012B47 Extract OS            00 (0) 'MS-DOS'\n+012B48 General Purpose Flag  0000 (0)\n+012B4A Compression Method    0000 (0) 'Stored'\n+012B4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+012B50 CRC                   00000000 (0)\n+012B54 Compressed Size       00000000 (0)\n+012B58 Uncompressed Size     00000000 (0)\n+012B5C Filename Length       0058 (88)\n+012B5E Extra Length          0009 (9)\n+012B60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12B60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+012BB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+012BBA   Length              0005 (5)\n+012BBC   Flags               01 (1) 'Modification'\n+012BBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+012BC1 LOCAL HEADER #23      04034B50 (67324752)\n+012BC5 Extract Zip Spec      14 (20) '2.0'\n+012BC6 Extract OS            00 (0) 'MS-DOS'\n+012BC7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+012BC9 Compression Method    0000 (0) 'Stored'\n+012BCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+012BCF CRC                   00000000 (0)\n+012BD3 Compressed Size       00000000 (0)\n+012BD7 Uncompressed Size     00000000 (0)\n+012BDB Filename Length       006E (110)\n+012BDD Extra Length          0009 (9)\n+012BDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12BDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+012C4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+012C4F   Length              0005 (5)\n+012C51   Flags               01 (1) 'Modification'\n+012C52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+012C56 PAYLOAD\n+\n+014334 DATA DESCRIPTOR       08074B50 (134695760)\n+014338 CRC                   A2A96EA2 (2729012898)\n+01433C Compressed Size       000016DE (5854)\n+014340 Uncompressed Size     000016DE (5854)\n+\n+014344 LOCAL HEADER #24      04034B50 (67324752)\n+014348 Extract Zip Spec      14 (20) '2.0'\n+014349 Extract OS            00 (0) 'MS-DOS'\n+01434A General Purpose Flag  0000 (0)\n+01434C Compression Method    0000 (0) 'Stored'\n+01434E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+014352 CRC                   00000000 (0)\n+014356 Compressed Size       00000000 (0)\n+01435A Uncompressed Size     00000000 (0)\n+01435E Filename Length       002F (47)\n+014360 Extra Length          0009 (9)\n+014362 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14362: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+014391 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+014393   Length              0005 (5)\n+014395   Flags               01 (1) 'Modification'\n+014396   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01439A LOCAL HEADER #25      04034B50 (67324752)\n+01439E Extract Zip Spec      14 (20) '2.0'\n+01439F Extract OS            00 (0) 'MS-DOS'\n+0143A0 General Purpose Flag  0000 (0)\n+0143A2 Compression Method    0000 (0) 'Stored'\n+0143A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0143A8 CRC                   00000000 (0)\n+0143AC Compressed Size       00000000 (0)\n+0143B0 Uncompressed Size     00000000 (0)\n+0143B4 Filename Length       0038 (56)\n+0143B6 Extra Length          0009 (9)\n+0143B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x143B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0143F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0143F2   Length              0005 (5)\n+0143F4   Flags               01 (1) 'Modification'\n+0143F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0143F9 LOCAL HEADER #26      04034B50 (67324752)\n+0143FD Extract Zip Spec      14 (20) '2.0'\n+0143FE Extract OS            00 (0) 'MS-DOS'\n+0143FF General Purpose Flag  0000 (0)\n+014401 Compression Method    0000 (0) 'Stored'\n+014403 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+014407 CRC                   00000000 (0)\n+01440B Compressed Size       00000000 (0)\n+01440F Uncompressed Size     00000000 (0)\n+014413 Filename Length       0068 (104)\n+014415 Extra Length          0009 (9)\n+014417 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14417: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01447F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+014481   Length              0005 (5)\n+014483   Flags               01 (1) 'Modification'\n+014484   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+014488 LOCAL HEADER #27      04034B50 (67324752)\n+01448C Extract Zip Spec      14 (20) '2.0'\n+01448D Extract OS            00 (0) 'MS-DOS'\n+01448E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+014490 Compression Method    0000 (0) 'Stored'\n+014492 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+014496 CRC                   00000000 (0)\n+01449A Compressed Size       00000000 (0)\n+01449E Uncompressed Size     00000000 (0)\n+0144A2 Filename Length       007E (126)\n+0144A4 Extra Length          0009 (9)\n+0144A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x144A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+014524 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+014526   Length              0005 (5)\n+014528   Flags               01 (1) 'Modification'\n+014529   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01452D PAYLOAD\n+\n+015A3F DATA DESCRIPTOR       08074B50 (134695760)\n+015A43 CRC                   7416DF2A (1947655978)\n+015A47 Compressed Size       00001512 (5394)\n+015A4B Uncompressed Size     00001512 (5394)\n+\n+015A4F LOCAL HEADER #28      04034B50 (67324752)\n+015A53 Extract Zip Spec      14 (20) '2.0'\n+015A54 Extract OS            00 (0) 'MS-DOS'\n+015A55 General Purpose Flag  0000 (0)\n+015A57 Compression Method    0000 (0) 'Stored'\n+015A59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+015A5D CRC                   00000000 (0)\n+015A61 Compressed Size       00000000 (0)\n+015A65 Uncompressed Size     00000000 (0)\n+015A69 Filename Length       0022 (34)\n+015A6B Extra Length          0009 (9)\n+015A6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15A6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+015A8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+015A91   Length              0005 (5)\n+015A93   Flags               01 (1) 'Modification'\n+015A94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+015A98 LOCAL HEADER #29      04034B50 (67324752)\n+015A9C Extract Zip Spec      14 (20) '2.0'\n+015A9D Extract OS            00 (0) 'MS-DOS'\n+015A9E General Purpose Flag  0000 (0)\n+015AA0 Compression Method    0000 (0) 'Stored'\n+015AA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+015AA6 CRC                   00000000 (0)\n+015AAA Compressed Size       00000000 (0)\n+015AAE Uncompressed Size     00000000 (0)\n+015AB2 Filename Length       002B (43)\n+015AB4 Extra Length          0009 (9)\n+015AB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15AB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+015AE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+015AE3   Length              0005 (5)\n+015AE5   Flags               01 (1) 'Modification'\n+015AE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+015AEA LOCAL HEADER #30      04034B50 (67324752)\n+015AEE Extract Zip Spec      14 (20) '2.0'\n+015AEF Extract OS            00 (0) 'MS-DOS'\n+015AF0 General Purpose Flag  0000 (0)\n+015AF2 Compression Method    0000 (0) 'Stored'\n+015AF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+015AF8 CRC                   00000000 (0)\n+015AFC Compressed Size       00000000 (0)\n+015B00 Uncompressed Size     00000000 (0)\n+015B04 Filename Length       006C (108)\n+015B06 Extra Length          0009 (9)\n+015B08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15B08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+015B74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+015B76   Length              0005 (5)\n+015B78   Flags               01 (1) 'Modification'\n+015B79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+015B7D LOCAL HEADER #31      04034B50 (67324752)\n+015B81 Extract Zip Spec      14 (20) '2.0'\n+015B82 Extract OS            00 (0) 'MS-DOS'\n+015B83 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+015B85 Compression Method    0000 (0) 'Stored'\n+015B87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+015B8B CRC                   00000000 (0)\n+015B8F Compressed Size       00000000 (0)\n+015B93 Uncompressed Size     00000000 (0)\n+015B97 Filename Length       0082 (130)\n+015B99 Extra Length          0009 (9)\n+015B9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15B9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+015C1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+015C1F   Length              0005 (5)\n+015C21   Flags               01 (1) 'Modification'\n+015C22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+015C26 PAYLOAD\n+\n+01664B DATA DESCRIPTOR       08074B50 (134695760)\n+01664F CRC                   15D4B854 (366262356)\n+016653 Compressed Size       00000A25 (2597)\n+016657 Uncompressed Size     00000A25 (2597)\n+\n+01665B LOCAL HEADER #32      04034B50 (67324752)\n+01665F Extract Zip Spec      14 (20) '2.0'\n+016660 Extract OS            00 (0) 'MS-DOS'\n+016661 General Purpose Flag  0000 (0)\n+016663 Compression Method    0000 (0) 'Stored'\n+016665 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+016669 CRC                   00000000 (0)\n+01666D Compressed Size       00000000 (0)\n+016671 Uncompressed Size     00000000 (0)\n+016675 Filename Length       0065 (101)\n+016677 Extra Length          0009 (9)\n+016679 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16679: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0166DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0166E0   Length              0005 (5)\n+0166E2   Flags               01 (1) 'Modification'\n+0166E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0166E7 LOCAL HEADER #33      04034B50 (67324752)\n+0166EB Extract Zip Spec      14 (20) '2.0'\n+0166EC Extract OS            00 (0) 'MS-DOS'\n+0166ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0166EF Compression Method    0000 (0) 'Stored'\n+0166F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0166F5 CRC                   00000000 (0)\n+0166F9 Compressed Size       00000000 (0)\n+0166FD Uncompressed Size     00000000 (0)\n+016701 Filename Length       007B (123)\n+016703 Extra Length          0009 (9)\n+016705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+016780 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+016782   Length              0005 (5)\n+016784   Flags               01 (1) 'Modification'\n+016785   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+016789 PAYLOAD\n+\n+019719 DATA DESCRIPTOR       08074B50 (134695760)\n+01971D CRC                   826E1CC4 (2188254404)\n+019721 Compressed Size       00002F90 (12176)\n+019725 Uncompressed Size     00002F90 (12176)\n+\n+019729 LOCAL HEADER #34      04034B50 (67324752)\n+01972D Extract Zip Spec      14 (20) '2.0'\n+01972E Extract OS            00 (0) 'MS-DOS'\n+01972F General Purpose Flag  0000 (0)\n+019731 Compression Method    0000 (0) 'Stored'\n+019733 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019737 CRC                   00000000 (0)\n+01973B Compressed Size       00000000 (0)\n+01973F Uncompressed Size     00000000 (0)\n+019743 Filename Length       006E (110)\n+019745 Extra Length          0009 (9)\n+019747 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19747: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0197B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0197B7   Length              0005 (5)\n+0197B9   Flags               01 (1) 'Modification'\n+0197BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0197BE LOCAL HEADER #35      04034B50 (67324752)\n+0197C2 Extract Zip Spec      14 (20) '2.0'\n+0197C3 Extract OS            00 (0) 'MS-DOS'\n+0197C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0197C6 Compression Method    0000 (0) 'Stored'\n+0197C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0197CC CRC                   00000000 (0)\n+0197D0 Compressed Size       00000000 (0)\n+0197D4 Uncompressed Size     00000000 (0)\n+0197D8 Filename Length       0084 (132)\n+0197DA Extra Length          0009 (9)\n+0197DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x19845: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x197DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0198C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0198CB   Length              0005 (5)\n-0198CD   Flags               01 (1) 'Modification'\n-0198CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0198D2 PAYLOAD\n-\n-01A239 DATA DESCRIPTOR       08074B50 (134695760)\n-01A23D CRC                   1BE163AC (467755948)\n-01A241 Compressed Size       00000967 (2407)\n-01A245 Uncompressed Size     00000967 (2407)\n-\n-01A249 LOCAL HEADER #36      04034B50 (67324752)\n-01A24D Extract Zip Spec      14 (20) '2.0'\n-01A24E Extract OS            00 (0) 'MS-DOS'\n-01A24F General Purpose Flag  0000 (0)\n-01A251 Compression Method    0000 (0) 'Stored'\n-01A253 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A257 CRC                   00000000 (0)\n-01A25B Compressed Size       00000000 (0)\n-01A25F Uncompressed Size     00000000 (0)\n-01A263 Filename Length       0068 (104)\n-01A265 Extra Length          0009 (9)\n-01A267 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A267: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A2CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A2D1   Length              0005 (5)\n-01A2D3   Flags               01 (1) 'Modification'\n-01A2D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01A2D8 LOCAL HEADER #37      04034B50 (67324752)\n-01A2DC Extract Zip Spec      14 (20) '2.0'\n-01A2DD Extract OS            00 (0) 'MS-DOS'\n-01A2DE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01A2E0 Compression Method    0000 (0) 'Stored'\n-01A2E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01A2E6 CRC                   00000000 (0)\n-01A2EA Compressed Size       00000000 (0)\n-01A2EE Uncompressed Size     00000000 (0)\n-01A2F2 Filename Length       007E (126)\n-01A2F4 Extra Length          0009 (9)\n-01A2F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1A2F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01A374 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01A376   Length              0005 (5)\n-01A378   Flags               01 (1) 'Modification'\n-01A379   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01A37D PAYLOAD\n-\n-01AB8C DATA DESCRIPTOR       08074B50 (134695760)\n-01AB90 CRC                   11DB1110 (299569424)\n-01AB94 Compressed Size       0000080F (2063)\n-01AB98 Uncompressed Size     0000080F (2063)\n-\n-01AB9C LOCAL HEADER #38      04034B50 (67324752)\n-01ABA0 Extract Zip Spec      14 (20) '2.0'\n-01ABA1 Extract OS            00 (0) 'MS-DOS'\n-01ABA2 General Purpose Flag  0000 (0)\n-01ABA4 Compression Method    0000 (0) 'Stored'\n-01ABA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01ABAA CRC                   00000000 (0)\n-01ABAE Compressed Size       00000000 (0)\n-01ABB2 Uncompressed Size     00000000 (0)\n-01ABB6 Filename Length       0064 (100)\n-01ABB8 Extra Length          0009 (9)\n-01ABBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1ABBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01AC1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01AC20   Length              0005 (5)\n-01AC22   Flags               01 (1) 'Modification'\n-01AC23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01AC27 LOCAL HEADER #39      04034B50 (67324752)\n-01AC2B Extract Zip Spec      14 (20) '2.0'\n-01AC2C Extract OS            00 (0) 'MS-DOS'\n-01AC2D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01AC2F Compression Method    0000 (0) 'Stored'\n-01AC31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01AC35 CRC                   00000000 (0)\n-01AC39 Compressed Size       00000000 (0)\n-01AC3D Uncompressed Size     00000000 (0)\n-01AC41 Filename Length       007A (122)\n-01AC43 Extra Length          0009 (9)\n-01AC45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1AC45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01ACBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01ACC1   Length              0005 (5)\n-01ACC3   Flags               01 (1) 'Modification'\n-01ACC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01ACC8 PAYLOAD\n-\n-01B8E4 DATA DESCRIPTOR       08074B50 (134695760)\n-01B8E8 CRC                   30A69673 (816223859)\n-01B8EC Compressed Size       00000C1C (3100)\n-01B8F0 Uncompressed Size     00000C1C (3100)\n-\n-01B8F4 LOCAL HEADER #40      04034B50 (67324752)\n-01B8F8 Extract Zip Spec      14 (20) '2.0'\n-01B8F9 Extract OS            00 (0) 'MS-DOS'\n-01B8FA General Purpose Flag  0000 (0)\n-01B8FC Compression Method    0000 (0) 'Stored'\n-01B8FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B902 CRC                   00000000 (0)\n-01B906 Compressed Size       00000000 (0)\n-01B90A Uncompressed Size     00000000 (0)\n-01B90E Filename Length       006E (110)\n-01B910 Extra Length          0009 (9)\n-01B912 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B912: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01B980 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01B982   Length              0005 (5)\n-01B984   Flags               01 (1) 'Modification'\n-01B985   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01B989 LOCAL HEADER #41      04034B50 (67324752)\n-01B98D Extract Zip Spec      14 (20) '2.0'\n-01B98E Extract OS            00 (0) 'MS-DOS'\n-01B98F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01B991 Compression Method    0000 (0) 'Stored'\n-01B993 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B997 CRC                   00000000 (0)\n-01B99B Compressed Size       00000000 (0)\n-01B99F Uncompressed Size     00000000 (0)\n-01B9A3 Filename Length       0084 (132)\n-01B9A5 Extra Length          0009 (9)\n-01B9A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+019860 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019862   Length              0005 (5)\n+019864   Flags               01 (1) 'Modification'\n+019865   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+019869 PAYLOAD\n+\n+01A1D0 DATA DESCRIPTOR       08074B50 (134695760)\n+01A1D4 CRC                   1BE163AC (467755948)\n+01A1D8 Compressed Size       00000967 (2407)\n+01A1DC Uncompressed Size     00000967 (2407)\n+\n+01A1E0 LOCAL HEADER #36      04034B50 (67324752)\n+01A1E4 Extract Zip Spec      14 (20) '2.0'\n+01A1E5 Extract OS            00 (0) 'MS-DOS'\n+01A1E6 General Purpose Flag  0000 (0)\n+01A1E8 Compression Method    0000 (0) 'Stored'\n+01A1EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01A1EE CRC                   00000000 (0)\n+01A1F2 Compressed Size       00000000 (0)\n+01A1F6 Uncompressed Size     00000000 (0)\n+01A1FA Filename Length       0068 (104)\n+01A1FC Extra Length          0009 (9)\n+01A1FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1A1FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01A266 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01A268   Length              0005 (5)\n+01A26A   Flags               01 (1) 'Modification'\n+01A26B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01A26F LOCAL HEADER #37      04034B50 (67324752)\n+01A273 Extract Zip Spec      14 (20) '2.0'\n+01A274 Extract OS            00 (0) 'MS-DOS'\n+01A275 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01A277 Compression Method    0000 (0) 'Stored'\n+01A279 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01A27D CRC                   00000000 (0)\n+01A281 Compressed Size       00000000 (0)\n+01A285 Uncompressed Size     00000000 (0)\n+01A289 Filename Length       007E (126)\n+01A28B Extra Length          0009 (9)\n+01A28D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1A28D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01A30B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01A30D   Length              0005 (5)\n+01A30F   Flags               01 (1) 'Modification'\n+01A310   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01A314 PAYLOAD\n+\n+01AB23 DATA DESCRIPTOR       08074B50 (134695760)\n+01AB27 CRC                   11DB1110 (299569424)\n+01AB2B Compressed Size       0000080F (2063)\n+01AB2F Uncompressed Size     0000080F (2063)\n+\n+01AB33 LOCAL HEADER #38      04034B50 (67324752)\n+01AB37 Extract Zip Spec      14 (20) '2.0'\n+01AB38 Extract OS            00 (0) 'MS-DOS'\n+01AB39 General Purpose Flag  0000 (0)\n+01AB3B Compression Method    0000 (0) 'Stored'\n+01AB3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01AB41 CRC                   00000000 (0)\n+01AB45 Compressed Size       00000000 (0)\n+01AB49 Uncompressed Size     00000000 (0)\n+01AB4D Filename Length       0064 (100)\n+01AB4F Extra Length          0009 (9)\n+01AB51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1AB51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01ABB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01ABB7   Length              0005 (5)\n+01ABB9   Flags               01 (1) 'Modification'\n+01ABBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01ABBE LOCAL HEADER #39      04034B50 (67324752)\n+01ABC2 Extract Zip Spec      14 (20) '2.0'\n+01ABC3 Extract OS            00 (0) 'MS-DOS'\n+01ABC4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01ABC6 Compression Method    0000 (0) 'Stored'\n+01ABC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01ABCC CRC                   00000000 (0)\n+01ABD0 Compressed Size       00000000 (0)\n+01ABD4 Uncompressed Size     00000000 (0)\n+01ABD8 Filename Length       007A (122)\n+01ABDA Extra Length          0009 (9)\n+01ABDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1ABDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01AC56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01AC58   Length              0005 (5)\n+01AC5A   Flags               01 (1) 'Modification'\n+01AC5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01AC5F PAYLOAD\n+\n+01B87B DATA DESCRIPTOR       08074B50 (134695760)\n+01B87F CRC                   30A69673 (816223859)\n+01B883 Compressed Size       00000C1C (3100)\n+01B887 Uncompressed Size     00000C1C (3100)\n+\n+01B88B LOCAL HEADER #40      04034B50 (67324752)\n+01B88F Extract Zip Spec      14 (20) '2.0'\n+01B890 Extract OS            00 (0) 'MS-DOS'\n+01B891 General Purpose Flag  0000 (0)\n+01B893 Compression Method    0000 (0) 'Stored'\n+01B895 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B899 CRC                   00000000 (0)\n+01B89D Compressed Size       00000000 (0)\n+01B8A1 Uncompressed Size     00000000 (0)\n+01B8A5 Filename Length       006E (110)\n+01B8A7 Extra Length          0009 (9)\n+01B8A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B8A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B917 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B919   Length              0005 (5)\n+01B91B   Flags               01 (1) 'Modification'\n+01B91C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B920 LOCAL HEADER #41      04034B50 (67324752)\n+01B924 Extract Zip Spec      14 (20) '2.0'\n+01B925 Extract OS            00 (0) 'MS-DOS'\n+01B926 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01B928 Compression Method    0000 (0) 'Stored'\n+01B92A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B92E CRC                   00000000 (0)\n+01B932 Compressed Size       00000000 (0)\n+01B936 Uncompressed Size     00000000 (0)\n+01B93A Filename Length       0084 (132)\n+01B93C Extra Length          0009 (9)\n+01B93E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x1B9A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B93E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01BA2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01BA2D   Length              0005 (5)\n-01BA2F   Flags               01 (1) 'Modification'\n-01BA30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01BA34 PAYLOAD\n-\n-01C10B DATA DESCRIPTOR       08074B50 (134695760)\n-01C10F CRC                   0C316B32 (204565298)\n-01C113 Compressed Size       000006D7 (1751)\n-01C117 Uncompressed Size     000006D7 (1751)\n-\n-01C11B LOCAL HEADER #42      04034B50 (67324752)\n-01C11F Extract Zip Spec      14 (20) '2.0'\n-01C120 Extract OS            00 (0) 'MS-DOS'\n-01C121 General Purpose Flag  0000 (0)\n-01C123 Compression Method    0000 (0) 'Stored'\n-01C125 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01C129 CRC                   00000000 (0)\n-01C12D Compressed Size       00000000 (0)\n-01C131 Uncompressed Size     00000000 (0)\n-01C135 Filename Length       006A (106)\n-01C137 Extra Length          0009 (9)\n-01C139 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1C139: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01C1A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01C1A5   Length              0005 (5)\n-01C1A7   Flags               01 (1) 'Modification'\n-01C1A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01C1AC LOCAL HEADER #43      04034B50 (67324752)\n-01C1B0 Extract Zip Spec      14 (20) '2.0'\n-01C1B1 Extract OS            00 (0) 'MS-DOS'\n-01C1B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01C1B4 Compression Method    0000 (0) 'Stored'\n-01C1B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01C1BA CRC                   00000000 (0)\n-01C1BE Compressed Size       00000000 (0)\n-01C1C2 Uncompressed Size     00000000 (0)\n-01C1C6 Filename Length       0080 (128)\n-01C1C8 Extra Length          0009 (9)\n-01C1CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1C1CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01C24A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01C24C   Length              0005 (5)\n-01C24E   Flags               01 (1) 'Modification'\n-01C24F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01C253 PAYLOAD\n-\n-01D58E DATA DESCRIPTOR       08074B50 (134695760)\n-01D592 CRC                   37BEEC96 (935259286)\n-01D596 Compressed Size       0000133B (4923)\n-01D59A Uncompressed Size     0000133B (4923)\n-\n-01D59E LOCAL HEADER #44      04034B50 (67324752)\n-01D5A2 Extract Zip Spec      14 (20) '2.0'\n-01D5A3 Extract OS            00 (0) 'MS-DOS'\n-01D5A4 General Purpose Flag  0000 (0)\n-01D5A6 Compression Method    0000 (0) 'Stored'\n-01D5A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01D5AC CRC                   00000000 (0)\n-01D5B0 Compressed Size       00000000 (0)\n-01D5B4 Uncompressed Size     00000000 (0)\n-01D5B8 Filename Length       0072 (114)\n-01D5BA Extra Length          0009 (9)\n-01D5BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D5BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01D62E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01D630   Length              0005 (5)\n-01D632   Flags               01 (1) 'Modification'\n-01D633   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01D637 LOCAL HEADER #45      04034B50 (67324752)\n-01D63B Extract Zip Spec      14 (20) '2.0'\n-01D63C Extract OS            00 (0) 'MS-DOS'\n-01D63D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01D63F Compression Method    0000 (0) 'Stored'\n-01D641 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01D645 CRC                   00000000 (0)\n-01D649 Compressed Size       00000000 (0)\n-01D64D Uncompressed Size     00000000 (0)\n-01D651 Filename Length       0088 (136)\n-01D653 Extra Length          0009 (9)\n-01D655 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+01B9C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B9C4   Length              0005 (5)\n+01B9C6   Flags               01 (1) 'Modification'\n+01B9C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01B9CB PAYLOAD\n+\n+01C0A2 DATA DESCRIPTOR       08074B50 (134695760)\n+01C0A6 CRC                   0C316B32 (204565298)\n+01C0AA Compressed Size       000006D7 (1751)\n+01C0AE Uncompressed Size     000006D7 (1751)\n+\n+01C0B2 LOCAL HEADER #42      04034B50 (67324752)\n+01C0B6 Extract Zip Spec      14 (20) '2.0'\n+01C0B7 Extract OS            00 (0) 'MS-DOS'\n+01C0B8 General Purpose Flag  0000 (0)\n+01C0BA Compression Method    0000 (0) 'Stored'\n+01C0BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01C0C0 CRC                   00000000 (0)\n+01C0C4 Compressed Size       00000000 (0)\n+01C0C8 Uncompressed Size     00000000 (0)\n+01C0CC Filename Length       006A (106)\n+01C0CE Extra Length          0009 (9)\n+01C0D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C0D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01C13A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01C13C   Length              0005 (5)\n+01C13E   Flags               01 (1) 'Modification'\n+01C13F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01C143 LOCAL HEADER #43      04034B50 (67324752)\n+01C147 Extract Zip Spec      14 (20) '2.0'\n+01C148 Extract OS            00 (0) 'MS-DOS'\n+01C149 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01C14B Compression Method    0000 (0) 'Stored'\n+01C14D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01C151 CRC                   00000000 (0)\n+01C155 Compressed Size       00000000 (0)\n+01C159 Uncompressed Size     00000000 (0)\n+01C15D Filename Length       0080 (128)\n+01C15F Extra Length          0009 (9)\n+01C161 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C161: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01C1E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01C1E3   Length              0005 (5)\n+01C1E5   Flags               01 (1) 'Modification'\n+01C1E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01C1EA PAYLOAD\n+\n+01D525 DATA DESCRIPTOR       08074B50 (134695760)\n+01D529 CRC                   37BEEC96 (935259286)\n+01D52D Compressed Size       0000133B (4923)\n+01D531 Uncompressed Size     0000133B (4923)\n+\n+01D535 LOCAL HEADER #44      04034B50 (67324752)\n+01D539 Extract Zip Spec      14 (20) '2.0'\n+01D53A Extract OS            00 (0) 'MS-DOS'\n+01D53B General Purpose Flag  0000 (0)\n+01D53D Compression Method    0000 (0) 'Stored'\n+01D53F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01D543 CRC                   00000000 (0)\n+01D547 Compressed Size       00000000 (0)\n+01D54B Uncompressed Size     00000000 (0)\n+01D54F Filename Length       0072 (114)\n+01D551 Extra Length          0009 (9)\n+01D553 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1D553: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01D5C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01D5C7   Length              0005 (5)\n+01D5C9   Flags               01 (1) 'Modification'\n+01D5CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01D5CE LOCAL HEADER #45      04034B50 (67324752)\n+01D5D2 Extract Zip Spec      14 (20) '2.0'\n+01D5D3 Extract OS            00 (0) 'MS-DOS'\n+01D5D4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01D5D6 Compression Method    0000 (0) 'Stored'\n+01D5D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01D5DC CRC                   00000000 (0)\n+01D5E0 Compressed Size       00000000 (0)\n+01D5E4 Uncompressed Size     00000000 (0)\n+01D5E8 Filename Length       0088 (136)\n+01D5EA Extra Length          0009 (9)\n+01D5EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x1D655: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D5EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01D6DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01D6DF   Length              0005 (5)\n-01D6E1   Flags               01 (1) 'Modification'\n-01D6E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01D6E6 PAYLOAD\n-\n-01DE32 DATA DESCRIPTOR       08074B50 (134695760)\n-01DE36 CRC                   D0AE7BE4 (3501095908)\n-01DE3A Compressed Size       0000074C (1868)\n-01DE3E Uncompressed Size     0000074C (1868)\n-\n-01DE42 LOCAL HEADER #46      04034B50 (67324752)\n-01DE46 Extract Zip Spec      14 (20) '2.0'\n-01DE47 Extract OS            00 (0) 'MS-DOS'\n-01DE48 General Purpose Flag  0000 (0)\n-01DE4A Compression Method    0000 (0) 'Stored'\n-01DE4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01DE50 CRC                   00000000 (0)\n-01DE54 Compressed Size       00000000 (0)\n-01DE58 Uncompressed Size     00000000 (0)\n-01DE5C Filename Length       006E (110)\n-01DE5E Extra Length          0009 (9)\n-01DE60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1DE60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01DECE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01DED0   Length              0005 (5)\n-01DED2   Flags               01 (1) 'Modification'\n-01DED3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01DED7 LOCAL HEADER #47      04034B50 (67324752)\n-01DEDB Extract Zip Spec      14 (20) '2.0'\n-01DEDC Extract OS            00 (0) 'MS-DOS'\n-01DEDD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01DEDF Compression Method    0000 (0) 'Stored'\n-01DEE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01DEE5 CRC                   00000000 (0)\n-01DEE9 Compressed Size       00000000 (0)\n-01DEED Uncompressed Size     00000000 (0)\n-01DEF1 Filename Length       0084 (132)\n-01DEF3 Extra Length          0009 (9)\n-01DEF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+01D674 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01D676   Length              0005 (5)\n+01D678   Flags               01 (1) 'Modification'\n+01D679   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01D67D PAYLOAD\n+\n+01DDC9 DATA DESCRIPTOR       08074B50 (134695760)\n+01DDCD CRC                   D0AE7BE4 (3501095908)\n+01DDD1 Compressed Size       0000074C (1868)\n+01DDD5 Uncompressed Size     0000074C (1868)\n+\n+01DDD9 LOCAL HEADER #46      04034B50 (67324752)\n+01DDDD Extract Zip Spec      14 (20) '2.0'\n+01DDDE Extract OS            00 (0) 'MS-DOS'\n+01DDDF General Purpose Flag  0000 (0)\n+01DDE1 Compression Method    0000 (0) 'Stored'\n+01DDE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01DDE7 CRC                   00000000 (0)\n+01DDEB Compressed Size       00000000 (0)\n+01DDEF Uncompressed Size     00000000 (0)\n+01DDF3 Filename Length       006E (110)\n+01DDF5 Extra Length          0009 (9)\n+01DDF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1DDF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01DE65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01DE67   Length              0005 (5)\n+01DE69   Flags               01 (1) 'Modification'\n+01DE6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01DE6E LOCAL HEADER #47      04034B50 (67324752)\n+01DE72 Extract Zip Spec      14 (20) '2.0'\n+01DE73 Extract OS            00 (0) 'MS-DOS'\n+01DE74 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01DE76 Compression Method    0000 (0) 'Stored'\n+01DE78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01DE7C CRC                   00000000 (0)\n+01DE80 Compressed Size       00000000 (0)\n+01DE84 Uncompressed Size     00000000 (0)\n+01DE88 Filename Length       0084 (132)\n+01DE8A Extra Length          0009 (9)\n+01DE8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x1DEF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1DE8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01DF79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01DF7B   Length              0005 (5)\n-01DF7D   Flags               01 (1) 'Modification'\n-01DF7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01DF82 PAYLOAD\n-\n-01EFBE DATA DESCRIPTOR       08074B50 (134695760)\n-01EFC2 CRC                   4C134CE6 (1276333286)\n-01EFC6 Compressed Size       0000103C (4156)\n-01EFCA Uncompressed Size     0000103C (4156)\n-\n-01EFCE LOCAL HEADER #48      04034B50 (67324752)\n-01EFD2 Extract Zip Spec      14 (20) '2.0'\n-01EFD3 Extract OS            00 (0) 'MS-DOS'\n-01EFD4 General Purpose Flag  0000 (0)\n-01EFD6 Compression Method    0000 (0) 'Stored'\n-01EFD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01EFDC CRC                   00000000 (0)\n-01EFE0 Compressed Size       00000000 (0)\n-01EFE4 Uncompressed Size     00000000 (0)\n-01EFE8 Filename Length       0070 (112)\n-01EFEA Extra Length          0009 (9)\n-01EFEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1EFEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01F05C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01F05E   Length              0005 (5)\n-01F060   Flags               01 (1) 'Modification'\n-01F061   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01F065 LOCAL HEADER #49      04034B50 (67324752)\n-01F069 Extract Zip Spec      14 (20) '2.0'\n-01F06A Extract OS            00 (0) 'MS-DOS'\n-01F06B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01F06D Compression Method    0000 (0) 'Stored'\n-01F06F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01F073 CRC                   00000000 (0)\n-01F077 Compressed Size       00000000 (0)\n-01F07B Uncompressed Size     00000000 (0)\n-01F07F Filename Length       0086 (134)\n-01F081 Extra Length          0009 (9)\n-01F083 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+01DF10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01DF12   Length              0005 (5)\n+01DF14   Flags               01 (1) 'Modification'\n+01DF15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01DF19 PAYLOAD\n+\n+01EF55 DATA DESCRIPTOR       08074B50 (134695760)\n+01EF59 CRC                   4C134CE6 (1276333286)\n+01EF5D Compressed Size       0000103C (4156)\n+01EF61 Uncompressed Size     0000103C (4156)\n+\n+01EF65 LOCAL HEADER #48      04034B50 (67324752)\n+01EF69 Extract Zip Spec      14 (20) '2.0'\n+01EF6A Extract OS            00 (0) 'MS-DOS'\n+01EF6B General Purpose Flag  0000 (0)\n+01EF6D Compression Method    0000 (0) 'Stored'\n+01EF6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01EF73 CRC                   00000000 (0)\n+01EF77 Compressed Size       00000000 (0)\n+01EF7B Uncompressed Size     00000000 (0)\n+01EF7F Filename Length       0070 (112)\n+01EF81 Extra Length          0009 (9)\n+01EF83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1EF83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01EFF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01EFF5   Length              0005 (5)\n+01EFF7   Flags               01 (1) 'Modification'\n+01EFF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01EFFC LOCAL HEADER #49      04034B50 (67324752)\n+01F000 Extract Zip Spec      14 (20) '2.0'\n+01F001 Extract OS            00 (0) 'MS-DOS'\n+01F002 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01F004 Compression Method    0000 (0) 'Stored'\n+01F006 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01F00A CRC                   00000000 (0)\n+01F00E Compressed Size       00000000 (0)\n+01F012 Uncompressed Size     00000000 (0)\n+01F016 Filename Length       0086 (134)\n+01F018 Extra Length          0009 (9)\n+01F01A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x1F083: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1F01A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01F109 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01F10B   Length              0005 (5)\n-01F10D   Flags               01 (1) 'Modification'\n-01F10E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01F112 PAYLOAD\n-\n-01F94A DATA DESCRIPTOR       08074B50 (134695760)\n-01F94E CRC                   63086228 (1661493800)\n-01F952 Compressed Size       00000838 (2104)\n-01F956 Uncompressed Size     00000838 (2104)\n-\n-01F95A LOCAL HEADER #50      04034B50 (67324752)\n-01F95E Extract Zip Spec      14 (20) '2.0'\n-01F95F Extract OS            00 (0) 'MS-DOS'\n-01F960 General Purpose Flag  0000 (0)\n-01F962 Compression Method    0000 (0) 'Stored'\n-01F964 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01F968 CRC                   00000000 (0)\n-01F96C Compressed Size       00000000 (0)\n-01F970 Uncompressed Size     00000000 (0)\n-01F974 Filename Length       006C (108)\n-01F976 Extra Length          0009 (9)\n-01F978 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F978: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01F9E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01F9E6   Length              0005 (5)\n-01F9E8   Flags               01 (1) 'Modification'\n-01F9E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01F9ED LOCAL HEADER #51      04034B50 (67324752)\n-01F9F1 Extract Zip Spec      14 (20) '2.0'\n-01F9F2 Extract OS            00 (0) 'MS-DOS'\n-01F9F3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01F9F5 Compression Method    0000 (0) 'Stored'\n-01F9F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01F9FB CRC                   00000000 (0)\n-01F9FF Compressed Size       00000000 (0)\n-01FA03 Uncompressed Size     00000000 (0)\n-01FA07 Filename Length       0082 (130)\n-01FA09 Extra Length          0009 (9)\n-01FA0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1FA0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01FA8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01FA8F   Length              0005 (5)\n-01FA91   Flags               01 (1) 'Modification'\n-01FA92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01FA96 PAYLOAD\n-\n-020726 DATA DESCRIPTOR       08074B50 (134695760)\n-02072A CRC                   9EF621C1 (2666930625)\n-02072E Compressed Size       00000C90 (3216)\n-020732 Uncompressed Size     00000C90 (3216)\n-\n-020736 LOCAL HEADER #52      04034B50 (67324752)\n-02073A Extract Zip Spec      14 (20) '2.0'\n-02073B Extract OS            00 (0) 'MS-DOS'\n-02073C General Purpose Flag  0000 (0)\n-02073E Compression Method    0000 (0) 'Stored'\n-020740 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020744 CRC                   00000000 (0)\n-020748 Compressed Size       00000000 (0)\n-02074C Uncompressed Size     00000000 (0)\n-020750 Filename Length       0054 (84)\n-020752 Extra Length          0009 (9)\n-020754 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20754: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0207A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0207AA   Length              0005 (5)\n-0207AC   Flags               01 (1) 'Modification'\n-0207AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0207B1 LOCAL HEADER #53      04034B50 (67324752)\n-0207B5 Extract Zip Spec      14 (20) '2.0'\n-0207B6 Extract OS            00 (0) 'MS-DOS'\n-0207B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0207B9 Compression Method    0000 (0) 'Stored'\n-0207BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0207BF CRC                   00000000 (0)\n-0207C3 Compressed Size       00000000 (0)\n-0207C7 Uncompressed Size     00000000 (0)\n-0207CB Filename Length       006A (106)\n-0207CD Extra Length          0009 (9)\n-0207CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x207CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-020839 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02083B   Length              0005 (5)\n-02083D   Flags               01 (1) 'Modification'\n-02083E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-020842 PAYLOAD\n-\n-021738 DATA DESCRIPTOR       08074B50 (134695760)\n-02173C CRC                   6BE0FFE8 (1809907688)\n-021740 Compressed Size       00000EF6 (3830)\n-021744 Uncompressed Size     00000EF6 (3830)\n-\n-021748 LOCAL HEADER #54      04034B50 (67324752)\n-02174C Extract Zip Spec      14 (20) '2.0'\n-02174D Extract OS            00 (0) 'MS-DOS'\n-02174E General Purpose Flag  0000 (0)\n-021750 Compression Method    0000 (0) 'Stored'\n-021752 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-021756 CRC                   00000000 (0)\n-02175A Compressed Size       00000000 (0)\n-02175E Uncompressed Size     00000000 (0)\n-021762 Filename Length       0059 (89)\n-021764 Extra Length          0009 (9)\n-021766 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21766: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0217BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0217C1   Length              0005 (5)\n-0217C3   Flags               01 (1) 'Modification'\n-0217C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0217C8 LOCAL HEADER #55      04034B50 (67324752)\n-0217CC Extract Zip Spec      14 (20) '2.0'\n-0217CD Extract OS            00 (0) 'MS-DOS'\n-0217CE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0217D0 Compression Method    0000 (0) 'Stored'\n-0217D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0217D6 CRC                   00000000 (0)\n-0217DA Compressed Size       00000000 (0)\n-0217DE Uncompressed Size     00000000 (0)\n-0217E2 Filename Length       006F (111)\n-0217E4 Extra Length          0009 (9)\n-0217E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x217E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-021855 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-021857   Length              0005 (5)\n-021859   Flags               01 (1) 'Modification'\n-02185A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02185E PAYLOAD\n-\n-0224A2 DATA DESCRIPTOR       08074B50 (134695760)\n-0224A6 CRC                   8743913D (2269352253)\n-0224AA Compressed Size       00000C44 (3140)\n-0224AE Uncompressed Size     00000C44 (3140)\n-\n-0224B2 LOCAL HEADER #56      04034B50 (67324752)\n-0224B6 Extract Zip Spec      14 (20) '2.0'\n-0224B7 Extract OS            00 (0) 'MS-DOS'\n-0224B8 General Purpose Flag  0000 (0)\n-0224BA Compression Method    0000 (0) 'Stored'\n-0224BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0224C0 CRC                   00000000 (0)\n-0224C4 Compressed Size       00000000 (0)\n-0224C8 Uncompressed Size     00000000 (0)\n-0224CC Filename Length       0074 (116)\n-0224CE Extra Length          0009 (9)\n-0224D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x224D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-022544 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-022546   Length              0005 (5)\n-022548   Flags               01 (1) 'Modification'\n-022549   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02254D LOCAL HEADER #57      04034B50 (67324752)\n-022551 Extract Zip Spec      14 (20) '2.0'\n-022552 Extract OS            00 (0) 'MS-DOS'\n-022553 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-022555 Compression Method    0000 (0) 'Stored'\n-022557 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02255B CRC                   00000000 (0)\n-02255F Compressed Size       00000000 (0)\n-022563 Uncompressed Size     00000000 (0)\n-022567 Filename Length       008A (138)\n-022569 Extra Length          0009 (9)\n-02256B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+01F0A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01F0A2   Length              0005 (5)\n+01F0A4   Flags               01 (1) 'Modification'\n+01F0A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01F0A9 PAYLOAD\n+\n+01F8E1 DATA DESCRIPTOR       08074B50 (134695760)\n+01F8E5 CRC                   63086228 (1661493800)\n+01F8E9 Compressed Size       00000838 (2104)\n+01F8ED Uncompressed Size     00000838 (2104)\n+\n+01F8F1 LOCAL HEADER #50      04034B50 (67324752)\n+01F8F5 Extract Zip Spec      14 (20) '2.0'\n+01F8F6 Extract OS            00 (0) 'MS-DOS'\n+01F8F7 General Purpose Flag  0000 (0)\n+01F8F9 Compression Method    0000 (0) 'Stored'\n+01F8FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01F8FF CRC                   00000000 (0)\n+01F903 Compressed Size       00000000 (0)\n+01F907 Uncompressed Size     00000000 (0)\n+01F90B Filename Length       006C (108)\n+01F90D Extra Length          0009 (9)\n+01F90F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1F90F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01F97B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01F97D   Length              0005 (5)\n+01F97F   Flags               01 (1) 'Modification'\n+01F980   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01F984 LOCAL HEADER #51      04034B50 (67324752)\n+01F988 Extract Zip Spec      14 (20) '2.0'\n+01F989 Extract OS            00 (0) 'MS-DOS'\n+01F98A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01F98C Compression Method    0000 (0) 'Stored'\n+01F98E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01F992 CRC                   00000000 (0)\n+01F996 Compressed Size       00000000 (0)\n+01F99A Uncompressed Size     00000000 (0)\n+01F99E Filename Length       0082 (130)\n+01F9A0 Extra Length          0009 (9)\n+01F9A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1F9A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01FA24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01FA26   Length              0005 (5)\n+01FA28   Flags               01 (1) 'Modification'\n+01FA29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01FA2D PAYLOAD\n+\n+0206BD DATA DESCRIPTOR       08074B50 (134695760)\n+0206C1 CRC                   9EF621C1 (2666930625)\n+0206C5 Compressed Size       00000C90 (3216)\n+0206C9 Uncompressed Size     00000C90 (3216)\n+\n+0206CD LOCAL HEADER #52      04034B50 (67324752)\n+0206D1 Extract Zip Spec      14 (20) '2.0'\n+0206D2 Extract OS            00 (0) 'MS-DOS'\n+0206D3 General Purpose Flag  0000 (0)\n+0206D5 Compression Method    0000 (0) 'Stored'\n+0206D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0206DB CRC                   00000000 (0)\n+0206DF Compressed Size       00000000 (0)\n+0206E3 Uncompressed Size     00000000 (0)\n+0206E7 Filename Length       0054 (84)\n+0206E9 Extra Length          0009 (9)\n+0206EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x206EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02073F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+020741   Length              0005 (5)\n+020743   Flags               01 (1) 'Modification'\n+020744   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+020748 LOCAL HEADER #53      04034B50 (67324752)\n+02074C Extract Zip Spec      14 (20) '2.0'\n+02074D Extract OS            00 (0) 'MS-DOS'\n+02074E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+020750 Compression Method    0000 (0) 'Stored'\n+020752 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+020756 CRC                   00000000 (0)\n+02075A Compressed Size       00000000 (0)\n+02075E Uncompressed Size     00000000 (0)\n+020762 Filename Length       006A (106)\n+020764 Extra Length          0009 (9)\n+020766 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x20766: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0207D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0207D2   Length              0005 (5)\n+0207D4   Flags               01 (1) 'Modification'\n+0207D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0207D9 PAYLOAD\n+\n+0216CF DATA DESCRIPTOR       08074B50 (134695760)\n+0216D3 CRC                   6BE0FFE8 (1809907688)\n+0216D7 Compressed Size       00000EF6 (3830)\n+0216DB Uncompressed Size     00000EF6 (3830)\n+\n+0216DF LOCAL HEADER #54      04034B50 (67324752)\n+0216E3 Extract Zip Spec      14 (20) '2.0'\n+0216E4 Extract OS            00 (0) 'MS-DOS'\n+0216E5 General Purpose Flag  0000 (0)\n+0216E7 Compression Method    0000 (0) 'Stored'\n+0216E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0216ED CRC                   00000000 (0)\n+0216F1 Compressed Size       00000000 (0)\n+0216F5 Uncompressed Size     00000000 (0)\n+0216F9 Filename Length       0059 (89)\n+0216FB Extra Length          0009 (9)\n+0216FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x216FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021756 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021758   Length              0005 (5)\n+02175A   Flags               01 (1) 'Modification'\n+02175B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02175F LOCAL HEADER #55      04034B50 (67324752)\n+021763 Extract Zip Spec      14 (20) '2.0'\n+021764 Extract OS            00 (0) 'MS-DOS'\n+021765 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+021767 Compression Method    0000 (0) 'Stored'\n+021769 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02176D CRC                   00000000 (0)\n+021771 Compressed Size       00000000 (0)\n+021775 Uncompressed Size     00000000 (0)\n+021779 Filename Length       006F (111)\n+02177B Extra Length          0009 (9)\n+02177D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2177D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0217EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0217EE   Length              0005 (5)\n+0217F0   Flags               01 (1) 'Modification'\n+0217F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0217F5 PAYLOAD\n+\n+022439 DATA DESCRIPTOR       08074B50 (134695760)\n+02243D CRC                   8743913D (2269352253)\n+022441 Compressed Size       00000C44 (3140)\n+022445 Uncompressed Size     00000C44 (3140)\n+\n+022449 LOCAL HEADER #56      04034B50 (67324752)\n+02244D Extract Zip Spec      14 (20) '2.0'\n+02244E Extract OS            00 (0) 'MS-DOS'\n+02244F General Purpose Flag  0000 (0)\n+022451 Compression Method    0000 (0) 'Stored'\n+022453 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+022457 CRC                   00000000 (0)\n+02245B Compressed Size       00000000 (0)\n+02245F Uncompressed Size     00000000 (0)\n+022463 Filename Length       0074 (116)\n+022465 Extra Length          0009 (9)\n+022467 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x22467: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0224DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0224DD   Length              0005 (5)\n+0224DF   Flags               01 (1) 'Modification'\n+0224E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0224E4 LOCAL HEADER #57      04034B50 (67324752)\n+0224E8 Extract Zip Spec      14 (20) '2.0'\n+0224E9 Extract OS            00 (0) 'MS-DOS'\n+0224EA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0224EC Compression Method    0000 (0) 'Stored'\n+0224EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0224F2 CRC                   00000000 (0)\n+0224F6 Compressed Size       00000000 (0)\n+0224FA Uncompressed Size     00000000 (0)\n+0224FE Filename Length       008A (138)\n+022500 Extra Length          0009 (9)\n+022502 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0x2256B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x22502: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0225F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0225F7   Length              0005 (5)\n-0225F9   Flags               01 (1) 'Modification'\n-0225FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0225FE PAYLOAD\n-\n-023227 DATA DESCRIPTOR       08074B50 (134695760)\n-02322B CRC                   07A59EC9 (128294601)\n-02322F Compressed Size       00000C29 (3113)\n-023233 Uncompressed Size     00000C29 (3113)\n-\n-023237 LOCAL HEADER #58      04034B50 (67324752)\n-02323B Extract Zip Spec      14 (20) '2.0'\n-02323C Extract OS            00 (0) 'MS-DOS'\n-02323D General Purpose Flag  0000 (0)\n-02323F Compression Method    0000 (0) 'Stored'\n-023241 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-023245 CRC                   00000000 (0)\n-023249 Compressed Size       00000000 (0)\n-02324D Uncompressed Size     00000000 (0)\n-023251 Filename Length       0024 (36)\n-023253 Extra Length          0009 (9)\n-023255 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x23255: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-023279 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02327B   Length              0005 (5)\n-02327D   Flags               01 (1) 'Modification'\n-02327E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-023282 LOCAL HEADER #59      04034B50 (67324752)\n-023286 Extract Zip Spec      14 (20) '2.0'\n-023287 Extract OS            00 (0) 'MS-DOS'\n-023288 General Purpose Flag  0000 (0)\n-02328A Compression Method    0000 (0) 'Stored'\n-02328C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-023290 CRC                   00000000 (0)\n-023294 Compressed Size       00000000 (0)\n-023298 Uncompressed Size     00000000 (0)\n-02329C Filename Length       002D (45)\n-02329E Extra Length          0009 (9)\n-0232A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x232A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0232CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0232CF   Length              0005 (5)\n-0232D1   Flags               01 (1) 'Modification'\n-0232D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0232D6 LOCAL HEADER #60      04034B50 (67324752)\n-0232DA Extract Zip Spec      14 (20) '2.0'\n-0232DB Extract OS            00 (0) 'MS-DOS'\n-0232DC General Purpose Flag  0000 (0)\n-0232DE Compression Method    0000 (0) 'Stored'\n-0232E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0232E4 CRC                   00000000 (0)\n-0232E8 Compressed Size       00000000 (0)\n-0232EC Uncompressed Size     00000000 (0)\n-0232F0 Filename Length       0073 (115)\n-0232F2 Extra Length          0009 (9)\n-0232F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x232F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-023367 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-023369   Length              0005 (5)\n-02336B   Flags               01 (1) 'Modification'\n-02336C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-023370 LOCAL HEADER #61      04034B50 (67324752)\n-023374 Extract Zip Spec      14 (20) '2.0'\n-023375 Extract OS            00 (0) 'MS-DOS'\n-023376 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-023378 Compression Method    0000 (0) 'Stored'\n-02337A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02337E CRC                   00000000 (0)\n-023382 Compressed Size       00000000 (0)\n-023386 Uncompressed Size     00000000 (0)\n-02338A Filename Length       0089 (137)\n-02338C Extra Length          0009 (9)\n-02338E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02258C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02258E   Length              0005 (5)\n+022590   Flags               01 (1) 'Modification'\n+022591   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+022595 PAYLOAD\n+\n+0231BE DATA DESCRIPTOR       08074B50 (134695760)\n+0231C2 CRC                   07A59EC9 (128294601)\n+0231C6 Compressed Size       00000C29 (3113)\n+0231CA Uncompressed Size     00000C29 (3113)\n+\n+0231CE LOCAL HEADER #58      04034B50 (67324752)\n+0231D2 Extract Zip Spec      14 (20) '2.0'\n+0231D3 Extract OS            00 (0) 'MS-DOS'\n+0231D4 General Purpose Flag  0000 (0)\n+0231D6 Compression Method    0000 (0) 'Stored'\n+0231D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0231DC CRC                   00000000 (0)\n+0231E0 Compressed Size       00000000 (0)\n+0231E4 Uncompressed Size     00000000 (0)\n+0231E8 Filename Length       0024 (36)\n+0231EA Extra Length          0009 (9)\n+0231EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x231EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+023210 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023212   Length              0005 (5)\n+023214   Flags               01 (1) 'Modification'\n+023215   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+023219 LOCAL HEADER #59      04034B50 (67324752)\n+02321D Extract Zip Spec      14 (20) '2.0'\n+02321E Extract OS            00 (0) 'MS-DOS'\n+02321F General Purpose Flag  0000 (0)\n+023221 Compression Method    0000 (0) 'Stored'\n+023223 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023227 CRC                   00000000 (0)\n+02322B Compressed Size       00000000 (0)\n+02322F Uncompressed Size     00000000 (0)\n+023233 Filename Length       002D (45)\n+023235 Extra Length          0009 (9)\n+023237 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23237: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+023264 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023266   Length              0005 (5)\n+023268   Flags               01 (1) 'Modification'\n+023269   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02326D LOCAL HEADER #60      04034B50 (67324752)\n+023271 Extract Zip Spec      14 (20) '2.0'\n+023272 Extract OS            00 (0) 'MS-DOS'\n+023273 General Purpose Flag  0000 (0)\n+023275 Compression Method    0000 (0) 'Stored'\n+023277 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02327B CRC                   00000000 (0)\n+02327F Compressed Size       00000000 (0)\n+023283 Uncompressed Size     00000000 (0)\n+023287 Filename Length       0073 (115)\n+023289 Extra Length          0009 (9)\n+02328B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2328B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0232FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023300   Length              0005 (5)\n+023302   Flags               01 (1) 'Modification'\n+023303   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+023307 LOCAL HEADER #61      04034B50 (67324752)\n+02330B Extract Zip Spec      14 (20) '2.0'\n+02330C Extract OS            00 (0) 'MS-DOS'\n+02330D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02330F Compression Method    0000 (0) 'Stored'\n+023311 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023315 CRC                   00000000 (0)\n+023319 Compressed Size       00000000 (0)\n+02331D Uncompressed Size     00000000 (0)\n+023321 Filename Length       0089 (137)\n+023323 Extra Length          0009 (9)\n+023325 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXX'\n #\n-# WARNING: Offset 0x2338E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x23325: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-023417 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-023419   Length              0005 (5)\n-02341B   Flags               01 (1) 'Modification'\n-02341C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-023420 PAYLOAD\n-\n-023E5A DATA DESCRIPTOR       08074B50 (134695760)\n-023E5E CRC                   FD79F819 (4252629017)\n-023E62 Compressed Size       00000A3A (2618)\n-023E66 Uncompressed Size     00000A3A (2618)\n-\n-023E6A LOCAL HEADER #62      04034B50 (67324752)\n-023E6E Extract Zip Spec      14 (20) '2.0'\n-023E6F Extract OS            00 (0) 'MS-DOS'\n-023E70 General Purpose Flag  0000 (0)\n-023E72 Compression Method    0000 (0) 'Stored'\n-023E74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-023E78 CRC                   00000000 (0)\n-023E7C Compressed Size       00000000 (0)\n-023E80 Uncompressed Size     00000000 (0)\n-023E84 Filename Length       006E (110)\n-023E86 Extra Length          0009 (9)\n-023E88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x23E88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-023EF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-023EF8   Length              0005 (5)\n-023EFA   Flags               01 (1) 'Modification'\n-023EFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-023EFF LOCAL HEADER #63      04034B50 (67324752)\n-023F03 Extract Zip Spec      14 (20) '2.0'\n-023F04 Extract OS            00 (0) 'MS-DOS'\n-023F05 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-023F07 Compression Method    0000 (0) 'Stored'\n-023F09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-023F0D CRC                   00000000 (0)\n-023F11 Compressed Size       00000000 (0)\n-023F15 Uncompressed Size     00000000 (0)\n-023F19 Filename Length       0084 (132)\n-023F1B Extra Length          0009 (9)\n-023F1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0233AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0233B0   Length              0005 (5)\n+0233B2   Flags               01 (1) 'Modification'\n+0233B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0233B7 PAYLOAD\n+\n+023DF1 DATA DESCRIPTOR       08074B50 (134695760)\n+023DF5 CRC                   FD79F819 (4252629017)\n+023DF9 Compressed Size       00000A3A (2618)\n+023DFD Uncompressed Size     00000A3A (2618)\n+\n+023E01 LOCAL HEADER #62      04034B50 (67324752)\n+023E05 Extract Zip Spec      14 (20) '2.0'\n+023E06 Extract OS            00 (0) 'MS-DOS'\n+023E07 General Purpose Flag  0000 (0)\n+023E09 Compression Method    0000 (0) 'Stored'\n+023E0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023E0F CRC                   00000000 (0)\n+023E13 Compressed Size       00000000 (0)\n+023E17 Uncompressed Size     00000000 (0)\n+023E1B Filename Length       006E (110)\n+023E1D Extra Length          0009 (9)\n+023E1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23E1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+023E8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023E8F   Length              0005 (5)\n+023E91   Flags               01 (1) 'Modification'\n+023E92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+023E96 LOCAL HEADER #63      04034B50 (67324752)\n+023E9A Extract Zip Spec      14 (20) '2.0'\n+023E9B Extract OS            00 (0) 'MS-DOS'\n+023E9C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+023E9E Compression Method    0000 (0) 'Stored'\n+023EA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023EA4 CRC                   00000000 (0)\n+023EA8 Compressed Size       00000000 (0)\n+023EAC Uncompressed Size     00000000 (0)\n+023EB0 Filename Length       0084 (132)\n+023EB2 Extra Length          0009 (9)\n+023EB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x23F1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x23EB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-023FA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-023FA3   Length              0005 (5)\n-023FA5   Flags               01 (1) 'Modification'\n-023FA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-023FAA PAYLOAD\n-\n-024DF0 DATA DESCRIPTOR       08074B50 (134695760)\n-024DF4 CRC                   63D24DDE (1674726878)\n-024DF8 Compressed Size       00000E46 (3654)\n-024DFC Uncompressed Size     00000E46 (3654)\n-\n-024E00 LOCAL HEADER #64      04034B50 (67324752)\n-024E04 Extract Zip Spec      14 (20) '2.0'\n-024E05 Extract OS            00 (0) 'MS-DOS'\n-024E06 General Purpose Flag  0000 (0)\n-024E08 Compression Method    0000 (0) 'Stored'\n-024E0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024E0E CRC                   00000000 (0)\n-024E12 Compressed Size       00000000 (0)\n-024E16 Uncompressed Size     00000000 (0)\n-024E1A Filename Length       0075 (117)\n-024E1C Extra Length          0009 (9)\n-024E1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x24E1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-024E93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-024E95   Length              0005 (5)\n-024E97   Flags               01 (1) 'Modification'\n-024E98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-024E9C LOCAL HEADER #65      04034B50 (67324752)\n-024EA0 Extract Zip Spec      14 (20) '2.0'\n-024EA1 Extract OS            00 (0) 'MS-DOS'\n-024EA2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-024EA4 Compression Method    0000 (0) 'Stored'\n-024EA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-024EAA CRC                   00000000 (0)\n-024EAE Compressed Size       00000000 (0)\n-024EB2 Uncompressed Size     00000000 (0)\n-024EB6 Filename Length       008B (139)\n-024EB8 Extra Length          0009 (9)\n-024EBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+023F38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023F3A   Length              0005 (5)\n+023F3C   Flags               01 (1) 'Modification'\n+023F3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+023F41 PAYLOAD\n+\n+024D87 DATA DESCRIPTOR       08074B50 (134695760)\n+024D8B CRC                   63D24DDE (1674726878)\n+024D8F Compressed Size       00000E46 (3654)\n+024D93 Uncompressed Size     00000E46 (3654)\n+\n+024D97 LOCAL HEADER #64      04034B50 (67324752)\n+024D9B Extract Zip Spec      14 (20) '2.0'\n+024D9C Extract OS            00 (0) 'MS-DOS'\n+024D9D General Purpose Flag  0000 (0)\n+024D9F Compression Method    0000 (0) 'Stored'\n+024DA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+024DA5 CRC                   00000000 (0)\n+024DA9 Compressed Size       00000000 (0)\n+024DAD Uncompressed Size     00000000 (0)\n+024DB1 Filename Length       0075 (117)\n+024DB3 Extra Length          0009 (9)\n+024DB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x24DB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+024E2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+024E2C   Length              0005 (5)\n+024E2E   Flags               01 (1) 'Modification'\n+024E2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+024E33 LOCAL HEADER #65      04034B50 (67324752)\n+024E37 Extract Zip Spec      14 (20) '2.0'\n+024E38 Extract OS            00 (0) 'MS-DOS'\n+024E39 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+024E3B Compression Method    0000 (0) 'Stored'\n+024E3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+024E41 CRC                   00000000 (0)\n+024E45 Compressed Size       00000000 (0)\n+024E49 Uncompressed Size     00000000 (0)\n+024E4D Filename Length       008B (139)\n+024E4F Extra Length          0009 (9)\n+024E51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0x24EBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x24E51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-024F45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-024F47   Length              0005 (5)\n-024F49   Flags               01 (1) 'Modification'\n-024F4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-024F4E PAYLOAD\n-\n-0257D6 DATA DESCRIPTOR       08074B50 (134695760)\n-0257DA CRC                   2E17013D (773259581)\n-0257DE Compressed Size       00000888 (2184)\n-0257E2 Uncompressed Size     00000888 (2184)\n-\n-0257E6 LOCAL HEADER #66      04034B50 (67324752)\n-0257EA Extract Zip Spec      14 (20) '2.0'\n-0257EB Extract OS            00 (0) 'MS-DOS'\n-0257EC General Purpose Flag  0000 (0)\n-0257EE Compression Method    0000 (0) 'Stored'\n-0257F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0257F4 CRC                   00000000 (0)\n-0257F8 Compressed Size       00000000 (0)\n-0257FC Uncompressed Size     00000000 (0)\n-025800 Filename Length       0022 (34)\n-025802 Extra Length          0009 (9)\n-025804 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x25804: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-025826 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-025828   Length              0005 (5)\n-02582A   Flags               01 (1) 'Modification'\n-02582B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02582F LOCAL HEADER #67      04034B50 (67324752)\n-025833 Extract Zip Spec      14 (20) '2.0'\n-025834 Extract OS            00 (0) 'MS-DOS'\n-025835 General Purpose Flag  0000 (0)\n-025837 Compression Method    0000 (0) 'Stored'\n-025839 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02583D CRC                   00000000 (0)\n-025841 Compressed Size       00000000 (0)\n-025845 Uncompressed Size     00000000 (0)\n-025849 Filename Length       002B (43)\n-02584B Extra Length          0009 (9)\n-02584D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2584D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-025878 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02587A   Length              0005 (5)\n-02587C   Flags               01 (1) 'Modification'\n-02587D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-025881 LOCAL HEADER #68      04034B50 (67324752)\n-025885 Extract Zip Spec      14 (20) '2.0'\n-025886 Extract OS            00 (0) 'MS-DOS'\n-025887 General Purpose Flag  0000 (0)\n-025889 Compression Method    0000 (0) 'Stored'\n-02588B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02588F CRC                   00000000 (0)\n-025893 Compressed Size       00000000 (0)\n-025897 Uncompressed Size     00000000 (0)\n-02589B Filename Length       0057 (87)\n-02589D Extra Length          0009 (9)\n-02589F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2589F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0258F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0258F8   Length              0005 (5)\n-0258FA   Flags               01 (1) 'Modification'\n-0258FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0258FF LOCAL HEADER #69      04034B50 (67324752)\n-025903 Extract Zip Spec      14 (20) '2.0'\n-025904 Extract OS            00 (0) 'MS-DOS'\n-025905 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-025907 Compression Method    0000 (0) 'Stored'\n-025909 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02590D CRC                   00000000 (0)\n-025911 Compressed Size       00000000 (0)\n-025915 Uncompressed Size     00000000 (0)\n-025919 Filename Length       006D (109)\n-02591B Extra Length          0009 (9)\n-02591D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2591D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02598A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02598C   Length              0005 (5)\n-02598E   Flags               01 (1) 'Modification'\n-02598F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-025993 PAYLOAD\n-\n-02609E DATA DESCRIPTOR       08074B50 (134695760)\n-0260A2 CRC                   C1E5A225 (3253051941)\n-0260A6 Compressed Size       0000070B (1803)\n-0260AA Uncompressed Size     0000070B (1803)\n-\n-0260AE LOCAL HEADER #70      04034B50 (67324752)\n-0260B2 Extract Zip Spec      14 (20) '2.0'\n-0260B3 Extract OS            00 (0) 'MS-DOS'\n-0260B4 General Purpose Flag  0000 (0)\n-0260B6 Compression Method    0000 (0) 'Stored'\n-0260B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0260BC CRC                   00000000 (0)\n-0260C0 Compressed Size       00000000 (0)\n-0260C4 Uncompressed Size     00000000 (0)\n-0260C8 Filename Length       0056 (86)\n-0260CA Extra Length          0009 (9)\n-0260CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x260CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026122 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026124   Length              0005 (5)\n-026126   Flags               01 (1) 'Modification'\n-026127   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02612B LOCAL HEADER #71      04034B50 (67324752)\n-02612F Extract Zip Spec      14 (20) '2.0'\n-026130 Extract OS            00 (0) 'MS-DOS'\n-026131 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-026133 Compression Method    0000 (0) 'Stored'\n-026135 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026139 CRC                   00000000 (0)\n-02613D Compressed Size       00000000 (0)\n-026141 Uncompressed Size     00000000 (0)\n-026145 Filename Length       006C (108)\n-026147 Extra Length          0009 (9)\n-026149 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26149: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0261B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0261B7   Length              0005 (5)\n-0261B9   Flags               01 (1) 'Modification'\n-0261BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0261BE PAYLOAD\n-\n-02680B DATA DESCRIPTOR       08074B50 (134695760)\n-02680F CRC                   8950733E (2303750974)\n-026813 Compressed Size       0000064D (1613)\n-026817 Uncompressed Size     0000064D (1613)\n-\n-02681B LOCAL HEADER #72      04034B50 (67324752)\n-02681F Extract Zip Spec      14 (20) '2.0'\n-026820 Extract OS            00 (0) 'MS-DOS'\n-026821 General Purpose Flag  0000 (0)\n-026823 Compression Method    0000 (0) 'Stored'\n-026825 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026829 CRC                   00000000 (0)\n-02682D Compressed Size       00000000 (0)\n-026831 Uncompressed Size     00000000 (0)\n-026835 Filename Length       0055 (85)\n-026837 Extra Length          0009 (9)\n-026839 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26839: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02688E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026890   Length              0005 (5)\n-026892   Flags               01 (1) 'Modification'\n-026893   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-026897 LOCAL HEADER #73      04034B50 (67324752)\n-02689B Extract Zip Spec      14 (20) '2.0'\n-02689C Extract OS            00 (0) 'MS-DOS'\n-02689D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02689F Compression Method    0000 (0) 'Stored'\n-0268A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0268A5 CRC                   00000000 (0)\n-0268A9 Compressed Size       00000000 (0)\n-0268AD Uncompressed Size     00000000 (0)\n-0268B1 Filename Length       006B (107)\n-0268B3 Extra Length          0009 (9)\n-0268B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x268B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026920 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026922   Length              0005 (5)\n-026924   Flags               01 (1) 'Modification'\n-026925   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-026929 PAYLOAD\n-\n-026F6C DATA DESCRIPTOR       08074B50 (134695760)\n-026F70 CRC                   A0157ABE (2685762238)\n-026F74 Compressed Size       00000643 (1603)\n-026F78 Uncompressed Size     00000643 (1603)\n-\n-026F7C LOCAL HEADER #74      04034B50 (67324752)\n-026F80 Extract Zip Spec      14 (20) '2.0'\n-026F81 Extract OS            00 (0) 'MS-DOS'\n-026F82 General Purpose Flag  0000 (0)\n-026F84 Compression Method    0000 (0) 'Stored'\n-026F86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026F8A CRC                   00000000 (0)\n-026F8E Compressed Size       00000000 (0)\n-026F92 Uncompressed Size     00000000 (0)\n-026F96 Filename Length       002B (43)\n-026F98 Extra Length          0009 (9)\n-026F9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26F9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026FC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026FC7   Length              0005 (5)\n-026FC9   Flags               01 (1) 'Modification'\n-026FCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-026FCE LOCAL HEADER #75      04034B50 (67324752)\n-026FD2 Extract Zip Spec      14 (20) '2.0'\n-026FD3 Extract OS            00 (0) 'MS-DOS'\n-026FD4 General Purpose Flag  0000 (0)\n-026FD6 Compression Method    0000 (0) 'Stored'\n-026FD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026FDC CRC                   00000000 (0)\n-026FE0 Compressed Size       00000000 (0)\n-026FE4 Uncompressed Size     00000000 (0)\n-026FE8 Filename Length       0034 (52)\n-026FEA Extra Length          0009 (9)\n-026FEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26FEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027020 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027022   Length              0005 (5)\n-027024   Flags               01 (1) 'Modification'\n-027025   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-027029 LOCAL HEADER #76      04034B50 (67324752)\n-02702D Extract Zip Spec      14 (20) '2.0'\n-02702E Extract OS            00 (0) 'MS-DOS'\n-02702F General Purpose Flag  0000 (0)\n-027031 Compression Method    0000 (0) 'Stored'\n-027033 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027037 CRC                   00000000 (0)\n-02703B Compressed Size       00000000 (0)\n-02703F Uncompressed Size     00000000 (0)\n-027043 Filename Length       007B (123)\n-027045 Extra Length          0009 (9)\n-027047 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27047: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0270C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0270C4   Length              0005 (5)\n-0270C6   Flags               01 (1) 'Modification'\n-0270C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0270CB LOCAL HEADER #77      04034B50 (67324752)\n-0270CF Extract Zip Spec      14 (20) '2.0'\n-0270D0 Extract OS            00 (0) 'MS-DOS'\n-0270D1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0270D3 Compression Method    0000 (0) 'Stored'\n-0270D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0270D9 CRC                   00000000 (0)\n-0270DD Compressed Size       00000000 (0)\n-0270E1 Uncompressed Size     00000000 (0)\n-0270E5 Filename Length       0091 (145)\n-0270E7 Extra Length          0009 (9)\n-0270E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+024EDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+024EDE   Length              0005 (5)\n+024EE0   Flags               01 (1) 'Modification'\n+024EE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+024EE5 PAYLOAD\n+\n+02576D DATA DESCRIPTOR       08074B50 (134695760)\n+025771 CRC                   2E17013D (773259581)\n+025775 Compressed Size       00000888 (2184)\n+025779 Uncompressed Size     00000888 (2184)\n+\n+02577D LOCAL HEADER #66      04034B50 (67324752)\n+025781 Extract Zip Spec      14 (20) '2.0'\n+025782 Extract OS            00 (0) 'MS-DOS'\n+025783 General Purpose Flag  0000 (0)\n+025785 Compression Method    0000 (0) 'Stored'\n+025787 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02578B CRC                   00000000 (0)\n+02578F Compressed Size       00000000 (0)\n+025793 Uncompressed Size     00000000 (0)\n+025797 Filename Length       0022 (34)\n+025799 Extra Length          0009 (9)\n+02579B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2579B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0257BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0257BF   Length              0005 (5)\n+0257C1   Flags               01 (1) 'Modification'\n+0257C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0257C6 LOCAL HEADER #67      04034B50 (67324752)\n+0257CA Extract Zip Spec      14 (20) '2.0'\n+0257CB Extract OS            00 (0) 'MS-DOS'\n+0257CC General Purpose Flag  0000 (0)\n+0257CE Compression Method    0000 (0) 'Stored'\n+0257D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0257D4 CRC                   00000000 (0)\n+0257D8 Compressed Size       00000000 (0)\n+0257DC Uncompressed Size     00000000 (0)\n+0257E0 Filename Length       002B (43)\n+0257E2 Extra Length          0009 (9)\n+0257E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x257E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02580F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+025811   Length              0005 (5)\n+025813   Flags               01 (1) 'Modification'\n+025814   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+025818 LOCAL HEADER #68      04034B50 (67324752)\n+02581C Extract Zip Spec      14 (20) '2.0'\n+02581D Extract OS            00 (0) 'MS-DOS'\n+02581E General Purpose Flag  0000 (0)\n+025820 Compression Method    0000 (0) 'Stored'\n+025822 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+025826 CRC                   00000000 (0)\n+02582A Compressed Size       00000000 (0)\n+02582E Uncompressed Size     00000000 (0)\n+025832 Filename Length       0057 (87)\n+025834 Extra Length          0009 (9)\n+025836 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x25836: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02588D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02588F   Length              0005 (5)\n+025891   Flags               01 (1) 'Modification'\n+025892   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+025896 LOCAL HEADER #69      04034B50 (67324752)\n+02589A Extract Zip Spec      14 (20) '2.0'\n+02589B Extract OS            00 (0) 'MS-DOS'\n+02589C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02589E Compression Method    0000 (0) 'Stored'\n+0258A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0258A4 CRC                   00000000 (0)\n+0258A8 Compressed Size       00000000 (0)\n+0258AC Uncompressed Size     00000000 (0)\n+0258B0 Filename Length       006D (109)\n+0258B2 Extra Length          0009 (9)\n+0258B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x258B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+025921 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+025923   Length              0005 (5)\n+025925   Flags               01 (1) 'Modification'\n+025926   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02592A PAYLOAD\n+\n+026035 DATA DESCRIPTOR       08074B50 (134695760)\n+026039 CRC                   C1E5A225 (3253051941)\n+02603D Compressed Size       0000070B (1803)\n+026041 Uncompressed Size     0000070B (1803)\n+\n+026045 LOCAL HEADER #70      04034B50 (67324752)\n+026049 Extract Zip Spec      14 (20) '2.0'\n+02604A Extract OS            00 (0) 'MS-DOS'\n+02604B General Purpose Flag  0000 (0)\n+02604D Compression Method    0000 (0) 'Stored'\n+02604F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026053 CRC                   00000000 (0)\n+026057 Compressed Size       00000000 (0)\n+02605B Uncompressed Size     00000000 (0)\n+02605F Filename Length       0056 (86)\n+026061 Extra Length          0009 (9)\n+026063 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26063: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0260B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0260BB   Length              0005 (5)\n+0260BD   Flags               01 (1) 'Modification'\n+0260BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0260C2 LOCAL HEADER #71      04034B50 (67324752)\n+0260C6 Extract Zip Spec      14 (20) '2.0'\n+0260C7 Extract OS            00 (0) 'MS-DOS'\n+0260C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0260CA Compression Method    0000 (0) 'Stored'\n+0260CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0260D0 CRC                   00000000 (0)\n+0260D4 Compressed Size       00000000 (0)\n+0260D8 Uncompressed Size     00000000 (0)\n+0260DC Filename Length       006C (108)\n+0260DE Extra Length          0009 (9)\n+0260E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x260E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02614C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02614E   Length              0005 (5)\n+026150   Flags               01 (1) 'Modification'\n+026151   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+026155 PAYLOAD\n+\n+0267A2 DATA DESCRIPTOR       08074B50 (134695760)\n+0267A6 CRC                   8950733E (2303750974)\n+0267AA Compressed Size       0000064D (1613)\n+0267AE Uncompressed Size     0000064D (1613)\n+\n+0267B2 LOCAL HEADER #72      04034B50 (67324752)\n+0267B6 Extract Zip Spec      14 (20) '2.0'\n+0267B7 Extract OS            00 (0) 'MS-DOS'\n+0267B8 General Purpose Flag  0000 (0)\n+0267BA Compression Method    0000 (0) 'Stored'\n+0267BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0267C0 CRC                   00000000 (0)\n+0267C4 Compressed Size       00000000 (0)\n+0267C8 Uncompressed Size     00000000 (0)\n+0267CC Filename Length       0055 (85)\n+0267CE Extra Length          0009 (9)\n+0267D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x267D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026825 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026827   Length              0005 (5)\n+026829   Flags               01 (1) 'Modification'\n+02682A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02682E LOCAL HEADER #73      04034B50 (67324752)\n+026832 Extract Zip Spec      14 (20) '2.0'\n+026833 Extract OS            00 (0) 'MS-DOS'\n+026834 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+026836 Compression Method    0000 (0) 'Stored'\n+026838 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02683C CRC                   00000000 (0)\n+026840 Compressed Size       00000000 (0)\n+026844 Uncompressed Size     00000000 (0)\n+026848 Filename Length       006B (107)\n+02684A Extra Length          0009 (9)\n+02684C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2684C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0268B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0268B9   Length              0005 (5)\n+0268BB   Flags               01 (1) 'Modification'\n+0268BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0268C0 PAYLOAD\n+\n+026F03 DATA DESCRIPTOR       08074B50 (134695760)\n+026F07 CRC                   A0157ABE (2685762238)\n+026F0B Compressed Size       00000643 (1603)\n+026F0F Uncompressed Size     00000643 (1603)\n+\n+026F13 LOCAL HEADER #74      04034B50 (67324752)\n+026F17 Extract Zip Spec      14 (20) '2.0'\n+026F18 Extract OS            00 (0) 'MS-DOS'\n+026F19 General Purpose Flag  0000 (0)\n+026F1B Compression Method    0000 (0) 'Stored'\n+026F1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026F21 CRC                   00000000 (0)\n+026F25 Compressed Size       00000000 (0)\n+026F29 Uncompressed Size     00000000 (0)\n+026F2D Filename Length       002B (43)\n+026F2F Extra Length          0009 (9)\n+026F31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26F31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026F5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026F5E   Length              0005 (5)\n+026F60   Flags               01 (1) 'Modification'\n+026F61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026F65 LOCAL HEADER #75      04034B50 (67324752)\n+026F69 Extract Zip Spec      14 (20) '2.0'\n+026F6A Extract OS            00 (0) 'MS-DOS'\n+026F6B General Purpose Flag  0000 (0)\n+026F6D Compression Method    0000 (0) 'Stored'\n+026F6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026F73 CRC                   00000000 (0)\n+026F77 Compressed Size       00000000 (0)\n+026F7B Uncompressed Size     00000000 (0)\n+026F7F Filename Length       0034 (52)\n+026F81 Extra Length          0009 (9)\n+026F83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26F83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026FB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026FB9   Length              0005 (5)\n+026FBB   Flags               01 (1) 'Modification'\n+026FBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026FC0 LOCAL HEADER #76      04034B50 (67324752)\n+026FC4 Extract Zip Spec      14 (20) '2.0'\n+026FC5 Extract OS            00 (0) 'MS-DOS'\n+026FC6 General Purpose Flag  0000 (0)\n+026FC8 Compression Method    0000 (0) 'Stored'\n+026FCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026FCE CRC                   00000000 (0)\n+026FD2 Compressed Size       00000000 (0)\n+026FD6 Uncompressed Size     00000000 (0)\n+026FDA Filename Length       007B (123)\n+026FDC Extra Length          0009 (9)\n+026FDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26FDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027059 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02705B   Length              0005 (5)\n+02705D   Flags               01 (1) 'Modification'\n+02705E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+027062 LOCAL HEADER #77      04034B50 (67324752)\n+027066 Extract Zip Spec      14 (20) '2.0'\n+027067 Extract OS            00 (0) 'MS-DOS'\n+027068 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02706A Compression Method    0000 (0) 'Stored'\n+02706C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027070 CRC                   00000000 (0)\n+027074 Compressed Size       00000000 (0)\n+027078 Uncompressed Size     00000000 (0)\n+02707C Filename Length       0091 (145)\n+02707E Extra Length          0009 (9)\n+027080 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x270E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x27080: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02717A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02717C   Length              0005 (5)\n-02717E   Flags               01 (1) 'Modification'\n-02717F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-027183 PAYLOAD\n-\n-027C98 DATA DESCRIPTOR       08074B50 (134695760)\n-027C9C CRC                   164EC61D (374261277)\n-027CA0 Compressed Size       00000B15 (2837)\n-027CA4 Uncompressed Size     00000B15 (2837)\n-\n-027CA8 LOCAL HEADER #78      04034B50 (67324752)\n-027CAC Extract Zip Spec      14 (20) '2.0'\n-027CAD Extract OS            00 (0) 'MS-DOS'\n-027CAE General Purpose Flag  0000 (0)\n-027CB0 Compression Method    0000 (0) 'Stored'\n-027CB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027CB6 CRC                   00000000 (0)\n-027CBA Compressed Size       00000000 (0)\n-027CBE Uncompressed Size     00000000 (0)\n-027CC2 Filename Length       0025 (37)\n-027CC4 Extra Length          0009 (9)\n-027CC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27CC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027CEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027CED   Length              0005 (5)\n-027CEF   Flags               01 (1) 'Modification'\n-027CF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-027CF4 LOCAL HEADER #79      04034B50 (67324752)\n-027CF8 Extract Zip Spec      14 (20) '2.0'\n-027CF9 Extract OS            00 (0) 'MS-DOS'\n-027CFA General Purpose Flag  0000 (0)\n-027CFC Compression Method    0000 (0) 'Stored'\n-027CFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027D02 CRC                   00000000 (0)\n-027D06 Compressed Size       00000000 (0)\n-027D0A Uncompressed Size     00000000 (0)\n-027D0E Filename Length       002E (46)\n-027D10 Extra Length          0009 (9)\n-027D12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27D12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027D40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027D42   Length              0005 (5)\n-027D44   Flags               01 (1) 'Modification'\n-027D45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-027D49 LOCAL HEADER #80      04034B50 (67324752)\n-027D4D Extract Zip Spec      14 (20) '2.0'\n-027D4E Extract OS            00 (0) 'MS-DOS'\n-027D4F General Purpose Flag  0000 (0)\n-027D51 Compression Method    0000 (0) 'Stored'\n-027D53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027D57 CRC                   00000000 (0)\n-027D5B Compressed Size       00000000 (0)\n-027D5F Uncompressed Size     00000000 (0)\n-027D63 Filename Length       005F (95)\n-027D65 Extra Length          0009 (9)\n-027D67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27D67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027DC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027DC8   Length              0005 (5)\n-027DCA   Flags               01 (1) 'Modification'\n-027DCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-027DCF LOCAL HEADER #81      04034B50 (67324752)\n-027DD3 Extract Zip Spec      14 (20) '2.0'\n-027DD4 Extract OS            00 (0) 'MS-DOS'\n-027DD5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-027DD7 Compression Method    0000 (0) 'Stored'\n-027DD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027DDD CRC                   00000000 (0)\n-027DE1 Compressed Size       00000000 (0)\n-027DE5 Uncompressed Size     00000000 (0)\n-027DE9 Filename Length       0075 (117)\n-027DEB Extra Length          0009 (9)\n-027DED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27DED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027E62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027E64   Length              0005 (5)\n-027E66   Flags               01 (1) 'Modification'\n-027E67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-027E6B PAYLOAD\n-\n-02881A DATA DESCRIPTOR       08074B50 (134695760)\n-02881E CRC                   4F9A1C4F (1335499855)\n-028822 Compressed Size       000009AF (2479)\n-028826 Uncompressed Size     000009AF (2479)\n-\n-02882A LOCAL HEADER #82      04034B50 (67324752)\n-02882E Extract Zip Spec      14 (20) '2.0'\n-02882F Extract OS            00 (0) 'MS-DOS'\n-028830 General Purpose Flag  0000 (0)\n-028832 Compression Method    0000 (0) 'Stored'\n-028834 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028838 CRC                   00000000 (0)\n-02883C Compressed Size       00000000 (0)\n-028840 Uncompressed Size     00000000 (0)\n-028844 Filename Length       006C (108)\n-028846 Extra Length          0009 (9)\n-028848 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28848: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0288B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0288B6   Length              0005 (5)\n-0288B8   Flags               01 (1) 'Modification'\n-0288B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0288BD LOCAL HEADER #83      04034B50 (67324752)\n-0288C1 Extract Zip Spec      14 (20) '2.0'\n-0288C2 Extract OS            00 (0) 'MS-DOS'\n-0288C3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0288C5 Compression Method    0000 (0) 'Stored'\n-0288C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0288CB CRC                   00000000 (0)\n-0288CF Compressed Size       00000000 (0)\n-0288D3 Uncompressed Size     00000000 (0)\n-0288D7 Filename Length       0082 (130)\n-0288D9 Extra Length          0009 (9)\n-0288DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x288DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02895D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02895F   Length              0005 (5)\n-028961   Flags               01 (1) 'Modification'\n-028962   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-028966 PAYLOAD\n-\n-029BCB DATA DESCRIPTOR       08074B50 (134695760)\n-029BCF CRC                   754F4527 (1968129319)\n-029BD3 Compressed Size       00001265 (4709)\n-029BD7 Uncompressed Size     00001265 (4709)\n-\n-029BDB LOCAL HEADER #84      04034B50 (67324752)\n-029BDF Extract Zip Spec      14 (20) '2.0'\n-029BE0 Extract OS            00 (0) 'MS-DOS'\n-029BE1 General Purpose Flag  0000 (0)\n-029BE3 Compression Method    0000 (0) 'Stored'\n-029BE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029BE9 CRC                   00000000 (0)\n-029BED Compressed Size       00000000 (0)\n-029BF1 Uncompressed Size     00000000 (0)\n-029BF5 Filename Length       002F (47)\n-029BF7 Extra Length          0009 (9)\n-029BF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29BF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029C28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029C2A   Length              0005 (5)\n-029C2C   Flags               01 (1) 'Modification'\n-029C2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029C31 LOCAL HEADER #85      04034B50 (67324752)\n-029C35 Extract Zip Spec      14 (20) '2.0'\n-029C36 Extract OS            00 (0) 'MS-DOS'\n-029C37 General Purpose Flag  0000 (0)\n-029C39 Compression Method    0000 (0) 'Stored'\n-029C3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029C3F CRC                   00000000 (0)\n-029C43 Compressed Size       00000000 (0)\n-029C47 Uncompressed Size     00000000 (0)\n-029C4B Filename Length       0038 (56)\n-029C4D Extra Length          0009 (9)\n-029C4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29C4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029C87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029C89   Length              0005 (5)\n-029C8B   Flags               01 (1) 'Modification'\n-029C8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029C90 LOCAL HEADER #86      04034B50 (67324752)\n-029C94 Extract Zip Spec      14 (20) '2.0'\n-029C95 Extract OS            00 (0) 'MS-DOS'\n-029C96 General Purpose Flag  0000 (0)\n-029C98 Compression Method    0000 (0) 'Stored'\n-029C9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029C9E CRC                   00000000 (0)\n-029CA2 Compressed Size       00000000 (0)\n-029CA6 Uncompressed Size     00000000 (0)\n-029CAA Filename Length       007A (122)\n-029CAC Extra Length          0009 (9)\n-029CAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29CAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029D28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029D2A   Length              0005 (5)\n-029D2C   Flags               01 (1) 'Modification'\n-029D2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029D31 LOCAL HEADER #87      04034B50 (67324752)\n-029D35 Extract Zip Spec      14 (20) '2.0'\n-029D36 Extract OS            00 (0) 'MS-DOS'\n-029D37 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-029D39 Compression Method    0000 (0) 'Stored'\n-029D3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029D3F CRC                   00000000 (0)\n-029D43 Compressed Size       00000000 (0)\n-029D47 Uncompressed Size     00000000 (0)\n-029D4B Filename Length       0090 (144)\n-029D4D Extra Length          0009 (9)\n-029D4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+027111 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027113   Length              0005 (5)\n+027115   Flags               01 (1) 'Modification'\n+027116   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02711A PAYLOAD\n+\n+027C2F DATA DESCRIPTOR       08074B50 (134695760)\n+027C33 CRC                   164EC61D (374261277)\n+027C37 Compressed Size       00000B15 (2837)\n+027C3B Uncompressed Size     00000B15 (2837)\n+\n+027C3F LOCAL HEADER #78      04034B50 (67324752)\n+027C43 Extract Zip Spec      14 (20) '2.0'\n+027C44 Extract OS            00 (0) 'MS-DOS'\n+027C45 General Purpose Flag  0000 (0)\n+027C47 Compression Method    0000 (0) 'Stored'\n+027C49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027C4D CRC                   00000000 (0)\n+027C51 Compressed Size       00000000 (0)\n+027C55 Uncompressed Size     00000000 (0)\n+027C59 Filename Length       0025 (37)\n+027C5B Extra Length          0009 (9)\n+027C5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27C5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027C82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027C84   Length              0005 (5)\n+027C86   Flags               01 (1) 'Modification'\n+027C87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+027C8B LOCAL HEADER #79      04034B50 (67324752)\n+027C8F Extract Zip Spec      14 (20) '2.0'\n+027C90 Extract OS            00 (0) 'MS-DOS'\n+027C91 General Purpose Flag  0000 (0)\n+027C93 Compression Method    0000 (0) 'Stored'\n+027C95 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027C99 CRC                   00000000 (0)\n+027C9D Compressed Size       00000000 (0)\n+027CA1 Uncompressed Size     00000000 (0)\n+027CA5 Filename Length       002E (46)\n+027CA7 Extra Length          0009 (9)\n+027CA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27CA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027CD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027CD9   Length              0005 (5)\n+027CDB   Flags               01 (1) 'Modification'\n+027CDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+027CE0 LOCAL HEADER #80      04034B50 (67324752)\n+027CE4 Extract Zip Spec      14 (20) '2.0'\n+027CE5 Extract OS            00 (0) 'MS-DOS'\n+027CE6 General Purpose Flag  0000 (0)\n+027CE8 Compression Method    0000 (0) 'Stored'\n+027CEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027CEE CRC                   00000000 (0)\n+027CF2 Compressed Size       00000000 (0)\n+027CF6 Uncompressed Size     00000000 (0)\n+027CFA Filename Length       005F (95)\n+027CFC Extra Length          0009 (9)\n+027CFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27CFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027D5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027D5F   Length              0005 (5)\n+027D61   Flags               01 (1) 'Modification'\n+027D62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+027D66 LOCAL HEADER #81      04034B50 (67324752)\n+027D6A Extract Zip Spec      14 (20) '2.0'\n+027D6B Extract OS            00 (0) 'MS-DOS'\n+027D6C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+027D6E Compression Method    0000 (0) 'Stored'\n+027D70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027D74 CRC                   00000000 (0)\n+027D78 Compressed Size       00000000 (0)\n+027D7C Uncompressed Size     00000000 (0)\n+027D80 Filename Length       0075 (117)\n+027D82 Extra Length          0009 (9)\n+027D84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27D84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027DF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027DFB   Length              0005 (5)\n+027DFD   Flags               01 (1) 'Modification'\n+027DFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+027E02 PAYLOAD\n+\n+0287B1 DATA DESCRIPTOR       08074B50 (134695760)\n+0287B5 CRC                   4F9A1C4F (1335499855)\n+0287B9 Compressed Size       000009AF (2479)\n+0287BD Uncompressed Size     000009AF (2479)\n+\n+0287C1 LOCAL HEADER #82      04034B50 (67324752)\n+0287C5 Extract Zip Spec      14 (20) '2.0'\n+0287C6 Extract OS            00 (0) 'MS-DOS'\n+0287C7 General Purpose Flag  0000 (0)\n+0287C9 Compression Method    0000 (0) 'Stored'\n+0287CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0287CF CRC                   00000000 (0)\n+0287D3 Compressed Size       00000000 (0)\n+0287D7 Uncompressed Size     00000000 (0)\n+0287DB Filename Length       006C (108)\n+0287DD Extra Length          0009 (9)\n+0287DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x287DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02884B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02884D   Length              0005 (5)\n+02884F   Flags               01 (1) 'Modification'\n+028850   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+028854 LOCAL HEADER #83      04034B50 (67324752)\n+028858 Extract Zip Spec      14 (20) '2.0'\n+028859 Extract OS            00 (0) 'MS-DOS'\n+02885A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02885C Compression Method    0000 (0) 'Stored'\n+02885E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+028862 CRC                   00000000 (0)\n+028866 Compressed Size       00000000 (0)\n+02886A Uncompressed Size     00000000 (0)\n+02886E Filename Length       0082 (130)\n+028870 Extra Length          0009 (9)\n+028872 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x28872: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0288F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0288F6   Length              0005 (5)\n+0288F8   Flags               01 (1) 'Modification'\n+0288F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0288FD PAYLOAD\n+\n+029B62 DATA DESCRIPTOR       08074B50 (134695760)\n+029B66 CRC                   754F4527 (1968129319)\n+029B6A Compressed Size       00001265 (4709)\n+029B6E Uncompressed Size     00001265 (4709)\n+\n+029B72 LOCAL HEADER #84      04034B50 (67324752)\n+029B76 Extract Zip Spec      14 (20) '2.0'\n+029B77 Extract OS            00 (0) 'MS-DOS'\n+029B78 General Purpose Flag  0000 (0)\n+029B7A Compression Method    0000 (0) 'Stored'\n+029B7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029B80 CRC                   00000000 (0)\n+029B84 Compressed Size       00000000 (0)\n+029B88 Uncompressed Size     00000000 (0)\n+029B8C Filename Length       002F (47)\n+029B8E Extra Length          0009 (9)\n+029B90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29B90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029BBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029BC1   Length              0005 (5)\n+029BC3   Flags               01 (1) 'Modification'\n+029BC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+029BC8 LOCAL HEADER #85      04034B50 (67324752)\n+029BCC Extract Zip Spec      14 (20) '2.0'\n+029BCD Extract OS            00 (0) 'MS-DOS'\n+029BCE General Purpose Flag  0000 (0)\n+029BD0 Compression Method    0000 (0) 'Stored'\n+029BD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029BD6 CRC                   00000000 (0)\n+029BDA Compressed Size       00000000 (0)\n+029BDE Uncompressed Size     00000000 (0)\n+029BE2 Filename Length       0038 (56)\n+029BE4 Extra Length          0009 (9)\n+029BE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29BE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029C1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029C20   Length              0005 (5)\n+029C22   Flags               01 (1) 'Modification'\n+029C23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+029C27 LOCAL HEADER #86      04034B50 (67324752)\n+029C2B Extract Zip Spec      14 (20) '2.0'\n+029C2C Extract OS            00 (0) 'MS-DOS'\n+029C2D General Purpose Flag  0000 (0)\n+029C2F Compression Method    0000 (0) 'Stored'\n+029C31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029C35 CRC                   00000000 (0)\n+029C39 Compressed Size       00000000 (0)\n+029C3D Uncompressed Size     00000000 (0)\n+029C41 Filename Length       007A (122)\n+029C43 Extra Length          0009 (9)\n+029C45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29C45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029CBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029CC1   Length              0005 (5)\n+029CC3   Flags               01 (1) 'Modification'\n+029CC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+029CC8 LOCAL HEADER #87      04034B50 (67324752)\n+029CCC Extract Zip Spec      14 (20) '2.0'\n+029CCD Extract OS            00 (0) 'MS-DOS'\n+029CCE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+029CD0 Compression Method    0000 (0) 'Stored'\n+029CD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029CD6 CRC                   00000000 (0)\n+029CDA Compressed Size       00000000 (0)\n+029CDE Uncompressed Size     00000000 (0)\n+029CE2 Filename Length       0090 (144)\n+029CE4 Extra Length          0009 (9)\n+029CE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x29D4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29CE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-029DDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029DE1   Length              0005 (5)\n-029DE3   Flags               01 (1) 'Modification'\n-029DE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-029DE8 PAYLOAD\n-\n-02B10F DATA DESCRIPTOR       08074B50 (134695760)\n-02B113 CRC                   896578EC (2305128684)\n-02B117 Compressed Size       00001327 (4903)\n-02B11B Uncompressed Size     00001327 (4903)\n-\n-02B11F LOCAL HEADER #88      04034B50 (67324752)\n-02B123 Extract Zip Spec      14 (20) '2.0'\n-02B124 Extract OS            00 (0) 'MS-DOS'\n-02B125 General Purpose Flag  0000 (0)\n-02B127 Compression Method    0000 (0) 'Stored'\n-02B129 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B12D CRC                   00000000 (0)\n-02B131 Compressed Size       00000000 (0)\n-02B135 Uncompressed Size     00000000 (0)\n-02B139 Filename Length       003B (59)\n-02B13B Extra Length          0009 (9)\n-02B13D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B13D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B178 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B17A   Length              0005 (5)\n-02B17C   Flags               01 (1) 'Modification'\n-02B17D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B181 LOCAL HEADER #89      04034B50 (67324752)\n-02B185 Extract Zip Spec      14 (20) '2.0'\n-02B186 Extract OS            00 (0) 'MS-DOS'\n-02B187 General Purpose Flag  0000 (0)\n-02B189 Compression Method    0000 (0) 'Stored'\n-02B18B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B18F CRC                   00000000 (0)\n-02B193 Compressed Size       00000000 (0)\n-02B197 Uncompressed Size     00000000 (0)\n-02B19B Filename Length       0044 (68)\n-02B19D Extra Length          0009 (9)\n-02B19F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B19F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B1E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B1E5   Length              0005 (5)\n-02B1E7   Flags               01 (1) 'Modification'\n-02B1E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B1EC LOCAL HEADER #90      04034B50 (67324752)\n-02B1F0 Extract Zip Spec      14 (20) '2.0'\n-02B1F1 Extract OS            00 (0) 'MS-DOS'\n-02B1F2 General Purpose Flag  0000 (0)\n-02B1F4 Compression Method    0000 (0) 'Stored'\n-02B1F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B1FA CRC                   00000000 (0)\n-02B1FE Compressed Size       00000000 (0)\n-02B202 Uncompressed Size     00000000 (0)\n-02B206 Filename Length       0081 (129)\n-02B208 Extra Length          0009 (9)\n-02B20A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B20A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B28B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B28D   Length              0005 (5)\n-02B28F   Flags               01 (1) 'Modification'\n-02B290   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B294 LOCAL HEADER #91      04034B50 (67324752)\n-02B298 Extract Zip Spec      14 (20) '2.0'\n-02B299 Extract OS            00 (0) 'MS-DOS'\n-02B29A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02B29C Compression Method    0000 (0) 'Stored'\n-02B29E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B2A2 CRC                   00000000 (0)\n-02B2A6 Compressed Size       00000000 (0)\n-02B2AA Uncompressed Size     00000000 (0)\n-02B2AE Filename Length       0097 (151)\n-02B2B0 Extra Length          0009 (9)\n-02B2B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+029D76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029D78   Length              0005 (5)\n+029D7A   Flags               01 (1) 'Modification'\n+029D7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+029D7F PAYLOAD\n+\n+02B0A6 DATA DESCRIPTOR       08074B50 (134695760)\n+02B0AA CRC                   896578EC (2305128684)\n+02B0AE Compressed Size       00001327 (4903)\n+02B0B2 Uncompressed Size     00001327 (4903)\n+\n+02B0B6 LOCAL HEADER #88      04034B50 (67324752)\n+02B0BA Extract Zip Spec      14 (20) '2.0'\n+02B0BB Extract OS            00 (0) 'MS-DOS'\n+02B0BC General Purpose Flag  0000 (0)\n+02B0BE Compression Method    0000 (0) 'Stored'\n+02B0C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B0C4 CRC                   00000000 (0)\n+02B0C8 Compressed Size       00000000 (0)\n+02B0CC Uncompressed Size     00000000 (0)\n+02B0D0 Filename Length       003B (59)\n+02B0D2 Extra Length          0009 (9)\n+02B0D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B0D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B10F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B111   Length              0005 (5)\n+02B113   Flags               01 (1) 'Modification'\n+02B114   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B118 LOCAL HEADER #89      04034B50 (67324752)\n+02B11C Extract Zip Spec      14 (20) '2.0'\n+02B11D Extract OS            00 (0) 'MS-DOS'\n+02B11E General Purpose Flag  0000 (0)\n+02B120 Compression Method    0000 (0) 'Stored'\n+02B122 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B126 CRC                   00000000 (0)\n+02B12A Compressed Size       00000000 (0)\n+02B12E Uncompressed Size     00000000 (0)\n+02B132 Filename Length       0044 (68)\n+02B134 Extra Length          0009 (9)\n+02B136 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B136: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B17A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B17C   Length              0005 (5)\n+02B17E   Flags               01 (1) 'Modification'\n+02B17F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B183 LOCAL HEADER #90      04034B50 (67324752)\n+02B187 Extract Zip Spec      14 (20) '2.0'\n+02B188 Extract OS            00 (0) 'MS-DOS'\n+02B189 General Purpose Flag  0000 (0)\n+02B18B Compression Method    0000 (0) 'Stored'\n+02B18D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B191 CRC                   00000000 (0)\n+02B195 Compressed Size       00000000 (0)\n+02B199 Uncompressed Size     00000000 (0)\n+02B19D Filename Length       0081 (129)\n+02B19F Extra Length          0009 (9)\n+02B1A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B1A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B222 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B224   Length              0005 (5)\n+02B226   Flags               01 (1) 'Modification'\n+02B227   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B22B LOCAL HEADER #91      04034B50 (67324752)\n+02B22F Extract Zip Spec      14 (20) '2.0'\n+02B230 Extract OS            00 (0) 'MS-DOS'\n+02B231 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02B233 Compression Method    0000 (0) 'Stored'\n+02B235 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B239 CRC                   00000000 (0)\n+02B23D Compressed Size       00000000 (0)\n+02B241 Uncompressed Size     00000000 (0)\n+02B245 Filename Length       0097 (151)\n+02B247 Extra Length          0009 (9)\n+02B249 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B2B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B249: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02B349 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B34B   Length              0005 (5)\n-02B34D   Flags               01 (1) 'Modification'\n-02B34E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02B352 PAYLOAD\n-\n-02C076 DATA DESCRIPTOR       08074B50 (134695760)\n-02C07A CRC                   64624734 (1684162356)\n-02C07E Compressed Size       00000D24 (3364)\n-02C082 Uncompressed Size     00000D24 (3364)\n-\n-02C086 LOCAL HEADER #92      04034B50 (67324752)\n-02C08A Extract Zip Spec      14 (20) '2.0'\n-02C08B Extract OS            00 (0) 'MS-DOS'\n-02C08C General Purpose Flag  0000 (0)\n-02C08E Compression Method    0000 (0) 'Stored'\n-02C090 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C094 CRC                   00000000 (0)\n-02C098 Compressed Size       00000000 (0)\n-02C09C Uncompressed Size     00000000 (0)\n-02C0A0 Filename Length       007D (125)\n-02C0A2 Extra Length          0009 (9)\n-02C0A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C0A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C121 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C123   Length              0005 (5)\n-02C125   Flags               01 (1) 'Modification'\n-02C126   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02C12A LOCAL HEADER #93      04034B50 (67324752)\n-02C12E Extract Zip Spec      14 (20) '2.0'\n-02C12F Extract OS            00 (0) 'MS-DOS'\n-02C130 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02C132 Compression Method    0000 (0) 'Stored'\n-02C134 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C138 CRC                   00000000 (0)\n-02C13C Compressed Size       00000000 (0)\n-02C140 Uncompressed Size     00000000 (0)\n-02C144 Filename Length       0093 (147)\n-02C146 Extra Length          0009 (9)\n-02C148 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02B2E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B2E2   Length              0005 (5)\n+02B2E4   Flags               01 (1) 'Modification'\n+02B2E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02B2E9 PAYLOAD\n+\n+02C00D DATA DESCRIPTOR       08074B50 (134695760)\n+02C011 CRC                   64624734 (1684162356)\n+02C015 Compressed Size       00000D24 (3364)\n+02C019 Uncompressed Size     00000D24 (3364)\n+\n+02C01D LOCAL HEADER #92      04034B50 (67324752)\n+02C021 Extract Zip Spec      14 (20) '2.0'\n+02C022 Extract OS            00 (0) 'MS-DOS'\n+02C023 General Purpose Flag  0000 (0)\n+02C025 Compression Method    0000 (0) 'Stored'\n+02C027 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C02B CRC                   00000000 (0)\n+02C02F Compressed Size       00000000 (0)\n+02C033 Uncompressed Size     00000000 (0)\n+02C037 Filename Length       007D (125)\n+02C039 Extra Length          0009 (9)\n+02C03B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C03B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C0B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C0BA   Length              0005 (5)\n+02C0BC   Flags               01 (1) 'Modification'\n+02C0BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02C0C1 LOCAL HEADER #93      04034B50 (67324752)\n+02C0C5 Extract Zip Spec      14 (20) '2.0'\n+02C0C6 Extract OS            00 (0) 'MS-DOS'\n+02C0C7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02C0C9 Compression Method    0000 (0) 'Stored'\n+02C0CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C0CF CRC                   00000000 (0)\n+02C0D3 Compressed Size       00000000 (0)\n+02C0D7 Uncompressed Size     00000000 (0)\n+02C0DB Filename Length       0093 (147)\n+02C0DD Extra Length          0009 (9)\n+02C0DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C148: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C0DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02C1DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C1DD   Length              0005 (5)\n-02C1DF   Flags               01 (1) 'Modification'\n-02C1E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02C1E4 PAYLOAD\n-\n-02CAB1 DATA DESCRIPTOR       08074B50 (134695760)\n-02CAB5 CRC                   2B6EF697 (728692375)\n-02CAB9 Compressed Size       000008CD (2253)\n-02CABD Uncompressed Size     000008CD (2253)\n-\n-02CAC1 LOCAL HEADER #94      04034B50 (67324752)\n-02CAC5 Extract Zip Spec      14 (20) '2.0'\n-02CAC6 Extract OS            00 (0) 'MS-DOS'\n-02CAC7 General Purpose Flag  0000 (0)\n-02CAC9 Compression Method    0000 (0) 'Stored'\n-02CACB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CACF CRC                   00000000 (0)\n-02CAD3 Compressed Size       00000000 (0)\n-02CAD7 Uncompressed Size     00000000 (0)\n-02CADB Filename Length       0034 (52)\n-02CADD Extra Length          0009 (9)\n-02CADF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CADF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CB13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CB15   Length              0005 (5)\n-02CB17   Flags               01 (1) 'Modification'\n-02CB18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CB1C LOCAL HEADER #95      04034B50 (67324752)\n-02CB20 Extract Zip Spec      14 (20) '2.0'\n-02CB21 Extract OS            00 (0) 'MS-DOS'\n-02CB22 General Purpose Flag  0000 (0)\n-02CB24 Compression Method    0000 (0) 'Stored'\n-02CB26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CB2A CRC                   00000000 (0)\n-02CB2E Compressed Size       00000000 (0)\n-02CB32 Uncompressed Size     00000000 (0)\n-02CB36 Filename Length       003D (61)\n-02CB38 Extra Length          0009 (9)\n-02CB3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CB3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CB77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CB79   Length              0005 (5)\n-02CB7B   Flags               01 (1) 'Modification'\n-02CB7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CB80 LOCAL HEADER #96      04034B50 (67324752)\n-02CB84 Extract Zip Spec      14 (20) '2.0'\n-02CB85 Extract OS            00 (0) 'MS-DOS'\n-02CB86 General Purpose Flag  0000 (0)\n-02CB88 Compression Method    0000 (0) 'Stored'\n-02CB8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CB8E CRC                   00000000 (0)\n-02CB92 Compressed Size       00000000 (0)\n-02CB96 Uncompressed Size     00000000 (0)\n-02CB9A Filename Length       007B (123)\n-02CB9C Extra Length          0009 (9)\n-02CB9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CB9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CC19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CC1B   Length              0005 (5)\n-02CC1D   Flags               01 (1) 'Modification'\n-02CC1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CC22 LOCAL HEADER #97      04034B50 (67324752)\n-02CC26 Extract Zip Spec      14 (20) '2.0'\n-02CC27 Extract OS            00 (0) 'MS-DOS'\n-02CC28 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02CC2A Compression Method    0000 (0) 'Stored'\n-02CC2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CC30 CRC                   00000000 (0)\n-02CC34 Compressed Size       00000000 (0)\n-02CC38 Uncompressed Size     00000000 (0)\n-02CC3C Filename Length       0091 (145)\n-02CC3E Extra Length          0009 (9)\n-02CC40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02C172 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C174   Length              0005 (5)\n+02C176   Flags               01 (1) 'Modification'\n+02C177   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02C17B PAYLOAD\n+\n+02CA48 DATA DESCRIPTOR       08074B50 (134695760)\n+02CA4C CRC                   2B6EF697 (728692375)\n+02CA50 Compressed Size       000008CD (2253)\n+02CA54 Uncompressed Size     000008CD (2253)\n+\n+02CA58 LOCAL HEADER #94      04034B50 (67324752)\n+02CA5C Extract Zip Spec      14 (20) '2.0'\n+02CA5D Extract OS            00 (0) 'MS-DOS'\n+02CA5E General Purpose Flag  0000 (0)\n+02CA60 Compression Method    0000 (0) 'Stored'\n+02CA62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CA66 CRC                   00000000 (0)\n+02CA6A Compressed Size       00000000 (0)\n+02CA6E Uncompressed Size     00000000 (0)\n+02CA72 Filename Length       0034 (52)\n+02CA74 Extra Length          0009 (9)\n+02CA76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CA76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02CAAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CAAC   Length              0005 (5)\n+02CAAE   Flags               01 (1) 'Modification'\n+02CAAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02CAB3 LOCAL HEADER #95      04034B50 (67324752)\n+02CAB7 Extract Zip Spec      14 (20) '2.0'\n+02CAB8 Extract OS            00 (0) 'MS-DOS'\n+02CAB9 General Purpose Flag  0000 (0)\n+02CABB Compression Method    0000 (0) 'Stored'\n+02CABD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CAC1 CRC                   00000000 (0)\n+02CAC5 Compressed Size       00000000 (0)\n+02CAC9 Uncompressed Size     00000000 (0)\n+02CACD Filename Length       003D (61)\n+02CACF Extra Length          0009 (9)\n+02CAD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CAD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02CB0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CB10   Length              0005 (5)\n+02CB12   Flags               01 (1) 'Modification'\n+02CB13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02CB17 LOCAL HEADER #96      04034B50 (67324752)\n+02CB1B Extract Zip Spec      14 (20) '2.0'\n+02CB1C Extract OS            00 (0) 'MS-DOS'\n+02CB1D General Purpose Flag  0000 (0)\n+02CB1F Compression Method    0000 (0) 'Stored'\n+02CB21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CB25 CRC                   00000000 (0)\n+02CB29 Compressed Size       00000000 (0)\n+02CB2D Uncompressed Size     00000000 (0)\n+02CB31 Filename Length       007B (123)\n+02CB33 Extra Length          0009 (9)\n+02CB35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CB35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02CBB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CBB2   Length              0005 (5)\n+02CBB4   Flags               01 (1) 'Modification'\n+02CBB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02CBB9 LOCAL HEADER #97      04034B50 (67324752)\n+02CBBD Extract Zip Spec      14 (20) '2.0'\n+02CBBE Extract OS            00 (0) 'MS-DOS'\n+02CBBF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02CBC1 Compression Method    0000 (0) 'Stored'\n+02CBC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CBC7 CRC                   00000000 (0)\n+02CBCB Compressed Size       00000000 (0)\n+02CBCF Uncompressed Size     00000000 (0)\n+02CBD3 Filename Length       0091 (145)\n+02CBD5 Extra Length          0009 (9)\n+02CBD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2CC40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2CBD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02CCD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CCD3   Length              0005 (5)\n-02CCD5   Flags               01 (1) 'Modification'\n-02CCD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02CCDA PAYLOAD\n-\n-02E08B DATA DESCRIPTOR       08074B50 (134695760)\n-02E08F CRC                   DBC79151 (3687289169)\n-02E093 Compressed Size       000013B1 (5041)\n-02E097 Uncompressed Size     000013B1 (5041)\n-\n-02E09B LOCAL HEADER #98      04034B50 (67324752)\n-02E09F Extract Zip Spec      14 (20) '2.0'\n-02E0A0 Extract OS            00 (0) 'MS-DOS'\n-02E0A1 General Purpose Flag  0000 (0)\n-02E0A3 Compression Method    0000 (0) 'Stored'\n-02E0A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E0A9 CRC                   00000000 (0)\n-02E0AD Compressed Size       00000000 (0)\n-02E0B1 Uncompressed Size     00000000 (0)\n-02E0B5 Filename Length       0081 (129)\n-02E0B7 Extra Length          0009 (9)\n-02E0B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E0B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E13A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E13C   Length              0005 (5)\n-02E13E   Flags               01 (1) 'Modification'\n-02E13F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E143 LOCAL HEADER #99      04034B50 (67324752)\n-02E147 Extract Zip Spec      14 (20) '2.0'\n-02E148 Extract OS            00 (0) 'MS-DOS'\n-02E149 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02E14B Compression Method    0000 (0) 'Stored'\n-02E14D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E151 CRC                   00000000 (0)\n-02E155 Compressed Size       00000000 (0)\n-02E159 Uncompressed Size     00000000 (0)\n-02E15D Filename Length       0097 (151)\n-02E15F Extra Length          0009 (9)\n-02E161 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02CC68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CC6A   Length              0005 (5)\n+02CC6C   Flags               01 (1) 'Modification'\n+02CC6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02CC71 PAYLOAD\n+\n+02E022 DATA DESCRIPTOR       08074B50 (134695760)\n+02E026 CRC                   DBC79151 (3687289169)\n+02E02A Compressed Size       000013B1 (5041)\n+02E02E Uncompressed Size     000013B1 (5041)\n+\n+02E032 LOCAL HEADER #98      04034B50 (67324752)\n+02E036 Extract Zip Spec      14 (20) '2.0'\n+02E037 Extract OS            00 (0) 'MS-DOS'\n+02E038 General Purpose Flag  0000 (0)\n+02E03A Compression Method    0000 (0) 'Stored'\n+02E03C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E040 CRC                   00000000 (0)\n+02E044 Compressed Size       00000000 (0)\n+02E048 Uncompressed Size     00000000 (0)\n+02E04C Filename Length       0081 (129)\n+02E04E Extra Length          0009 (9)\n+02E050 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E050: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02E0D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E0D3   Length              0005 (5)\n+02E0D5   Flags               01 (1) 'Modification'\n+02E0D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02E0DA LOCAL HEADER #99      04034B50 (67324752)\n+02E0DE Extract Zip Spec      14 (20) '2.0'\n+02E0DF Extract OS            00 (0) 'MS-DOS'\n+02E0E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02E0E2 Compression Method    0000 (0) 'Stored'\n+02E0E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E0E8 CRC                   00000000 (0)\n+02E0EC Compressed Size       00000000 (0)\n+02E0F0 Uncompressed Size     00000000 (0)\n+02E0F4 Filename Length       0097 (151)\n+02E0F6 Extra Length          0009 (9)\n+02E0F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2E161: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E0F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02E1F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E1FA   Length              0005 (5)\n-02E1FC   Flags               01 (1) 'Modification'\n-02E1FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02E201 PAYLOAD\n-\n-02E84F DATA DESCRIPTOR       08074B50 (134695760)\n-02E853 CRC                   9AFFB21B (2600448539)\n-02E857 Compressed Size       0000064E (1614)\n-02E85B Uncompressed Size     0000064E (1614)\n-\n-02E85F LOCAL HEADER #100     04034B50 (67324752)\n-02E863 Extract Zip Spec      14 (20) '2.0'\n-02E864 Extract OS            00 (0) 'MS-DOS'\n-02E865 General Purpose Flag  0000 (0)\n-02E867 Compression Method    0000 (0) 'Stored'\n-02E869 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E86D CRC                   00000000 (0)\n-02E871 Compressed Size       00000000 (0)\n-02E875 Uncompressed Size     00000000 (0)\n-02E879 Filename Length       007D (125)\n-02E87B Extra Length          0009 (9)\n-02E87D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E87D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E8FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E8FC   Length              0005 (5)\n-02E8FE   Flags               01 (1) 'Modification'\n-02E8FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E903 LOCAL HEADER #101     04034B50 (67324752)\n-02E907 Extract Zip Spec      14 (20) '2.0'\n-02E908 Extract OS            00 (0) 'MS-DOS'\n-02E909 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02E90B Compression Method    0000 (0) 'Stored'\n-02E90D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E911 CRC                   00000000 (0)\n-02E915 Compressed Size       00000000 (0)\n-02E919 Uncompressed Size     00000000 (0)\n-02E91D Filename Length       0093 (147)\n-02E91F Extra Length          0009 (9)\n-02E921 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02E18F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E191   Length              0005 (5)\n+02E193   Flags               01 (1) 'Modification'\n+02E194   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02E198 PAYLOAD\n+\n+02E7E6 DATA DESCRIPTOR       08074B50 (134695760)\n+02E7EA CRC                   9AFFB21B (2600448539)\n+02E7EE Compressed Size       0000064E (1614)\n+02E7F2 Uncompressed Size     0000064E (1614)\n+\n+02E7F6 LOCAL HEADER #100     04034B50 (67324752)\n+02E7FA Extract Zip Spec      14 (20) '2.0'\n+02E7FB Extract OS            00 (0) 'MS-DOS'\n+02E7FC General Purpose Flag  0000 (0)\n+02E7FE Compression Method    0000 (0) 'Stored'\n+02E800 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E804 CRC                   00000000 (0)\n+02E808 Compressed Size       00000000 (0)\n+02E80C Uncompressed Size     00000000 (0)\n+02E810 Filename Length       007D (125)\n+02E812 Extra Length          0009 (9)\n+02E814 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E814: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02E891 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E893   Length              0005 (5)\n+02E895   Flags               01 (1) 'Modification'\n+02E896   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02E89A LOCAL HEADER #101     04034B50 (67324752)\n+02E89E Extract Zip Spec      14 (20) '2.0'\n+02E89F Extract OS            00 (0) 'MS-DOS'\n+02E8A0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02E8A2 Compression Method    0000 (0) 'Stored'\n+02E8A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E8A8 CRC                   00000000 (0)\n+02E8AC Compressed Size       00000000 (0)\n+02E8B0 Uncompressed Size     00000000 (0)\n+02E8B4 Filename Length       0093 (147)\n+02E8B6 Extra Length          0009 (9)\n+02E8B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2E921: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E8B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02E9B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E9B6   Length              0005 (5)\n-02E9B8   Flags               01 (1) 'Modification'\n-02E9B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02E9BD PAYLOAD\n-\n-02F40C DATA DESCRIPTOR       08074B50 (134695760)\n-02F410 CRC                   88CF36AA (2295281322)\n-02F414 Compressed Size       00000A4F (2639)\n-02F418 Uncompressed Size     00000A4F (2639)\n-\n-02F41C LOCAL HEADER #102     04034B50 (67324752)\n-02F420 Extract Zip Spec      14 (20) '2.0'\n-02F421 Extract OS            00 (0) 'MS-DOS'\n-02F422 General Purpose Flag  0000 (0)\n-02F424 Compression Method    0000 (0) 'Stored'\n-02F426 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F42A CRC                   00000000 (0)\n-02F42E Compressed Size       00000000 (0)\n-02F432 Uncompressed Size     00000000 (0)\n-02F436 Filename Length       0086 (134)\n-02F438 Extra Length          0009 (9)\n-02F43A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02E94B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E94D   Length              0005 (5)\n+02E94F   Flags               01 (1) 'Modification'\n+02E950   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02E954 PAYLOAD\n+\n+02F3A3 DATA DESCRIPTOR       08074B50 (134695760)\n+02F3A7 CRC                   88CF36AA (2295281322)\n+02F3AB Compressed Size       00000A4F (2639)\n+02F3AF Uncompressed Size     00000A4F (2639)\n+\n+02F3B3 LOCAL HEADER #102     04034B50 (67324752)\n+02F3B7 Extract Zip Spec      14 (20) '2.0'\n+02F3B8 Extract OS            00 (0) 'MS-DOS'\n+02F3B9 General Purpose Flag  0000 (0)\n+02F3BB Compression Method    0000 (0) 'Stored'\n+02F3BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F3C1 CRC                   00000000 (0)\n+02F3C5 Compressed Size       00000000 (0)\n+02F3C9 Uncompressed Size     00000000 (0)\n+02F3CD Filename Length       0086 (134)\n+02F3CF Extra Length          0009 (9)\n+02F3D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x2F43A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2F3D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02F4C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F4C2   Length              0005 (5)\n-02F4C4   Flags               01 (1) 'Modification'\n-02F4C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F4C9 LOCAL HEADER #103     04034B50 (67324752)\n-02F4CD Extract Zip Spec      14 (20) '2.0'\n-02F4CE Extract OS            00 (0) 'MS-DOS'\n-02F4CF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02F4D1 Compression Method    0000 (0) 'Stored'\n-02F4D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F4D7 CRC                   00000000 (0)\n-02F4DB Compressed Size       00000000 (0)\n-02F4DF Uncompressed Size     00000000 (0)\n-02F4E3 Filename Length       009C (156)\n-02F4E5 Extra Length          0009 (9)\n-02F4E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02F457 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F459   Length              0005 (5)\n+02F45B   Flags               01 (1) 'Modification'\n+02F45C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F460 LOCAL HEADER #103     04034B50 (67324752)\n+02F464 Extract Zip Spec      14 (20) '2.0'\n+02F465 Extract OS            00 (0) 'MS-DOS'\n+02F466 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02F468 Compression Method    0000 (0) 'Stored'\n+02F46A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F46E CRC                   00000000 (0)\n+02F472 Compressed Size       00000000 (0)\n+02F476 Uncompressed Size     00000000 (0)\n+02F47A Filename Length       009C (156)\n+02F47C Extra Length          0009 (9)\n+02F47E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2F4E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2F47E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02F583 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F585   Length              0005 (5)\n-02F587   Flags               01 (1) 'Modification'\n-02F588   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02F58C PAYLOAD\n-\n-030291 DATA DESCRIPTOR       08074B50 (134695760)\n-030295 CRC                   9593555C (2509460828)\n-030299 Compressed Size       00000D05 (3333)\n-03029D Uncompressed Size     00000D05 (3333)\n-\n-0302A1 LOCAL HEADER #104     04034B50 (67324752)\n-0302A5 Extract Zip Spec      14 (20) '2.0'\n-0302A6 Extract OS            00 (0) 'MS-DOS'\n-0302A7 General Purpose Flag  0000 (0)\n-0302A9 Compression Method    0000 (0) 'Stored'\n-0302AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0302AF CRC                   00000000 (0)\n-0302B3 Compressed Size       00000000 (0)\n-0302B7 Uncompressed Size     00000000 (0)\n-0302BB Filename Length       007B (123)\n-0302BD Extra Length          0009 (9)\n-0302BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x302BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03033A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03033C   Length              0005 (5)\n-03033E   Flags               01 (1) 'Modification'\n-03033F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-030343 LOCAL HEADER #105     04034B50 (67324752)\n-030347 Extract Zip Spec      14 (20) '2.0'\n-030348 Extract OS            00 (0) 'MS-DOS'\n-030349 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03034B Compression Method    0000 (0) 'Stored'\n-03034D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-030351 CRC                   00000000 (0)\n-030355 Compressed Size       00000000 (0)\n-030359 Uncompressed Size     00000000 (0)\n-03035D Filename Length       0091 (145)\n-03035F Extra Length          0009 (9)\n-030361 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02F51A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F51C   Length              0005 (5)\n+02F51E   Flags               01 (1) 'Modification'\n+02F51F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02F523 PAYLOAD\n+\n+030228 DATA DESCRIPTOR       08074B50 (134695760)\n+03022C CRC                   9593555C (2509460828)\n+030230 Compressed Size       00000D05 (3333)\n+030234 Uncompressed Size     00000D05 (3333)\n+\n+030238 LOCAL HEADER #104     04034B50 (67324752)\n+03023C Extract Zip Spec      14 (20) '2.0'\n+03023D Extract OS            00 (0) 'MS-DOS'\n+03023E General Purpose Flag  0000 (0)\n+030240 Compression Method    0000 (0) 'Stored'\n+030242 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+030246 CRC                   00000000 (0)\n+03024A Compressed Size       00000000 (0)\n+03024E Uncompressed Size     00000000 (0)\n+030252 Filename Length       007B (123)\n+030254 Extra Length          0009 (9)\n+030256 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30256: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0302D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0302D3   Length              0005 (5)\n+0302D5   Flags               01 (1) 'Modification'\n+0302D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0302DA LOCAL HEADER #105     04034B50 (67324752)\n+0302DE Extract Zip Spec      14 (20) '2.0'\n+0302DF Extract OS            00 (0) 'MS-DOS'\n+0302E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0302E2 Compression Method    0000 (0) 'Stored'\n+0302E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0302E8 CRC                   00000000 (0)\n+0302EC Compressed Size       00000000 (0)\n+0302F0 Uncompressed Size     00000000 (0)\n+0302F4 Filename Length       0091 (145)\n+0302F6 Extra Length          0009 (9)\n+0302F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x30361: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x302F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0303F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0303F4   Length              0005 (5)\n-0303F6   Flags               01 (1) 'Modification'\n-0303F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0303FB PAYLOAD\n-\n-0317D8 DATA DESCRIPTOR       08074B50 (134695760)\n-0317DC CRC                   9640338D (2520789901)\n-0317E0 Compressed Size       000013DD (5085)\n-0317E4 Uncompressed Size     000013DD (5085)\n-\n-0317E8 LOCAL HEADER #106     04034B50 (67324752)\n-0317EC Extract Zip Spec      14 (20) '2.0'\n-0317ED Extract OS            00 (0) 'MS-DOS'\n-0317EE General Purpose Flag  0000 (0)\n-0317F0 Compression Method    0000 (0) 'Stored'\n-0317F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0317F6 CRC                   00000000 (0)\n-0317FA Compressed Size       00000000 (0)\n-0317FE Uncompressed Size     00000000 (0)\n-031802 Filename Length       007D (125)\n-031804 Extra Length          0009 (9)\n-031806 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31806: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031883 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031885   Length              0005 (5)\n-031887   Flags               01 (1) 'Modification'\n-031888   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03188C LOCAL HEADER #107     04034B50 (67324752)\n-031890 Extract Zip Spec      14 (20) '2.0'\n-031891 Extract OS            00 (0) 'MS-DOS'\n-031892 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-031894 Compression Method    0000 (0) 'Stored'\n-031896 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03189A CRC                   00000000 (0)\n-03189E Compressed Size       00000000 (0)\n-0318A2 Uncompressed Size     00000000 (0)\n-0318A6 Filename Length       0093 (147)\n-0318A8 Extra Length          0009 (9)\n-0318AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+030389 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03038B   Length              0005 (5)\n+03038D   Flags               01 (1) 'Modification'\n+03038E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+030392 PAYLOAD\n+\n+03176F DATA DESCRIPTOR       08074B50 (134695760)\n+031773 CRC                   9640338D (2520789901)\n+031777 Compressed Size       000013DD (5085)\n+03177B Uncompressed Size     000013DD (5085)\n+\n+03177F LOCAL HEADER #106     04034B50 (67324752)\n+031783 Extract Zip Spec      14 (20) '2.0'\n+031784 Extract OS            00 (0) 'MS-DOS'\n+031785 General Purpose Flag  0000 (0)\n+031787 Compression Method    0000 (0) 'Stored'\n+031789 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03178D CRC                   00000000 (0)\n+031791 Compressed Size       00000000 (0)\n+031795 Uncompressed Size     00000000 (0)\n+031799 Filename Length       007D (125)\n+03179B Extra Length          0009 (9)\n+03179D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3179D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03181A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03181C   Length              0005 (5)\n+03181E   Flags               01 (1) 'Modification'\n+03181F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+031823 LOCAL HEADER #107     04034B50 (67324752)\n+031827 Extract Zip Spec      14 (20) '2.0'\n+031828 Extract OS            00 (0) 'MS-DOS'\n+031829 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03182B Compression Method    0000 (0) 'Stored'\n+03182D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+031831 CRC                   00000000 (0)\n+031835 Compressed Size       00000000 (0)\n+031839 Uncompressed Size     00000000 (0)\n+03183D Filename Length       0093 (147)\n+03183F Extra Length          0009 (9)\n+031841 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x318AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x31841: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03193D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03193F   Length              0005 (5)\n-031941   Flags               01 (1) 'Modification'\n-031942   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-031946 PAYLOAD\n-\n-033565 DATA DESCRIPTOR       08074B50 (134695760)\n-033569 CRC                   5232B519 (1379054873)\n-03356D Compressed Size       00001C1F (7199)\n-033571 Uncompressed Size     00001C1F (7199)\n-\n-033575 LOCAL HEADER #108     04034B50 (67324752)\n-033579 Extract Zip Spec      14 (20) '2.0'\n-03357A Extract OS            00 (0) 'MS-DOS'\n-03357B General Purpose Flag  0000 (0)\n-03357D Compression Method    0000 (0) 'Stored'\n-03357F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033583 CRC                   00000000 (0)\n-033587 Compressed Size       00000000 (0)\n-03358B Uncompressed Size     00000000 (0)\n-03358F Filename Length       007A (122)\n-033591 Extra Length          0009 (9)\n-033593 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x33593: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03360D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03360F   Length              0005 (5)\n-033611   Flags               01 (1) 'Modification'\n-033612   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-033616 LOCAL HEADER #109     04034B50 (67324752)\n-03361A Extract Zip Spec      14 (20) '2.0'\n-03361B Extract OS            00 (0) 'MS-DOS'\n-03361C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03361E Compression Method    0000 (0) 'Stored'\n-033620 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033624 CRC                   00000000 (0)\n-033628 Compressed Size       00000000 (0)\n-03362C Uncompressed Size     00000000 (0)\n-033630 Filename Length       0090 (144)\n-033632 Extra Length          0009 (9)\n-033634 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0318D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0318D6   Length              0005 (5)\n+0318D8   Flags               01 (1) 'Modification'\n+0318D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0318DD PAYLOAD\n+\n+0334FC DATA DESCRIPTOR       08074B50 (134695760)\n+033500 CRC                   5232B519 (1379054873)\n+033504 Compressed Size       00001C1F (7199)\n+033508 Uncompressed Size     00001C1F (7199)\n+\n+03350C LOCAL HEADER #108     04034B50 (67324752)\n+033510 Extract Zip Spec      14 (20) '2.0'\n+033511 Extract OS            00 (0) 'MS-DOS'\n+033512 General Purpose Flag  0000 (0)\n+033514 Compression Method    0000 (0) 'Stored'\n+033516 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03351A CRC                   00000000 (0)\n+03351E Compressed Size       00000000 (0)\n+033522 Uncompressed Size     00000000 (0)\n+033526 Filename Length       007A (122)\n+033528 Extra Length          0009 (9)\n+03352A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3352A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0335A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0335A6   Length              0005 (5)\n+0335A8   Flags               01 (1) 'Modification'\n+0335A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0335AD LOCAL HEADER #109     04034B50 (67324752)\n+0335B1 Extract Zip Spec      14 (20) '2.0'\n+0335B2 Extract OS            00 (0) 'MS-DOS'\n+0335B3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0335B5 Compression Method    0000 (0) 'Stored'\n+0335B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0335BB CRC                   00000000 (0)\n+0335BF Compressed Size       00000000 (0)\n+0335C3 Uncompressed Size     00000000 (0)\n+0335C7 Filename Length       0090 (144)\n+0335C9 Extra Length          0009 (9)\n+0335CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x33634: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x335CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0336C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0336C6   Length              0005 (5)\n-0336C8   Flags               01 (1) 'Modification'\n-0336C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0336CD PAYLOAD\n-\n-034AA3 DATA DESCRIPTOR       08074B50 (134695760)\n-034AA7 CRC                   57267C45 (1462139973)\n-034AAB Compressed Size       000013D6 (5078)\n-034AAF Uncompressed Size     000013D6 (5078)\n-\n-034AB3 LOCAL HEADER #110     04034B50 (67324752)\n-034AB7 Extract Zip Spec      14 (20) '2.0'\n-034AB8 Extract OS            00 (0) 'MS-DOS'\n-034AB9 General Purpose Flag  0000 (0)\n-034ABB Compression Method    0000 (0) 'Stored'\n-034ABD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034AC1 CRC                   00000000 (0)\n-034AC5 Compressed Size       00000000 (0)\n-034AC9 Uncompressed Size     00000000 (0)\n-034ACD Filename Length       0081 (129)\n-034ACF Extra Length          0009 (9)\n-034AD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x34AD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-034B52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034B54   Length              0005 (5)\n-034B56   Flags               01 (1) 'Modification'\n-034B57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-034B5B LOCAL HEADER #111     04034B50 (67324752)\n-034B5F Extract Zip Spec      14 (20) '2.0'\n-034B60 Extract OS            00 (0) 'MS-DOS'\n-034B61 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-034B63 Compression Method    0000 (0) 'Stored'\n-034B65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-034B69 CRC                   00000000 (0)\n-034B6D Compressed Size       00000000 (0)\n-034B71 Uncompressed Size     00000000 (0)\n-034B75 Filename Length       0097 (151)\n-034B77 Extra Length          0009 (9)\n-034B79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03365B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03365D   Length              0005 (5)\n+03365F   Flags               01 (1) 'Modification'\n+033660   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+033664 PAYLOAD\n+\n+034A3A DATA DESCRIPTOR       08074B50 (134695760)\n+034A3E CRC                   57267C45 (1462139973)\n+034A42 Compressed Size       000013D6 (5078)\n+034A46 Uncompressed Size     000013D6 (5078)\n+\n+034A4A LOCAL HEADER #110     04034B50 (67324752)\n+034A4E Extract Zip Spec      14 (20) '2.0'\n+034A4F Extract OS            00 (0) 'MS-DOS'\n+034A50 General Purpose Flag  0000 (0)\n+034A52 Compression Method    0000 (0) 'Stored'\n+034A54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034A58 CRC                   00000000 (0)\n+034A5C Compressed Size       00000000 (0)\n+034A60 Uncompressed Size     00000000 (0)\n+034A64 Filename Length       0081 (129)\n+034A66 Extra Length          0009 (9)\n+034A68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34A68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034AE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034AEB   Length              0005 (5)\n+034AED   Flags               01 (1) 'Modification'\n+034AEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+034AF2 LOCAL HEADER #111     04034B50 (67324752)\n+034AF6 Extract Zip Spec      14 (20) '2.0'\n+034AF7 Extract OS            00 (0) 'MS-DOS'\n+034AF8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+034AFA Compression Method    0000 (0) 'Stored'\n+034AFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034B00 CRC                   00000000 (0)\n+034B04 Compressed Size       00000000 (0)\n+034B08 Uncompressed Size     00000000 (0)\n+034B0C Filename Length       0097 (151)\n+034B0E Extra Length          0009 (9)\n+034B10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x34B79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x34B10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-034C10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034C12   Length              0005 (5)\n-034C14   Flags               01 (1) 'Modification'\n-034C15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-034C19 PAYLOAD\n-\n-03534F DATA DESCRIPTOR       08074B50 (134695760)\n-035353 CRC                   333FC2BB (859816635)\n-035357 Compressed Size       00000736 (1846)\n-03535B Uncompressed Size     00000736 (1846)\n-\n-03535F LOCAL HEADER #112     04034B50 (67324752)\n-035363 Extract Zip Spec      14 (20) '2.0'\n-035364 Extract OS            00 (0) 'MS-DOS'\n-035365 General Purpose Flag  0000 (0)\n-035367 Compression Method    0000 (0) 'Stored'\n-035369 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03536D CRC                   00000000 (0)\n-035371 Compressed Size       00000000 (0)\n-035375 Uncompressed Size     00000000 (0)\n-035379 Filename Length       0024 (36)\n-03537B Extra Length          0009 (9)\n-03537D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3537D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0353A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0353A3   Length              0005 (5)\n-0353A5   Flags               01 (1) 'Modification'\n-0353A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0353AA LOCAL HEADER #113     04034B50 (67324752)\n-0353AE Extract Zip Spec      14 (20) '2.0'\n-0353AF Extract OS            00 (0) 'MS-DOS'\n-0353B0 General Purpose Flag  0000 (0)\n-0353B2 Compression Method    0000 (0) 'Stored'\n-0353B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0353B8 CRC                   00000000 (0)\n-0353BC Compressed Size       00000000 (0)\n-0353C0 Uncompressed Size     00000000 (0)\n-0353C4 Filename Length       002D (45)\n-0353C6 Extra Length          0009 (9)\n-0353C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x353C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0353F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0353F7   Length              0005 (5)\n-0353F9   Flags               01 (1) 'Modification'\n-0353FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0353FE LOCAL HEADER #114     04034B50 (67324752)\n-035402 Extract Zip Spec      14 (20) '2.0'\n-035403 Extract OS            00 (0) 'MS-DOS'\n-035404 General Purpose Flag  0000 (0)\n-035406 Compression Method    0000 (0) 'Stored'\n-035408 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03540C CRC                   00000000 (0)\n-035410 Compressed Size       00000000 (0)\n-035414 Uncompressed Size     00000000 (0)\n-035418 Filename Length       005A (90)\n-03541A Extra Length          0009 (9)\n-03541C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3541C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-035476 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-035478   Length              0005 (5)\n-03547A   Flags               01 (1) 'Modification'\n-03547B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03547F LOCAL HEADER #115     04034B50 (67324752)\n-035483 Extract Zip Spec      14 (20) '2.0'\n-035484 Extract OS            00 (0) 'MS-DOS'\n-035485 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-035487 Compression Method    0000 (0) 'Stored'\n-035489 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03548D CRC                   00000000 (0)\n-035491 Compressed Size       00000000 (0)\n-035495 Uncompressed Size     00000000 (0)\n-035499 Filename Length       0070 (112)\n-03549B Extra Length          0009 (9)\n-03549D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3549D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03550D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03550F   Length              0005 (5)\n-035511   Flags               01 (1) 'Modification'\n-035512   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-035516 PAYLOAD\n-\n-035EE3 DATA DESCRIPTOR       08074B50 (134695760)\n-035EE7 CRC                   10CC5E74 (281828980)\n-035EEB Compressed Size       000009CD (2509)\n-035EEF Uncompressed Size     000009CD (2509)\n-\n-035EF3 LOCAL HEADER #116     04034B50 (67324752)\n-035EF7 Extract Zip Spec      14 (20) '2.0'\n-035EF8 Extract OS            00 (0) 'MS-DOS'\n-035EF9 General Purpose Flag  0000 (0)\n-035EFB Compression Method    0000 (0) 'Stored'\n-035EFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-035F01 CRC                   00000000 (0)\n-035F05 Compressed Size       00000000 (0)\n-035F09 Uncompressed Size     00000000 (0)\n-035F0D Filename Length       005A (90)\n-035F0F Extra Length          0009 (9)\n-035F11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35F11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-035F6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-035F6D   Length              0005 (5)\n-035F6F   Flags               01 (1) 'Modification'\n-035F70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-035F74 LOCAL HEADER #117     04034B50 (67324752)\n-035F78 Extract Zip Spec      14 (20) '2.0'\n-035F79 Extract OS            00 (0) 'MS-DOS'\n-035F7A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-035F7C Compression Method    0000 (0) 'Stored'\n-035F7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-035F82 CRC                   00000000 (0)\n-035F86 Compressed Size       00000000 (0)\n-035F8A Uncompressed Size     00000000 (0)\n-035F8E Filename Length       0070 (112)\n-035F90 Extra Length          0009 (9)\n-035F92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35F92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-036002 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-036004   Length              0005 (5)\n-036006   Flags               01 (1) 'Modification'\n-036007   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03600B PAYLOAD\n-\n-0369AB DATA DESCRIPTOR       08074B50 (134695760)\n-0369AF CRC                   5F6BF872 (1600911474)\n-0369B3 Compressed Size       000009A0 (2464)\n-0369B7 Uncompressed Size     000009A0 (2464)\n-\n-0369BB LOCAL HEADER #118     04034B50 (67324752)\n-0369BF Extract Zip Spec      14 (20) '2.0'\n-0369C0 Extract OS            00 (0) 'MS-DOS'\n-0369C1 General Purpose Flag  0000 (0)\n-0369C3 Compression Method    0000 (0) 'Stored'\n-0369C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0369C9 CRC                   00000000 (0)\n-0369CD Compressed Size       00000000 (0)\n-0369D1 Uncompressed Size     00000000 (0)\n-0369D5 Filename Length       0023 (35)\n-0369D7 Extra Length          0009 (9)\n-0369D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x369D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0369FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0369FE   Length              0005 (5)\n-036A00   Flags               01 (1) 'Modification'\n-036A01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-036A05 LOCAL HEADER #119     04034B50 (67324752)\n-036A09 Extract Zip Spec      14 (20) '2.0'\n-036A0A Extract OS            00 (0) 'MS-DOS'\n-036A0B General Purpose Flag  0000 (0)\n-036A0D Compression Method    0000 (0) 'Stored'\n-036A0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-036A13 CRC                   00000000 (0)\n-036A17 Compressed Size       00000000 (0)\n-036A1B Uncompressed Size     00000000 (0)\n-036A1F Filename Length       002C (44)\n-036A21 Extra Length          0009 (9)\n-036A23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36A23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-036A4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-036A51   Length              0005 (5)\n-036A53   Flags               01 (1) 'Modification'\n-036A54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-036A58 LOCAL HEADER #120     04034B50 (67324752)\n-036A5C Extract Zip Spec      14 (20) '2.0'\n-036A5D Extract OS            00 (0) 'MS-DOS'\n-036A5E General Purpose Flag  0000 (0)\n-036A60 Compression Method    0000 (0) 'Stored'\n-036A62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-036A66 CRC                   00000000 (0)\n-036A6A Compressed Size       00000000 (0)\n-036A6E Uncompressed Size     00000000 (0)\n-036A72 Filename Length       0056 (86)\n-036A74 Extra Length          0009 (9)\n-036A76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36A76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-036ACC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-036ACE   Length              0005 (5)\n-036AD0   Flags               01 (1) 'Modification'\n-036AD1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-036AD5 LOCAL HEADER #121     04034B50 (67324752)\n-036AD9 Extract Zip Spec      14 (20) '2.0'\n-036ADA Extract OS            00 (0) 'MS-DOS'\n-036ADB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-036ADD Compression Method    0000 (0) 'Stored'\n-036ADF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-036AE3 CRC                   00000000 (0)\n-036AE7 Compressed Size       00000000 (0)\n-036AEB Uncompressed Size     00000000 (0)\n-036AEF Filename Length       006C (108)\n-036AF1 Extra Length          0009 (9)\n-036AF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36AF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-036B5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-036B61   Length              0005 (5)\n-036B63   Flags               01 (1) 'Modification'\n-036B64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-036B68 PAYLOAD\n-\n-037C9D DATA DESCRIPTOR       08074B50 (134695760)\n-037CA1 CRC                   456B0BC9 (1164643273)\n-037CA5 Compressed Size       00001135 (4405)\n-037CA9 Uncompressed Size     00001135 (4405)\n-\n-037CAD LOCAL HEADER #122     04034B50 (67324752)\n-037CB1 Extract Zip Spec      14 (20) '2.0'\n-037CB2 Extract OS            00 (0) 'MS-DOS'\n-037CB3 General Purpose Flag  0000 (0)\n-037CB5 Compression Method    0000 (0) 'Stored'\n-037CB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037CBB CRC                   00000000 (0)\n-037CBF Compressed Size       00000000 (0)\n-037CC3 Uncompressed Size     00000000 (0)\n-037CC7 Filename Length       0022 (34)\n-037CC9 Extra Length          0009 (9)\n-037CCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37CCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-037CED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037CEF   Length              0005 (5)\n-037CF1   Flags               01 (1) 'Modification'\n-037CF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-037CF6 LOCAL HEADER #123     04034B50 (67324752)\n-037CFA Extract Zip Spec      14 (20) '2.0'\n-037CFB Extract OS            00 (0) 'MS-DOS'\n-037CFC General Purpose Flag  0000 (0)\n-037CFE Compression Method    0000 (0) 'Stored'\n-037D00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037D04 CRC                   00000000 (0)\n-037D08 Compressed Size       00000000 (0)\n-037D0C Uncompressed Size     00000000 (0)\n-037D10 Filename Length       002B (43)\n-037D12 Extra Length          0009 (9)\n-037D14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37D14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-037D3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037D41   Length              0005 (5)\n-037D43   Flags               01 (1) 'Modification'\n-037D44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-037D48 LOCAL HEADER #124     04034B50 (67324752)\n-037D4C Extract Zip Spec      14 (20) '2.0'\n-037D4D Extract OS            00 (0) 'MS-DOS'\n-037D4E General Purpose Flag  0000 (0)\n-037D50 Compression Method    0000 (0) 'Stored'\n-037D52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037D56 CRC                   00000000 (0)\n-037D5A Compressed Size       00000000 (0)\n-037D5E Uncompressed Size     00000000 (0)\n-037D62 Filename Length       006B (107)\n-037D64 Extra Length          0009 (9)\n-037D66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37D66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-037DD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037DD3   Length              0005 (5)\n-037DD5   Flags               01 (1) 'Modification'\n-037DD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-037DDA LOCAL HEADER #125     04034B50 (67324752)\n-037DDE Extract Zip Spec      14 (20) '2.0'\n-037DDF Extract OS            00 (0) 'MS-DOS'\n-037DE0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-037DE2 Compression Method    0000 (0) 'Stored'\n-037DE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037DE8 CRC                   00000000 (0)\n-037DEC Compressed Size       00000000 (0)\n-037DF0 Uncompressed Size     00000000 (0)\n-037DF4 Filename Length       0081 (129)\n-037DF6 Extra Length          0009 (9)\n-037DF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37DF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-037E79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037E7B   Length              0005 (5)\n-037E7D   Flags               01 (1) 'Modification'\n-037E7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-037E82 PAYLOAD\n-\n-0387A6 DATA DESCRIPTOR       08074B50 (134695760)\n-0387AA CRC                   E1F88A2C (3791161900)\n-0387AE Compressed Size       00000924 (2340)\n-0387B2 Uncompressed Size     00000924 (2340)\n-\n-0387B6 LOCAL HEADER #126     04034B50 (67324752)\n-0387BA Extract Zip Spec      14 (20) '2.0'\n-0387BB Extract OS            00 (0) 'MS-DOS'\n-0387BC General Purpose Flag  0000 (0)\n-0387BE Compression Method    0000 (0) 'Stored'\n-0387C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0387C4 CRC                   00000000 (0)\n-0387C8 Compressed Size       00000000 (0)\n-0387CC Uncompressed Size     00000000 (0)\n-0387D0 Filename Length       005F (95)\n-0387D2 Extra Length          0009 (9)\n-0387D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x387D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-038833 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-038835   Length              0005 (5)\n-038837   Flags               01 (1) 'Modification'\n-038838   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03883C LOCAL HEADER #127     04034B50 (67324752)\n-038840 Extract Zip Spec      14 (20) '2.0'\n-038841 Extract OS            00 (0) 'MS-DOS'\n-038842 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-038844 Compression Method    0000 (0) 'Stored'\n-038846 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03884A CRC                   00000000 (0)\n-03884E Compressed Size       00000000 (0)\n-038852 Uncompressed Size     00000000 (0)\n-038856 Filename Length       0075 (117)\n-038858 Extra Length          0009 (9)\n-03885A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3885A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0388CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0388D1   Length              0005 (5)\n-0388D3   Flags               01 (1) 'Modification'\n-0388D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0388D8 PAYLOAD\n-\n-0392B8 DATA DESCRIPTOR       08074B50 (134695760)\n-0392BC CRC                   6A45582D (1782929453)\n-0392C0 Compressed Size       000009E0 (2528)\n-0392C4 Uncompressed Size     000009E0 (2528)\n-\n-0392C8 LOCAL HEADER #128     04034B50 (67324752)\n-0392CC Extract Zip Spec      14 (20) '2.0'\n-0392CD Extract OS            00 (0) 'MS-DOS'\n-0392CE General Purpose Flag  0000 (0)\n-0392D0 Compression Method    0000 (0) 'Stored'\n-0392D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0392D6 CRC                   00000000 (0)\n-0392DA Compressed Size       00000000 (0)\n-0392DE Uncompressed Size     00000000 (0)\n-0392E2 Filename Length       0061 (97)\n-0392E4 Extra Length          0009 (9)\n-0392E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x392E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-039347 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-039349   Length              0005 (5)\n-03934B   Flags               01 (1) 'Modification'\n-03934C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-039350 LOCAL HEADER #129     04034B50 (67324752)\n-039354 Extract Zip Spec      14 (20) '2.0'\n-039355 Extract OS            00 (0) 'MS-DOS'\n-039356 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-039358 Compression Method    0000 (0) 'Stored'\n-03935A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03935E CRC                   00000000 (0)\n-039362 Compressed Size       00000000 (0)\n-039366 Uncompressed Size     00000000 (0)\n-03936A Filename Length       0077 (119)\n-03936C Extra Length          0009 (9)\n-03936E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3936E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0393E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0393E7   Length              0005 (5)\n-0393E9   Flags               01 (1) 'Modification'\n-0393EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0393EE PAYLOAD\n-\n-039F7E DATA DESCRIPTOR       08074B50 (134695760)\n-039F82 CRC                   4731534C (1194414924)\n-039F86 Compressed Size       00000B90 (2960)\n-039F8A Uncompressed Size     00000B90 (2960)\n-\n-039F8E LOCAL HEADER #130     04034B50 (67324752)\n-039F92 Extract Zip Spec      14 (20) '2.0'\n-039F93 Extract OS            00 (0) 'MS-DOS'\n-039F94 General Purpose Flag  0000 (0)\n-039F96 Compression Method    0000 (0) 'Stored'\n-039F98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-039F9C CRC                   00000000 (0)\n-039FA0 Compressed Size       00000000 (0)\n-039FA4 Uncompressed Size     00000000 (0)\n-039FA8 Filename Length       0060 (96)\n-039FAA Extra Length          0009 (9)\n-039FAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39FAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03A00C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03A00E   Length              0005 (5)\n-03A010   Flags               01 (1) 'Modification'\n-03A011   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03A015 LOCAL HEADER #131     04034B50 (67324752)\n-03A019 Extract Zip Spec      14 (20) '2.0'\n-03A01A Extract OS            00 (0) 'MS-DOS'\n-03A01B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03A01D Compression Method    0000 (0) 'Stored'\n-03A01F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03A023 CRC                   00000000 (0)\n-03A027 Compressed Size       00000000 (0)\n-03A02B Uncompressed Size     00000000 (0)\n-03A02F Filename Length       0076 (118)\n-03A031 Extra Length          0009 (9)\n-03A033 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A033: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03A0A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03A0AB   Length              0005 (5)\n-03A0AD   Flags               01 (1) 'Modification'\n-03A0AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03A0B2 PAYLOAD\n-\n-03AB2F DATA DESCRIPTOR       08074B50 (134695760)\n-03AB33 CRC                   CEBA8B64 (3468331876)\n-03AB37 Compressed Size       00000A7D (2685)\n-03AB3B Uncompressed Size     00000A7D (2685)\n-\n-03AB3F LOCAL HEADER #132     04034B50 (67324752)\n-03AB43 Extract Zip Spec      14 (20) '2.0'\n-03AB44 Extract OS            00 (0) 'MS-DOS'\n-03AB45 General Purpose Flag  0000 (0)\n-03AB47 Compression Method    0000 (0) 'Stored'\n-03AB49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AB4D CRC                   00000000 (0)\n-03AB51 Compressed Size       00000000 (0)\n-03AB55 Uncompressed Size     00000000 (0)\n-03AB59 Filename Length       005F (95)\n-03AB5B Extra Length          0009 (9)\n-03AB5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3AB5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03ABBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03ABBE   Length              0005 (5)\n-03ABC0   Flags               01 (1) 'Modification'\n-03ABC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03ABC5 LOCAL HEADER #133     04034B50 (67324752)\n-03ABC9 Extract Zip Spec      14 (20) '2.0'\n-03ABCA Extract OS            00 (0) 'MS-DOS'\n-03ABCB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03ABCD Compression Method    0000 (0) 'Stored'\n-03ABCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03ABD3 CRC                   00000000 (0)\n-03ABD7 Compressed Size       00000000 (0)\n-03ABDB Uncompressed Size     00000000 (0)\n-03ABDF Filename Length       0075 (117)\n-03ABE1 Extra Length          0009 (9)\n-03ABE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3ABE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03AC58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03AC5A   Length              0005 (5)\n-03AC5C   Flags               01 (1) 'Modification'\n-03AC5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03AC61 PAYLOAD\n-\n-03B6F6 DATA DESCRIPTOR       08074B50 (134695760)\n-03B6FA CRC                   0DACEA84 (229436036)\n-03B6FE Compressed Size       00000A95 (2709)\n-03B702 Uncompressed Size     00000A95 (2709)\n-\n-03B706 LOCAL HEADER #134     04034B50 (67324752)\n-03B70A Extract Zip Spec      14 (20) '2.0'\n-03B70B Extract OS            00 (0) 'MS-DOS'\n-03B70C General Purpose Flag  0000 (0)\n-03B70E Compression Method    0000 (0) 'Stored'\n-03B710 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B714 CRC                   00000000 (0)\n-03B718 Compressed Size       00000000 (0)\n-03B71C Uncompressed Size     00000000 (0)\n-03B720 Filename Length       0060 (96)\n-03B722 Extra Length          0009 (9)\n-03B724 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B724: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B784 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B786   Length              0005 (5)\n-03B788   Flags               01 (1) 'Modification'\n-03B789   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03B78D LOCAL HEADER #135     04034B50 (67324752)\n-03B791 Extract Zip Spec      14 (20) '2.0'\n-03B792 Extract OS            00 (0) 'MS-DOS'\n-03B793 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03B795 Compression Method    0000 (0) 'Stored'\n-03B797 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B79B CRC                   00000000 (0)\n-03B79F Compressed Size       00000000 (0)\n-03B7A3 Uncompressed Size     00000000 (0)\n-03B7A7 Filename Length       0076 (118)\n-03B7A9 Extra Length          0009 (9)\n-03B7AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B7AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B821 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B823   Length              0005 (5)\n-03B825   Flags               01 (1) 'Modification'\n-03B826   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03B82A PAYLOAD\n-\n-03CA47 DATA DESCRIPTOR       08074B50 (134695760)\n-03CA4B CRC                   2E84B239 (780448313)\n-03CA4F Compressed Size       0000121D (4637)\n-03CA53 Uncompressed Size     0000121D (4637)\n-\n-03CA57 LOCAL HEADER #136     04034B50 (67324752)\n-03CA5B Extract Zip Spec      14 (20) '2.0'\n-03CA5C Extract OS            00 (0) 'MS-DOS'\n-03CA5D General Purpose Flag  0000 (0)\n-03CA5F Compression Method    0000 (0) 'Stored'\n-03CA61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CA65 CRC                   00000000 (0)\n-03CA69 Compressed Size       00000000 (0)\n-03CA6D Uncompressed Size     00000000 (0)\n-03CA71 Filename Length       007A (122)\n-03CA73 Extra Length          0009 (9)\n-03CA75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CA75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CAEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CAF1   Length              0005 (5)\n-03CAF3   Flags               01 (1) 'Modification'\n-03CAF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03CAF8 LOCAL HEADER #137     04034B50 (67324752)\n-03CAFC Extract Zip Spec      14 (20) '2.0'\n-03CAFD Extract OS            00 (0) 'MS-DOS'\n-03CAFE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03CB00 Compression Method    0000 (0) 'Stored'\n-03CB02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CB06 CRC                   00000000 (0)\n-03CB0A Compressed Size       00000000 (0)\n-03CB0E Uncompressed Size     00000000 (0)\n-03CB12 Filename Length       0090 (144)\n-03CB14 Extra Length          0009 (9)\n-03CB16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+034BA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034BA9   Length              0005 (5)\n+034BAB   Flags               01 (1) 'Modification'\n+034BAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+034BB0 PAYLOAD\n+\n+0352E6 DATA DESCRIPTOR       08074B50 (134695760)\n+0352EA CRC                   333FC2BB (859816635)\n+0352EE Compressed Size       00000736 (1846)\n+0352F2 Uncompressed Size     00000736 (1846)\n+\n+0352F6 LOCAL HEADER #112     04034B50 (67324752)\n+0352FA Extract Zip Spec      14 (20) '2.0'\n+0352FB Extract OS            00 (0) 'MS-DOS'\n+0352FC General Purpose Flag  0000 (0)\n+0352FE Compression Method    0000 (0) 'Stored'\n+035300 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035304 CRC                   00000000 (0)\n+035308 Compressed Size       00000000 (0)\n+03530C Uncompressed Size     00000000 (0)\n+035310 Filename Length       0024 (36)\n+035312 Extra Length          0009 (9)\n+035314 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35314: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+035338 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03533A   Length              0005 (5)\n+03533C   Flags               01 (1) 'Modification'\n+03533D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035341 LOCAL HEADER #113     04034B50 (67324752)\n+035345 Extract Zip Spec      14 (20) '2.0'\n+035346 Extract OS            00 (0) 'MS-DOS'\n+035347 General Purpose Flag  0000 (0)\n+035349 Compression Method    0000 (0) 'Stored'\n+03534B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03534F CRC                   00000000 (0)\n+035353 Compressed Size       00000000 (0)\n+035357 Uncompressed Size     00000000 (0)\n+03535B Filename Length       002D (45)\n+03535D Extra Length          0009 (9)\n+03535F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3535F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03538C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03538E   Length              0005 (5)\n+035390   Flags               01 (1) 'Modification'\n+035391   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035395 LOCAL HEADER #114     04034B50 (67324752)\n+035399 Extract Zip Spec      14 (20) '2.0'\n+03539A Extract OS            00 (0) 'MS-DOS'\n+03539B General Purpose Flag  0000 (0)\n+03539D Compression Method    0000 (0) 'Stored'\n+03539F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0353A3 CRC                   00000000 (0)\n+0353A7 Compressed Size       00000000 (0)\n+0353AB Uncompressed Size     00000000 (0)\n+0353AF Filename Length       005A (90)\n+0353B1 Extra Length          0009 (9)\n+0353B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x353B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03540D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03540F   Length              0005 (5)\n+035411   Flags               01 (1) 'Modification'\n+035412   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035416 LOCAL HEADER #115     04034B50 (67324752)\n+03541A Extract Zip Spec      14 (20) '2.0'\n+03541B Extract OS            00 (0) 'MS-DOS'\n+03541C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03541E Compression Method    0000 (0) 'Stored'\n+035420 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035424 CRC                   00000000 (0)\n+035428 Compressed Size       00000000 (0)\n+03542C Uncompressed Size     00000000 (0)\n+035430 Filename Length       0070 (112)\n+035432 Extra Length          0009 (9)\n+035434 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35434: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0354A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0354A6   Length              0005 (5)\n+0354A8   Flags               01 (1) 'Modification'\n+0354A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0354AD PAYLOAD\n+\n+035E7A DATA DESCRIPTOR       08074B50 (134695760)\n+035E7E CRC                   10CC5E74 (281828980)\n+035E82 Compressed Size       000009CD (2509)\n+035E86 Uncompressed Size     000009CD (2509)\n+\n+035E8A LOCAL HEADER #116     04034B50 (67324752)\n+035E8E Extract Zip Spec      14 (20) '2.0'\n+035E8F Extract OS            00 (0) 'MS-DOS'\n+035E90 General Purpose Flag  0000 (0)\n+035E92 Compression Method    0000 (0) 'Stored'\n+035E94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035E98 CRC                   00000000 (0)\n+035E9C Compressed Size       00000000 (0)\n+035EA0 Uncompressed Size     00000000 (0)\n+035EA4 Filename Length       005A (90)\n+035EA6 Extra Length          0009 (9)\n+035EA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35EA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+035F02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035F04   Length              0005 (5)\n+035F06   Flags               01 (1) 'Modification'\n+035F07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035F0B LOCAL HEADER #117     04034B50 (67324752)\n+035F0F Extract Zip Spec      14 (20) '2.0'\n+035F10 Extract OS            00 (0) 'MS-DOS'\n+035F11 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+035F13 Compression Method    0000 (0) 'Stored'\n+035F15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035F19 CRC                   00000000 (0)\n+035F1D Compressed Size       00000000 (0)\n+035F21 Uncompressed Size     00000000 (0)\n+035F25 Filename Length       0070 (112)\n+035F27 Extra Length          0009 (9)\n+035F29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35F29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+035F99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035F9B   Length              0005 (5)\n+035F9D   Flags               01 (1) 'Modification'\n+035F9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+035FA2 PAYLOAD\n+\n+036942 DATA DESCRIPTOR       08074B50 (134695760)\n+036946 CRC                   5F6BF872 (1600911474)\n+03694A Compressed Size       000009A0 (2464)\n+03694E Uncompressed Size     000009A0 (2464)\n+\n+036952 LOCAL HEADER #118     04034B50 (67324752)\n+036956 Extract Zip Spec      14 (20) '2.0'\n+036957 Extract OS            00 (0) 'MS-DOS'\n+036958 General Purpose Flag  0000 (0)\n+03695A Compression Method    0000 (0) 'Stored'\n+03695C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036960 CRC                   00000000 (0)\n+036964 Compressed Size       00000000 (0)\n+036968 Uncompressed Size     00000000 (0)\n+03696C Filename Length       0023 (35)\n+03696E Extra Length          0009 (9)\n+036970 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36970: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+036993 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036995   Length              0005 (5)\n+036997   Flags               01 (1) 'Modification'\n+036998   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03699C LOCAL HEADER #119     04034B50 (67324752)\n+0369A0 Extract Zip Spec      14 (20) '2.0'\n+0369A1 Extract OS            00 (0) 'MS-DOS'\n+0369A2 General Purpose Flag  0000 (0)\n+0369A4 Compression Method    0000 (0) 'Stored'\n+0369A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0369AA CRC                   00000000 (0)\n+0369AE Compressed Size       00000000 (0)\n+0369B2 Uncompressed Size     00000000 (0)\n+0369B6 Filename Length       002C (44)\n+0369B8 Extra Length          0009 (9)\n+0369BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x369BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0369E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0369E8   Length              0005 (5)\n+0369EA   Flags               01 (1) 'Modification'\n+0369EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0369EF LOCAL HEADER #120     04034B50 (67324752)\n+0369F3 Extract Zip Spec      14 (20) '2.0'\n+0369F4 Extract OS            00 (0) 'MS-DOS'\n+0369F5 General Purpose Flag  0000 (0)\n+0369F7 Compression Method    0000 (0) 'Stored'\n+0369F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0369FD CRC                   00000000 (0)\n+036A01 Compressed Size       00000000 (0)\n+036A05 Uncompressed Size     00000000 (0)\n+036A09 Filename Length       0056 (86)\n+036A0B Extra Length          0009 (9)\n+036A0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36A0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+036A63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036A65   Length              0005 (5)\n+036A67   Flags               01 (1) 'Modification'\n+036A68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+036A6C LOCAL HEADER #121     04034B50 (67324752)\n+036A70 Extract Zip Spec      14 (20) '2.0'\n+036A71 Extract OS            00 (0) 'MS-DOS'\n+036A72 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+036A74 Compression Method    0000 (0) 'Stored'\n+036A76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+036A7A CRC                   00000000 (0)\n+036A7E Compressed Size       00000000 (0)\n+036A82 Uncompressed Size     00000000 (0)\n+036A86 Filename Length       006C (108)\n+036A88 Extra Length          0009 (9)\n+036A8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36A8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+036AF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+036AF8   Length              0005 (5)\n+036AFA   Flags               01 (1) 'Modification'\n+036AFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+036AFF PAYLOAD\n+\n+037C34 DATA DESCRIPTOR       08074B50 (134695760)\n+037C38 CRC                   456B0BC9 (1164643273)\n+037C3C Compressed Size       00001135 (4405)\n+037C40 Uncompressed Size     00001135 (4405)\n+\n+037C44 LOCAL HEADER #122     04034B50 (67324752)\n+037C48 Extract Zip Spec      14 (20) '2.0'\n+037C49 Extract OS            00 (0) 'MS-DOS'\n+037C4A General Purpose Flag  0000 (0)\n+037C4C Compression Method    0000 (0) 'Stored'\n+037C4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037C52 CRC                   00000000 (0)\n+037C56 Compressed Size       00000000 (0)\n+037C5A Uncompressed Size     00000000 (0)\n+037C5E Filename Length       0022 (34)\n+037C60 Extra Length          0009 (9)\n+037C62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37C62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037C84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037C86   Length              0005 (5)\n+037C88   Flags               01 (1) 'Modification'\n+037C89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+037C8D LOCAL HEADER #123     04034B50 (67324752)\n+037C91 Extract Zip Spec      14 (20) '2.0'\n+037C92 Extract OS            00 (0) 'MS-DOS'\n+037C93 General Purpose Flag  0000 (0)\n+037C95 Compression Method    0000 (0) 'Stored'\n+037C97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037C9B CRC                   00000000 (0)\n+037C9F Compressed Size       00000000 (0)\n+037CA3 Uncompressed Size     00000000 (0)\n+037CA7 Filename Length       002B (43)\n+037CA9 Extra Length          0009 (9)\n+037CAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37CAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037CD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037CD8   Length              0005 (5)\n+037CDA   Flags               01 (1) 'Modification'\n+037CDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+037CDF LOCAL HEADER #124     04034B50 (67324752)\n+037CE3 Extract Zip Spec      14 (20) '2.0'\n+037CE4 Extract OS            00 (0) 'MS-DOS'\n+037CE5 General Purpose Flag  0000 (0)\n+037CE7 Compression Method    0000 (0) 'Stored'\n+037CE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037CED CRC                   00000000 (0)\n+037CF1 Compressed Size       00000000 (0)\n+037CF5 Uncompressed Size     00000000 (0)\n+037CF9 Filename Length       006B (107)\n+037CFB Extra Length          0009 (9)\n+037CFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37CFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037D68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037D6A   Length              0005 (5)\n+037D6C   Flags               01 (1) 'Modification'\n+037D6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+037D71 LOCAL HEADER #125     04034B50 (67324752)\n+037D75 Extract Zip Spec      14 (20) '2.0'\n+037D76 Extract OS            00 (0) 'MS-DOS'\n+037D77 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+037D79 Compression Method    0000 (0) 'Stored'\n+037D7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037D7F CRC                   00000000 (0)\n+037D83 Compressed Size       00000000 (0)\n+037D87 Uncompressed Size     00000000 (0)\n+037D8B Filename Length       0081 (129)\n+037D8D Extra Length          0009 (9)\n+037D8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37D8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037E10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037E12   Length              0005 (5)\n+037E14   Flags               01 (1) 'Modification'\n+037E15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+037E19 PAYLOAD\n+\n+03873D DATA DESCRIPTOR       08074B50 (134695760)\n+038741 CRC                   E1F88A2C (3791161900)\n+038745 Compressed Size       00000924 (2340)\n+038749 Uncompressed Size     00000924 (2340)\n+\n+03874D LOCAL HEADER #126     04034B50 (67324752)\n+038751 Extract Zip Spec      14 (20) '2.0'\n+038752 Extract OS            00 (0) 'MS-DOS'\n+038753 General Purpose Flag  0000 (0)\n+038755 Compression Method    0000 (0) 'Stored'\n+038757 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03875B CRC                   00000000 (0)\n+03875F Compressed Size       00000000 (0)\n+038763 Uncompressed Size     00000000 (0)\n+038767 Filename Length       005F (95)\n+038769 Extra Length          0009 (9)\n+03876B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3876B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0387CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0387CC   Length              0005 (5)\n+0387CE   Flags               01 (1) 'Modification'\n+0387CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0387D3 LOCAL HEADER #127     04034B50 (67324752)\n+0387D7 Extract Zip Spec      14 (20) '2.0'\n+0387D8 Extract OS            00 (0) 'MS-DOS'\n+0387D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0387DB Compression Method    0000 (0) 'Stored'\n+0387DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0387E1 CRC                   00000000 (0)\n+0387E5 Compressed Size       00000000 (0)\n+0387E9 Uncompressed Size     00000000 (0)\n+0387ED Filename Length       0075 (117)\n+0387EF Extra Length          0009 (9)\n+0387F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x387F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+038866 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+038868   Length              0005 (5)\n+03886A   Flags               01 (1) 'Modification'\n+03886B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03886F PAYLOAD\n+\n+03924F DATA DESCRIPTOR       08074B50 (134695760)\n+039253 CRC                   6A45582D (1782929453)\n+039257 Compressed Size       000009E0 (2528)\n+03925B Uncompressed Size     000009E0 (2528)\n+\n+03925F LOCAL HEADER #128     04034B50 (67324752)\n+039263 Extract Zip Spec      14 (20) '2.0'\n+039264 Extract OS            00 (0) 'MS-DOS'\n+039265 General Purpose Flag  0000 (0)\n+039267 Compression Method    0000 (0) 'Stored'\n+039269 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03926D CRC                   00000000 (0)\n+039271 Compressed Size       00000000 (0)\n+039275 Uncompressed Size     00000000 (0)\n+039279 Filename Length       0061 (97)\n+03927B Extra Length          0009 (9)\n+03927D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3927D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0392DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0392E0   Length              0005 (5)\n+0392E2   Flags               01 (1) 'Modification'\n+0392E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0392E7 LOCAL HEADER #129     04034B50 (67324752)\n+0392EB Extract Zip Spec      14 (20) '2.0'\n+0392EC Extract OS            00 (0) 'MS-DOS'\n+0392ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0392EF Compression Method    0000 (0) 'Stored'\n+0392F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0392F5 CRC                   00000000 (0)\n+0392F9 Compressed Size       00000000 (0)\n+0392FD Uncompressed Size     00000000 (0)\n+039301 Filename Length       0077 (119)\n+039303 Extra Length          0009 (9)\n+039305 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39305: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03937C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03937E   Length              0005 (5)\n+039380   Flags               01 (1) 'Modification'\n+039381   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+039385 PAYLOAD\n+\n+039F15 DATA DESCRIPTOR       08074B50 (134695760)\n+039F19 CRC                   4731534C (1194414924)\n+039F1D Compressed Size       00000B90 (2960)\n+039F21 Uncompressed Size     00000B90 (2960)\n+\n+039F25 LOCAL HEADER #130     04034B50 (67324752)\n+039F29 Extract Zip Spec      14 (20) '2.0'\n+039F2A Extract OS            00 (0) 'MS-DOS'\n+039F2B General Purpose Flag  0000 (0)\n+039F2D Compression Method    0000 (0) 'Stored'\n+039F2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+039F33 CRC                   00000000 (0)\n+039F37 Compressed Size       00000000 (0)\n+039F3B Uncompressed Size     00000000 (0)\n+039F3F Filename Length       0060 (96)\n+039F41 Extra Length          0009 (9)\n+039F43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39F43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+039FA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+039FA5   Length              0005 (5)\n+039FA7   Flags               01 (1) 'Modification'\n+039FA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+039FAC LOCAL HEADER #131     04034B50 (67324752)\n+039FB0 Extract Zip Spec      14 (20) '2.0'\n+039FB1 Extract OS            00 (0) 'MS-DOS'\n+039FB2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+039FB4 Compression Method    0000 (0) 'Stored'\n+039FB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+039FBA CRC                   00000000 (0)\n+039FBE Compressed Size       00000000 (0)\n+039FC2 Uncompressed Size     00000000 (0)\n+039FC6 Filename Length       0076 (118)\n+039FC8 Extra Length          0009 (9)\n+039FCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39FCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03A040 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03A042   Length              0005 (5)\n+03A044   Flags               01 (1) 'Modification'\n+03A045   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03A049 PAYLOAD\n+\n+03AAC6 DATA DESCRIPTOR       08074B50 (134695760)\n+03AACA CRC                   CEBA8B64 (3468331876)\n+03AACE Compressed Size       00000A7D (2685)\n+03AAD2 Uncompressed Size     00000A7D (2685)\n+\n+03AAD6 LOCAL HEADER #132     04034B50 (67324752)\n+03AADA Extract Zip Spec      14 (20) '2.0'\n+03AADB Extract OS            00 (0) 'MS-DOS'\n+03AADC General Purpose Flag  0000 (0)\n+03AADE Compression Method    0000 (0) 'Stored'\n+03AAE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AAE4 CRC                   00000000 (0)\n+03AAE8 Compressed Size       00000000 (0)\n+03AAEC Uncompressed Size     00000000 (0)\n+03AAF0 Filename Length       005F (95)\n+03AAF2 Extra Length          0009 (9)\n+03AAF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AAF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03AB53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03AB55   Length              0005 (5)\n+03AB57   Flags               01 (1) 'Modification'\n+03AB58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03AB5C LOCAL HEADER #133     04034B50 (67324752)\n+03AB60 Extract Zip Spec      14 (20) '2.0'\n+03AB61 Extract OS            00 (0) 'MS-DOS'\n+03AB62 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03AB64 Compression Method    0000 (0) 'Stored'\n+03AB66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AB6A CRC                   00000000 (0)\n+03AB6E Compressed Size       00000000 (0)\n+03AB72 Uncompressed Size     00000000 (0)\n+03AB76 Filename Length       0075 (117)\n+03AB78 Extra Length          0009 (9)\n+03AB7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AB7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03ABEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03ABF1   Length              0005 (5)\n+03ABF3   Flags               01 (1) 'Modification'\n+03ABF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03ABF8 PAYLOAD\n+\n+03B68D DATA DESCRIPTOR       08074B50 (134695760)\n+03B691 CRC                   0DACEA84 (229436036)\n+03B695 Compressed Size       00000A95 (2709)\n+03B699 Uncompressed Size     00000A95 (2709)\n+\n+03B69D LOCAL HEADER #134     04034B50 (67324752)\n+03B6A1 Extract Zip Spec      14 (20) '2.0'\n+03B6A2 Extract OS            00 (0) 'MS-DOS'\n+03B6A3 General Purpose Flag  0000 (0)\n+03B6A5 Compression Method    0000 (0) 'Stored'\n+03B6A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03B6AB CRC                   00000000 (0)\n+03B6AF Compressed Size       00000000 (0)\n+03B6B3 Uncompressed Size     00000000 (0)\n+03B6B7 Filename Length       0060 (96)\n+03B6B9 Extra Length          0009 (9)\n+03B6BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B6BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03B71B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B71D   Length              0005 (5)\n+03B71F   Flags               01 (1) 'Modification'\n+03B720   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03B724 LOCAL HEADER #135     04034B50 (67324752)\n+03B728 Extract Zip Spec      14 (20) '2.0'\n+03B729 Extract OS            00 (0) 'MS-DOS'\n+03B72A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03B72C Compression Method    0000 (0) 'Stored'\n+03B72E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03B732 CRC                   00000000 (0)\n+03B736 Compressed Size       00000000 (0)\n+03B73A Uncompressed Size     00000000 (0)\n+03B73E Filename Length       0076 (118)\n+03B740 Extra Length          0009 (9)\n+03B742 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B742: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03B7B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B7BA   Length              0005 (5)\n+03B7BC   Flags               01 (1) 'Modification'\n+03B7BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03B7C1 PAYLOAD\n+\n+03C9DE DATA DESCRIPTOR       08074B50 (134695760)\n+03C9E2 CRC                   2E84B239 (780448313)\n+03C9E6 Compressed Size       0000121D (4637)\n+03C9EA Uncompressed Size     0000121D (4637)\n+\n+03C9EE LOCAL HEADER #136     04034B50 (67324752)\n+03C9F2 Extract Zip Spec      14 (20) '2.0'\n+03C9F3 Extract OS            00 (0) 'MS-DOS'\n+03C9F4 General Purpose Flag  0000 (0)\n+03C9F6 Compression Method    0000 (0) 'Stored'\n+03C9F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C9FC CRC                   00000000 (0)\n+03CA00 Compressed Size       00000000 (0)\n+03CA04 Uncompressed Size     00000000 (0)\n+03CA08 Filename Length       007A (122)\n+03CA0A Extra Length          0009 (9)\n+03CA0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3CA0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CA86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CA88   Length              0005 (5)\n+03CA8A   Flags               01 (1) 'Modification'\n+03CA8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03CA8F LOCAL HEADER #137     04034B50 (67324752)\n+03CA93 Extract Zip Spec      14 (20) '2.0'\n+03CA94 Extract OS            00 (0) 'MS-DOS'\n+03CA95 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03CA97 Compression Method    0000 (0) 'Stored'\n+03CA99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03CA9D CRC                   00000000 (0)\n+03CAA1 Compressed Size       00000000 (0)\n+03CAA5 Uncompressed Size     00000000 (0)\n+03CAA9 Filename Length       0090 (144)\n+03CAAB Extra Length          0009 (9)\n+03CAAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3CB16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3CAAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03CBA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CBA8   Length              0005 (5)\n-03CBAA   Flags               01 (1) 'Modification'\n-03CBAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03CBAF PAYLOAD\n-\n-03D2AA DATA DESCRIPTOR       08074B50 (134695760)\n-03D2AE CRC                   10E7267F (283584127)\n-03D2B2 Compressed Size       000006FB (1787)\n-03D2B6 Uncompressed Size     000006FB (1787)\n-\n-03D2BA LOCAL HEADER #138     04034B50 (67324752)\n-03D2BE Extract Zip Spec      14 (20) '2.0'\n-03D2BF Extract OS            00 (0) 'MS-DOS'\n-03D2C0 General Purpose Flag  0000 (0)\n-03D2C2 Compression Method    0000 (0) 'Stored'\n-03D2C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D2C8 CRC                   00000000 (0)\n-03D2CC Compressed Size       00000000 (0)\n-03D2D0 Uncompressed Size     00000000 (0)\n-03D2D4 Filename Length       007B (123)\n-03D2D6 Extra Length          0009 (9)\n-03D2D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D2D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D353 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D355   Length              0005 (5)\n-03D357   Flags               01 (1) 'Modification'\n-03D358   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03D35C LOCAL HEADER #139     04034B50 (67324752)\n-03D360 Extract Zip Spec      14 (20) '2.0'\n-03D361 Extract OS            00 (0) 'MS-DOS'\n-03D362 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03D364 Compression Method    0000 (0) 'Stored'\n-03D366 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D36A CRC                   00000000 (0)\n-03D36E Compressed Size       00000000 (0)\n-03D372 Uncompressed Size     00000000 (0)\n-03D376 Filename Length       0091 (145)\n-03D378 Extra Length          0009 (9)\n-03D37A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03CB3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CB3F   Length              0005 (5)\n+03CB41   Flags               01 (1) 'Modification'\n+03CB42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03CB46 PAYLOAD\n+\n+03D241 DATA DESCRIPTOR       08074B50 (134695760)\n+03D245 CRC                   10E7267F (283584127)\n+03D249 Compressed Size       000006FB (1787)\n+03D24D Uncompressed Size     000006FB (1787)\n+\n+03D251 LOCAL HEADER #138     04034B50 (67324752)\n+03D255 Extract Zip Spec      14 (20) '2.0'\n+03D256 Extract OS            00 (0) 'MS-DOS'\n+03D257 General Purpose Flag  0000 (0)\n+03D259 Compression Method    0000 (0) 'Stored'\n+03D25B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D25F CRC                   00000000 (0)\n+03D263 Compressed Size       00000000 (0)\n+03D267 Uncompressed Size     00000000 (0)\n+03D26B Filename Length       007B (123)\n+03D26D Extra Length          0009 (9)\n+03D26F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D26F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D2EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D2EC   Length              0005 (5)\n+03D2EE   Flags               01 (1) 'Modification'\n+03D2EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03D2F3 LOCAL HEADER #139     04034B50 (67324752)\n+03D2F7 Extract Zip Spec      14 (20) '2.0'\n+03D2F8 Extract OS            00 (0) 'MS-DOS'\n+03D2F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03D2FB Compression Method    0000 (0) 'Stored'\n+03D2FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D301 CRC                   00000000 (0)\n+03D305 Compressed Size       00000000 (0)\n+03D309 Uncompressed Size     00000000 (0)\n+03D30D Filename Length       0091 (145)\n+03D30F Extra Length          0009 (9)\n+03D311 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3D37A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3D311: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03D40B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D40D   Length              0005 (5)\n-03D40F   Flags               01 (1) 'Modification'\n-03D410   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03D414 PAYLOAD\n-\n-03DB13 DATA DESCRIPTOR       08074B50 (134695760)\n-03DB17 CRC                   24E47A3B (618953275)\n-03DB1B Compressed Size       000006FF (1791)\n-03DB1F Uncompressed Size     000006FF (1791)\n-\n-03DB23 LOCAL HEADER #140     04034B50 (67324752)\n-03DB27 Extract Zip Spec      14 (20) '2.0'\n-03DB28 Extract OS            00 (0) 'MS-DOS'\n-03DB29 General Purpose Flag  0000 (0)\n-03DB2B Compression Method    0000 (0) 'Stored'\n-03DB2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03DB31 CRC                   00000000 (0)\n-03DB35 Compressed Size       00000000 (0)\n-03DB39 Uncompressed Size     00000000 (0)\n-03DB3D Filename Length       0076 (118)\n-03DB3F Extra Length          0009 (9)\n-03DB41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3DB41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03DBB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DBB9   Length              0005 (5)\n-03DBBB   Flags               01 (1) 'Modification'\n-03DBBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03DBC0 LOCAL HEADER #141     04034B50 (67324752)\n-03DBC4 Extract Zip Spec      14 (20) '2.0'\n-03DBC5 Extract OS            00 (0) 'MS-DOS'\n-03DBC6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03DBC8 Compression Method    0000 (0) 'Stored'\n-03DBCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03DBCE CRC                   00000000 (0)\n-03DBD2 Compressed Size       00000000 (0)\n-03DBD6 Uncompressed Size     00000000 (0)\n-03DBDA Filename Length       008C (140)\n-03DBDC Extra Length          0009 (9)\n-03DBDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03D3A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D3A4   Length              0005 (5)\n+03D3A6   Flags               01 (1) 'Modification'\n+03D3A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03D3AB PAYLOAD\n+\n+03DAAA DATA DESCRIPTOR       08074B50 (134695760)\n+03DAAE CRC                   24E47A3B (618953275)\n+03DAB2 Compressed Size       000006FF (1791)\n+03DAB6 Uncompressed Size     000006FF (1791)\n+\n+03DABA LOCAL HEADER #140     04034B50 (67324752)\n+03DABE Extract Zip Spec      14 (20) '2.0'\n+03DABF Extract OS            00 (0) 'MS-DOS'\n+03DAC0 General Purpose Flag  0000 (0)\n+03DAC2 Compression Method    0000 (0) 'Stored'\n+03DAC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03DAC8 CRC                   00000000 (0)\n+03DACC Compressed Size       00000000 (0)\n+03DAD0 Uncompressed Size     00000000 (0)\n+03DAD4 Filename Length       0076 (118)\n+03DAD6 Extra Length          0009 (9)\n+03DAD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3DAD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03DB4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03DB50   Length              0005 (5)\n+03DB52   Flags               01 (1) 'Modification'\n+03DB53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03DB57 LOCAL HEADER #141     04034B50 (67324752)\n+03DB5B Extract Zip Spec      14 (20) '2.0'\n+03DB5C Extract OS            00 (0) 'MS-DOS'\n+03DB5D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03DB5F Compression Method    0000 (0) 'Stored'\n+03DB61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03DB65 CRC                   00000000 (0)\n+03DB69 Compressed Size       00000000 (0)\n+03DB6D Uncompressed Size     00000000 (0)\n+03DB71 Filename Length       008C (140)\n+03DB73 Extra Length          0009 (9)\n+03DB75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0x3DBDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3DB75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03DC6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DC6C   Length              0005 (5)\n-03DC6E   Flags               01 (1) 'Modification'\n-03DC6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03DC73 PAYLOAD\n-\n-03EFD7 DATA DESCRIPTOR       08074B50 (134695760)\n-03EFDB CRC                   042BB565 (69973349)\n-03EFDF Compressed Size       00001364 (4964)\n-03EFE3 Uncompressed Size     00001364 (4964)\n-\n-03EFE7 LOCAL HEADER #142     04034B50 (67324752)\n-03EFEB Extract Zip Spec      14 (20) '2.0'\n-03EFEC Extract OS            00 (0) 'MS-DOS'\n-03EFED General Purpose Flag  0000 (0)\n-03EFEF Compression Method    0000 (0) 'Stored'\n-03EFF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03EFF5 CRC                   00000000 (0)\n-03EFF9 Compressed Size       00000000 (0)\n-03EFFD Uncompressed Size     00000000 (0)\n-03F001 Filename Length       0077 (119)\n-03F003 Extra Length          0009 (9)\n-03F005 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F005: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03F07C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03F07E   Length              0005 (5)\n-03F080   Flags               01 (1) 'Modification'\n-03F081   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03F085 LOCAL HEADER #143     04034B50 (67324752)\n-03F089 Extract Zip Spec      14 (20) '2.0'\n-03F08A Extract OS            00 (0) 'MS-DOS'\n-03F08B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03F08D Compression Method    0000 (0) 'Stored'\n-03F08F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03F093 CRC                   00000000 (0)\n-03F097 Compressed Size       00000000 (0)\n-03F09B Uncompressed Size     00000000 (0)\n-03F09F Filename Length       008D (141)\n-03F0A1 Extra Length          0009 (9)\n-03F0A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03DC01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03DC03   Length              0005 (5)\n+03DC05   Flags               01 (1) 'Modification'\n+03DC06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03DC0A PAYLOAD\n+\n+03EF6E DATA DESCRIPTOR       08074B50 (134695760)\n+03EF72 CRC                   042BB565 (69973349)\n+03EF76 Compressed Size       00001364 (4964)\n+03EF7A Uncompressed Size     00001364 (4964)\n+\n+03EF7E LOCAL HEADER #142     04034B50 (67324752)\n+03EF82 Extract Zip Spec      14 (20) '2.0'\n+03EF83 Extract OS            00 (0) 'MS-DOS'\n+03EF84 General Purpose Flag  0000 (0)\n+03EF86 Compression Method    0000 (0) 'Stored'\n+03EF88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03EF8C CRC                   00000000 (0)\n+03EF90 Compressed Size       00000000 (0)\n+03EF94 Uncompressed Size     00000000 (0)\n+03EF98 Filename Length       0077 (119)\n+03EF9A Extra Length          0009 (9)\n+03EF9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3EF9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F013 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F015   Length              0005 (5)\n+03F017   Flags               01 (1) 'Modification'\n+03F018   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03F01C LOCAL HEADER #143     04034B50 (67324752)\n+03F020 Extract Zip Spec      14 (20) '2.0'\n+03F021 Extract OS            00 (0) 'MS-DOS'\n+03F022 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03F024 Compression Method    0000 (0) 'Stored'\n+03F026 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03F02A CRC                   00000000 (0)\n+03F02E Compressed Size       00000000 (0)\n+03F032 Uncompressed Size     00000000 (0)\n+03F036 Filename Length       008D (141)\n+03F038 Extra Length          0009 (9)\n+03F03A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0x3F0A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3F03A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03F130 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03F132   Length              0005 (5)\n-03F134   Flags               01 (1) 'Modification'\n-03F135   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03F139 PAYLOAD\n-\n-0404F9 DATA DESCRIPTOR       08074B50 (134695760)\n-0404FD CRC                   7A63232B (2053317419)\n-040501 Compressed Size       000013C0 (5056)\n-040505 Uncompressed Size     000013C0 (5056)\n-\n-040509 LOCAL HEADER #144     04034B50 (67324752)\n-04050D Extract Zip Spec      14 (20) '2.0'\n-04050E Extract OS            00 (0) 'MS-DOS'\n-04050F General Purpose Flag  0000 (0)\n-040511 Compression Method    0000 (0) 'Stored'\n-040513 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040517 CRC                   00000000 (0)\n-04051B Compressed Size       00000000 (0)\n-04051F Uncompressed Size     00000000 (0)\n-040523 Filename Length       0026 (38)\n-040525 Extra Length          0009 (9)\n-040527 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40527: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04054D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04054F   Length              0005 (5)\n-040551   Flags               01 (1) 'Modification'\n-040552   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-040556 LOCAL HEADER #145     04034B50 (67324752)\n-04055A Extract Zip Spec      14 (20) '2.0'\n-04055B Extract OS            00 (0) 'MS-DOS'\n-04055C General Purpose Flag  0000 (0)\n-04055E Compression Method    0000 (0) 'Stored'\n-040560 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040564 CRC                   00000000 (0)\n-040568 Compressed Size       00000000 (0)\n-04056C Uncompressed Size     00000000 (0)\n-040570 Filename Length       002F (47)\n-040572 Extra Length          0009 (9)\n-040574 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40574: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0405A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0405A5   Length              0005 (5)\n-0405A7   Flags               01 (1) 'Modification'\n-0405A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0405AC LOCAL HEADER #146     04034B50 (67324752)\n-0405B0 Extract Zip Spec      14 (20) '2.0'\n-0405B1 Extract OS            00 (0) 'MS-DOS'\n-0405B2 General Purpose Flag  0000 (0)\n-0405B4 Compression Method    0000 (0) 'Stored'\n-0405B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0405BA CRC                   00000000 (0)\n-0405BE Compressed Size       00000000 (0)\n-0405C2 Uncompressed Size     00000000 (0)\n-0405C6 Filename Length       0060 (96)\n-0405C8 Extra Length          0009 (9)\n-0405CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x405CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04062A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04062C   Length              0005 (5)\n-04062E   Flags               01 (1) 'Modification'\n-04062F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-040633 LOCAL HEADER #147     04034B50 (67324752)\n-040637 Extract Zip Spec      14 (20) '2.0'\n-040638 Extract OS            00 (0) 'MS-DOS'\n-040639 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04063B Compression Method    0000 (0) 'Stored'\n-04063D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040641 CRC                   00000000 (0)\n-040645 Compressed Size       00000000 (0)\n-040649 Uncompressed Size     00000000 (0)\n-04064D Filename Length       0076 (118)\n-04064F Extra Length          0009 (9)\n-040651 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40651: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0406C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0406C9   Length              0005 (5)\n-0406CB   Flags               01 (1) 'Modification'\n-0406CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0406D0 PAYLOAD\n-\n-040FFE DATA DESCRIPTOR       08074B50 (134695760)\n-041002 CRC                   19888393 (428376979)\n-041006 Compressed Size       0000092E (2350)\n-04100A Uncompressed Size     0000092E (2350)\n-\n-04100E LOCAL HEADER #148     04034B50 (67324752)\n-041012 Extract Zip Spec      14 (20) '2.0'\n-041013 Extract OS            00 (0) 'MS-DOS'\n-041014 General Purpose Flag  0000 (0)\n-041016 Compression Method    0000 (0) 'Stored'\n-041018 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04101C CRC                   00000000 (0)\n-041020 Compressed Size       00000000 (0)\n-041024 Uncompressed Size     00000000 (0)\n-041028 Filename Length       0026 (38)\n-04102A Extra Length          0009 (9)\n-04102C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4102C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-041052 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-041054   Length              0005 (5)\n-041056   Flags               01 (1) 'Modification'\n-041057   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04105B LOCAL HEADER #149     04034B50 (67324752)\n-04105F Extract Zip Spec      14 (20) '2.0'\n-041060 Extract OS            00 (0) 'MS-DOS'\n-041061 General Purpose Flag  0000 (0)\n-041063 Compression Method    0000 (0) 'Stored'\n-041065 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-041069 CRC                   00000000 (0)\n-04106D Compressed Size       00000000 (0)\n-041071 Uncompressed Size     00000000 (0)\n-041075 Filename Length       002F (47)\n-041077 Extra Length          0009 (9)\n-041079 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x41079: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0410A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0410AA   Length              0005 (5)\n-0410AC   Flags               01 (1) 'Modification'\n-0410AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0410B1 LOCAL HEADER #150     04034B50 (67324752)\n-0410B5 Extract Zip Spec      14 (20) '2.0'\n-0410B6 Extract OS            00 (0) 'MS-DOS'\n-0410B7 General Purpose Flag  0000 (0)\n-0410B9 Compression Method    0000 (0) 'Stored'\n-0410BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0410BF CRC                   00000000 (0)\n-0410C3 Compressed Size       00000000 (0)\n-0410C7 Uncompressed Size     00000000 (0)\n-0410CB Filename Length       0066 (102)\n-0410CD Extra Length          0009 (9)\n-0410CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x410CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-041135 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-041137   Length              0005 (5)\n-041139   Flags               01 (1) 'Modification'\n-04113A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04113E LOCAL HEADER #151     04034B50 (67324752)\n-041142 Extract Zip Spec      14 (20) '2.0'\n-041143 Extract OS            00 (0) 'MS-DOS'\n-041144 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-041146 Compression Method    0000 (0) 'Stored'\n-041148 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04114C CRC                   00000000 (0)\n-041150 Compressed Size       00000000 (0)\n-041154 Uncompressed Size     00000000 (0)\n-041158 Filename Length       007C (124)\n-04115A Extra Length          0009 (9)\n-04115C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4115C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0411D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0411DA   Length              0005 (5)\n-0411DC   Flags               01 (1) 'Modification'\n-0411DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0411E1 PAYLOAD\n-\n-043272 DATA DESCRIPTOR       08074B50 (134695760)\n-043276 CRC                   8B1E3BB7 (2334014391)\n-04327A Compressed Size       00002091 (8337)\n-04327E Uncompressed Size     00002091 (8337)\n-\n-043282 LOCAL HEADER #152     04034B50 (67324752)\n-043286 Extract Zip Spec      14 (20) '2.0'\n-043287 Extract OS            00 (0) 'MS-DOS'\n-043288 General Purpose Flag  0000 (0)\n-04328A Compression Method    0000 (0) 'Stored'\n-04328C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-043290 CRC                   00000000 (0)\n-043294 Compressed Size       00000000 (0)\n-043298 Uncompressed Size     00000000 (0)\n-04329C Filename Length       002E (46)\n-04329E Extra Length          0009 (9)\n-0432A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x432A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0432CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0432D0   Length              0005 (5)\n-0432D2   Flags               01 (1) 'Modification'\n-0432D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0432D7 LOCAL HEADER #153     04034B50 (67324752)\n-0432DB Extract Zip Spec      14 (20) '2.0'\n-0432DC Extract OS            00 (0) 'MS-DOS'\n-0432DD General Purpose Flag  0000 (0)\n-0432DF Compression Method    0000 (0) 'Stored'\n-0432E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0432E5 CRC                   00000000 (0)\n-0432E9 Compressed Size       00000000 (0)\n-0432ED Uncompressed Size     00000000 (0)\n-0432F1 Filename Length       0037 (55)\n-0432F3 Extra Length          0009 (9)\n-0432F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x432F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04332C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04332E   Length              0005 (5)\n-043330   Flags               01 (1) 'Modification'\n-043331   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-043335 LOCAL HEADER #154     04034B50 (67324752)\n-043339 Extract Zip Spec      14 (20) '2.0'\n-04333A Extract OS            00 (0) 'MS-DOS'\n-04333B General Purpose Flag  0000 (0)\n-04333D Compression Method    0000 (0) 'Stored'\n-04333F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-043343 CRC                   00000000 (0)\n-043347 Compressed Size       00000000 (0)\n-04334B Uncompressed Size     00000000 (0)\n-04334F Filename Length       007B (123)\n-043351 Extra Length          0009 (9)\n-043353 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x43353: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0433CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0433D0   Length              0005 (5)\n-0433D2   Flags               01 (1) 'Modification'\n-0433D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0433D7 LOCAL HEADER #155     04034B50 (67324752)\n-0433DB Extract Zip Spec      14 (20) '2.0'\n-0433DC Extract OS            00 (0) 'MS-DOS'\n-0433DD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0433DF Compression Method    0000 (0) 'Stored'\n-0433E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0433E5 CRC                   00000000 (0)\n-0433E9 Compressed Size       00000000 (0)\n-0433ED Uncompressed Size     00000000 (0)\n-0433F1 Filename Length       0091 (145)\n-0433F3 Extra Length          0009 (9)\n-0433F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03F0C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F0C9   Length              0005 (5)\n+03F0CB   Flags               01 (1) 'Modification'\n+03F0CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03F0D0 PAYLOAD\n+\n+040490 DATA DESCRIPTOR       08074B50 (134695760)\n+040494 CRC                   7A63232B (2053317419)\n+040498 Compressed Size       000013C0 (5056)\n+04049C Uncompressed Size     000013C0 (5056)\n+\n+0404A0 LOCAL HEADER #144     04034B50 (67324752)\n+0404A4 Extract Zip Spec      14 (20) '2.0'\n+0404A5 Extract OS            00 (0) 'MS-DOS'\n+0404A6 General Purpose Flag  0000 (0)\n+0404A8 Compression Method    0000 (0) 'Stored'\n+0404AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0404AE CRC                   00000000 (0)\n+0404B2 Compressed Size       00000000 (0)\n+0404B6 Uncompressed Size     00000000 (0)\n+0404BA Filename Length       0026 (38)\n+0404BC Extra Length          0009 (9)\n+0404BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x404BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0404E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0404E6   Length              0005 (5)\n+0404E8   Flags               01 (1) 'Modification'\n+0404E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0404ED LOCAL HEADER #145     04034B50 (67324752)\n+0404F1 Extract Zip Spec      14 (20) '2.0'\n+0404F2 Extract OS            00 (0) 'MS-DOS'\n+0404F3 General Purpose Flag  0000 (0)\n+0404F5 Compression Method    0000 (0) 'Stored'\n+0404F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0404FB CRC                   00000000 (0)\n+0404FF Compressed Size       00000000 (0)\n+040503 Uncompressed Size     00000000 (0)\n+040507 Filename Length       002F (47)\n+040509 Extra Length          0009 (9)\n+04050B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4050B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04053A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04053C   Length              0005 (5)\n+04053E   Flags               01 (1) 'Modification'\n+04053F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+040543 LOCAL HEADER #146     04034B50 (67324752)\n+040547 Extract Zip Spec      14 (20) '2.0'\n+040548 Extract OS            00 (0) 'MS-DOS'\n+040549 General Purpose Flag  0000 (0)\n+04054B Compression Method    0000 (0) 'Stored'\n+04054D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040551 CRC                   00000000 (0)\n+040555 Compressed Size       00000000 (0)\n+040559 Uncompressed Size     00000000 (0)\n+04055D Filename Length       0060 (96)\n+04055F Extra Length          0009 (9)\n+040561 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40561: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0405C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0405C3   Length              0005 (5)\n+0405C5   Flags               01 (1) 'Modification'\n+0405C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0405CA LOCAL HEADER #147     04034B50 (67324752)\n+0405CE Extract Zip Spec      14 (20) '2.0'\n+0405CF Extract OS            00 (0) 'MS-DOS'\n+0405D0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0405D2 Compression Method    0000 (0) 'Stored'\n+0405D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0405D8 CRC                   00000000 (0)\n+0405DC Compressed Size       00000000 (0)\n+0405E0 Uncompressed Size     00000000 (0)\n+0405E4 Filename Length       0076 (118)\n+0405E6 Extra Length          0009 (9)\n+0405E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x405E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04065E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040660   Length              0005 (5)\n+040662   Flags               01 (1) 'Modification'\n+040663   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+040667 PAYLOAD\n+\n+040F95 DATA DESCRIPTOR       08074B50 (134695760)\n+040F99 CRC                   19888393 (428376979)\n+040F9D Compressed Size       0000092E (2350)\n+040FA1 Uncompressed Size     0000092E (2350)\n+\n+040FA5 LOCAL HEADER #148     04034B50 (67324752)\n+040FA9 Extract Zip Spec      14 (20) '2.0'\n+040FAA Extract OS            00 (0) 'MS-DOS'\n+040FAB General Purpose Flag  0000 (0)\n+040FAD Compression Method    0000 (0) 'Stored'\n+040FAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040FB3 CRC                   00000000 (0)\n+040FB7 Compressed Size       00000000 (0)\n+040FBB Uncompressed Size     00000000 (0)\n+040FBF Filename Length       0026 (38)\n+040FC1 Extra Length          0009 (9)\n+040FC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40FC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040FE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040FEB   Length              0005 (5)\n+040FED   Flags               01 (1) 'Modification'\n+040FEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+040FF2 LOCAL HEADER #149     04034B50 (67324752)\n+040FF6 Extract Zip Spec      14 (20) '2.0'\n+040FF7 Extract OS            00 (0) 'MS-DOS'\n+040FF8 General Purpose Flag  0000 (0)\n+040FFA Compression Method    0000 (0) 'Stored'\n+040FFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+041000 CRC                   00000000 (0)\n+041004 Compressed Size       00000000 (0)\n+041008 Uncompressed Size     00000000 (0)\n+04100C Filename Length       002F (47)\n+04100E Extra Length          0009 (9)\n+041010 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41010: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04103F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+041041   Length              0005 (5)\n+041043   Flags               01 (1) 'Modification'\n+041044   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+041048 LOCAL HEADER #150     04034B50 (67324752)\n+04104C Extract Zip Spec      14 (20) '2.0'\n+04104D Extract OS            00 (0) 'MS-DOS'\n+04104E General Purpose Flag  0000 (0)\n+041050 Compression Method    0000 (0) 'Stored'\n+041052 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+041056 CRC                   00000000 (0)\n+04105A Compressed Size       00000000 (0)\n+04105E Uncompressed Size     00000000 (0)\n+041062 Filename Length       0066 (102)\n+041064 Extra Length          0009 (9)\n+041066 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41066: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0410CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0410CE   Length              0005 (5)\n+0410D0   Flags               01 (1) 'Modification'\n+0410D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0410D5 LOCAL HEADER #151     04034B50 (67324752)\n+0410D9 Extract Zip Spec      14 (20) '2.0'\n+0410DA Extract OS            00 (0) 'MS-DOS'\n+0410DB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0410DD Compression Method    0000 (0) 'Stored'\n+0410DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0410E3 CRC                   00000000 (0)\n+0410E7 Compressed Size       00000000 (0)\n+0410EB Uncompressed Size     00000000 (0)\n+0410EF Filename Length       007C (124)\n+0410F1 Extra Length          0009 (9)\n+0410F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x410F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04116F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+041171   Length              0005 (5)\n+041173   Flags               01 (1) 'Modification'\n+041174   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+041178 PAYLOAD\n+\n+043209 DATA DESCRIPTOR       08074B50 (134695760)\n+04320D CRC                   8B1E3BB7 (2334014391)\n+043211 Compressed Size       00002091 (8337)\n+043215 Uncompressed Size     00002091 (8337)\n+\n+043219 LOCAL HEADER #152     04034B50 (67324752)\n+04321D Extract Zip Spec      14 (20) '2.0'\n+04321E Extract OS            00 (0) 'MS-DOS'\n+04321F General Purpose Flag  0000 (0)\n+043221 Compression Method    0000 (0) 'Stored'\n+043223 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+043227 CRC                   00000000 (0)\n+04322B Compressed Size       00000000 (0)\n+04322F Uncompressed Size     00000000 (0)\n+043233 Filename Length       002E (46)\n+043235 Extra Length          0009 (9)\n+043237 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43237: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+043265 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+043267   Length              0005 (5)\n+043269   Flags               01 (1) 'Modification'\n+04326A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04326E LOCAL HEADER #153     04034B50 (67324752)\n+043272 Extract Zip Spec      14 (20) '2.0'\n+043273 Extract OS            00 (0) 'MS-DOS'\n+043274 General Purpose Flag  0000 (0)\n+043276 Compression Method    0000 (0) 'Stored'\n+043278 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04327C CRC                   00000000 (0)\n+043280 Compressed Size       00000000 (0)\n+043284 Uncompressed Size     00000000 (0)\n+043288 Filename Length       0037 (55)\n+04328A Extra Length          0009 (9)\n+04328C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4328C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0432C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0432C5   Length              0005 (5)\n+0432C7   Flags               01 (1) 'Modification'\n+0432C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0432CC LOCAL HEADER #154     04034B50 (67324752)\n+0432D0 Extract Zip Spec      14 (20) '2.0'\n+0432D1 Extract OS            00 (0) 'MS-DOS'\n+0432D2 General Purpose Flag  0000 (0)\n+0432D4 Compression Method    0000 (0) 'Stored'\n+0432D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0432DA CRC                   00000000 (0)\n+0432DE Compressed Size       00000000 (0)\n+0432E2 Uncompressed Size     00000000 (0)\n+0432E6 Filename Length       007B (123)\n+0432E8 Extra Length          0009 (9)\n+0432EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x432EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+043365 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+043367   Length              0005 (5)\n+043369   Flags               01 (1) 'Modification'\n+04336A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04336E LOCAL HEADER #155     04034B50 (67324752)\n+043372 Extract Zip Spec      14 (20) '2.0'\n+043373 Extract OS            00 (0) 'MS-DOS'\n+043374 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+043376 Compression Method    0000 (0) 'Stored'\n+043378 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04337C CRC                   00000000 (0)\n+043380 Compressed Size       00000000 (0)\n+043384 Uncompressed Size     00000000 (0)\n+043388 Filename Length       0091 (145)\n+04338A Extra Length          0009 (9)\n+04338C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x433F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4338C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-043486 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-043488   Length              0005 (5)\n-04348A   Flags               01 (1) 'Modification'\n-04348B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04348F PAYLOAD\n-\n-044F0A DATA DESCRIPTOR       08074B50 (134695760)\n-044F0E CRC                   0D142FFC (219426812)\n-044F12 Compressed Size       00001A7B (6779)\n-044F16 Uncompressed Size     00001A7B (6779)\n-\n-044F1A LOCAL HEADER #156     04034B50 (67324752)\n-044F1E Extract Zip Spec      14 (20) '2.0'\n-044F1F Extract OS            00 (0) 'MS-DOS'\n-044F20 General Purpose Flag  0000 (0)\n-044F22 Compression Method    0000 (0) 'Stored'\n-044F24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044F28 CRC                   00000000 (0)\n-044F2C Compressed Size       00000000 (0)\n-044F30 Uncompressed Size     00000000 (0)\n-044F34 Filename Length       0031 (49)\n-044F36 Extra Length          0009 (9)\n-044F38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44F38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044F69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044F6B   Length              0005 (5)\n-044F6D   Flags               01 (1) 'Modification'\n-044F6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044F72 LOCAL HEADER #157     04034B50 (67324752)\n-044F76 Extract Zip Spec      14 (20) '2.0'\n-044F77 Extract OS            00 (0) 'MS-DOS'\n-044F78 General Purpose Flag  0000 (0)\n-044F7A Compression Method    0000 (0) 'Stored'\n-044F7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044F80 CRC                   00000000 (0)\n-044F84 Compressed Size       00000000 (0)\n-044F88 Uncompressed Size     00000000 (0)\n-044F8C Filename Length       003A (58)\n-044F8E Extra Length          0009 (9)\n-044F90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44F90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044FCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-044FCC   Length              0005 (5)\n-044FCE   Flags               01 (1) 'Modification'\n-044FCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044FD3 LOCAL HEADER #158     04034B50 (67324752)\n-044FD7 Extract Zip Spec      14 (20) '2.0'\n-044FD8 Extract OS            00 (0) 'MS-DOS'\n-044FD9 General Purpose Flag  0000 (0)\n-044FDB Compression Method    0000 (0) 'Stored'\n-044FDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-044FE1 CRC                   00000000 (0)\n-044FE5 Compressed Size       00000000 (0)\n-044FE9 Uncompressed Size     00000000 (0)\n-044FED Filename Length       0081 (129)\n-044FEF Extra Length          0009 (9)\n-044FF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44FF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-045072 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-045074   Length              0005 (5)\n-045076   Flags               01 (1) 'Modification'\n-045077   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04507B LOCAL HEADER #159     04034B50 (67324752)\n-04507F Extract Zip Spec      14 (20) '2.0'\n-045080 Extract OS            00 (0) 'MS-DOS'\n-045081 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-045083 Compression Method    0000 (0) 'Stored'\n-045085 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-045089 CRC                   00000000 (0)\n-04508D Compressed Size       00000000 (0)\n-045091 Uncompressed Size     00000000 (0)\n-045095 Filename Length       0097 (151)\n-045097 Extra Length          0009 (9)\n-045099 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04341D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04341F   Length              0005 (5)\n+043421   Flags               01 (1) 'Modification'\n+043422   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+043426 PAYLOAD\n+\n+044EA1 DATA DESCRIPTOR       08074B50 (134695760)\n+044EA5 CRC                   0D142FFC (219426812)\n+044EA9 Compressed Size       00001A7B (6779)\n+044EAD Uncompressed Size     00001A7B (6779)\n+\n+044EB1 LOCAL HEADER #156     04034B50 (67324752)\n+044EB5 Extract Zip Spec      14 (20) '2.0'\n+044EB6 Extract OS            00 (0) 'MS-DOS'\n+044EB7 General Purpose Flag  0000 (0)\n+044EB9 Compression Method    0000 (0) 'Stored'\n+044EBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+044EBF CRC                   00000000 (0)\n+044EC3 Compressed Size       00000000 (0)\n+044EC7 Uncompressed Size     00000000 (0)\n+044ECB Filename Length       0031 (49)\n+044ECD Extra Length          0009 (9)\n+044ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044F00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044F02   Length              0005 (5)\n+044F04   Flags               01 (1) 'Modification'\n+044F05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+044F09 LOCAL HEADER #157     04034B50 (67324752)\n+044F0D Extract Zip Spec      14 (20) '2.0'\n+044F0E Extract OS            00 (0) 'MS-DOS'\n+044F0F General Purpose Flag  0000 (0)\n+044F11 Compression Method    0000 (0) 'Stored'\n+044F13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+044F17 CRC                   00000000 (0)\n+044F1B Compressed Size       00000000 (0)\n+044F1F Uncompressed Size     00000000 (0)\n+044F23 Filename Length       003A (58)\n+044F25 Extra Length          0009 (9)\n+044F27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44F27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+044F61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044F63   Length              0005 (5)\n+044F65   Flags               01 (1) 'Modification'\n+044F66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+044F6A LOCAL HEADER #158     04034B50 (67324752)\n+044F6E Extract Zip Spec      14 (20) '2.0'\n+044F6F Extract OS            00 (0) 'MS-DOS'\n+044F70 General Purpose Flag  0000 (0)\n+044F72 Compression Method    0000 (0) 'Stored'\n+044F74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+044F78 CRC                   00000000 (0)\n+044F7C Compressed Size       00000000 (0)\n+044F80 Uncompressed Size     00000000 (0)\n+044F84 Filename Length       0081 (129)\n+044F86 Extra Length          0009 (9)\n+044F88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44F88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+045009 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04500B   Length              0005 (5)\n+04500D   Flags               01 (1) 'Modification'\n+04500E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+045012 LOCAL HEADER #159     04034B50 (67324752)\n+045016 Extract Zip Spec      14 (20) '2.0'\n+045017 Extract OS            00 (0) 'MS-DOS'\n+045018 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04501A Compression Method    0000 (0) 'Stored'\n+04501C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+045020 CRC                   00000000 (0)\n+045024 Compressed Size       00000000 (0)\n+045028 Uncompressed Size     00000000 (0)\n+04502C Filename Length       0097 (151)\n+04502E Extra Length          0009 (9)\n+045030 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x45099: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x45030: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-045130 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-045132   Length              0005 (5)\n-045134   Flags               01 (1) 'Modification'\n-045135   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-045139 PAYLOAD\n-\n-0459BF DATA DESCRIPTOR       08074B50 (134695760)\n-0459C3 CRC                   726CFBF2 (1919745010)\n-0459C7 Compressed Size       00000886 (2182)\n-0459CB Uncompressed Size     00000886 (2182)\n-\n-0459CF LOCAL HEADER #160     04034B50 (67324752)\n-0459D3 Extract Zip Spec      14 (20) '2.0'\n-0459D4 Extract OS            00 (0) 'MS-DOS'\n-0459D5 General Purpose Flag  0000 (0)\n-0459D7 Compression Method    0000 (0) 'Stored'\n-0459D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0459DD CRC                   00000000 (0)\n-0459E1 Compressed Size       00000000 (0)\n-0459E5 Uncompressed Size     00000000 (0)\n-0459E9 Filename Length       0088 (136)\n-0459EB Extra Length          0009 (9)\n-0459ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0450C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0450C9   Length              0005 (5)\n+0450CB   Flags               01 (1) 'Modification'\n+0450CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0450D0 PAYLOAD\n+\n+045956 DATA DESCRIPTOR       08074B50 (134695760)\n+04595A CRC                   726CFBF2 (1919745010)\n+04595E Compressed Size       00000886 (2182)\n+045962 Uncompressed Size     00000886 (2182)\n+\n+045966 LOCAL HEADER #160     04034B50 (67324752)\n+04596A Extract Zip Spec      14 (20) '2.0'\n+04596B Extract OS            00 (0) 'MS-DOS'\n+04596C General Purpose Flag  0000 (0)\n+04596E Compression Method    0000 (0) 'Stored'\n+045970 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+045974 CRC                   00000000 (0)\n+045978 Compressed Size       00000000 (0)\n+04597C Uncompressed Size     00000000 (0)\n+045980 Filename Length       0088 (136)\n+045982 Extra Length          0009 (9)\n+045984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x459ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x45984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-045A75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-045A77   Length              0005 (5)\n-045A79   Flags               01 (1) 'Modification'\n-045A7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-045A7E LOCAL HEADER #161     04034B50 (67324752)\n-045A82 Extract Zip Spec      14 (20) '2.0'\n-045A83 Extract OS            00 (0) 'MS-DOS'\n-045A84 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-045A86 Compression Method    0000 (0) 'Stored'\n-045A88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-045A8C CRC                   00000000 (0)\n-045A90 Compressed Size       00000000 (0)\n-045A94 Uncompressed Size     00000000 (0)\n-045A98 Filename Length       009E (158)\n-045A9A Extra Length          0009 (9)\n-045A9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+045A0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+045A0E   Length              0005 (5)\n+045A10   Flags               01 (1) 'Modification'\n+045A11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+045A15 LOCAL HEADER #161     04034B50 (67324752)\n+045A19 Extract Zip Spec      14 (20) '2.0'\n+045A1A Extract OS            00 (0) 'MS-DOS'\n+045A1B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+045A1D Compression Method    0000 (0) 'Stored'\n+045A1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+045A23 CRC                   00000000 (0)\n+045A27 Compressed Size       00000000 (0)\n+045A2B Uncompressed Size     00000000 (0)\n+045A2F Filename Length       009E (158)\n+045A31 Extra Length          0009 (9)\n+045A33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x45A9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x45A33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-045B3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-045B3C   Length              0005 (5)\n-045B3E   Flags               01 (1) 'Modification'\n-045B3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-045B43 PAYLOAD\n-\n-046BB4 DATA DESCRIPTOR       08074B50 (134695760)\n-046BB8 CRC                   0124A640 (19179072)\n-046BBC Compressed Size       00001071 (4209)\n-046BC0 Uncompressed Size     00001071 (4209)\n-\n-046BC4 LOCAL HEADER #162     04034B50 (67324752)\n-046BC8 Extract Zip Spec      14 (20) '2.0'\n-046BC9 Extract OS            00 (0) 'MS-DOS'\n-046BCA General Purpose Flag  0000 (0)\n-046BCC Compression Method    0000 (0) 'Stored'\n-046BCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046BD2 CRC                   00000000 (0)\n-046BD6 Compressed Size       00000000 (0)\n-046BDA Uncompressed Size     00000000 (0)\n-046BDE Filename Length       0088 (136)\n-046BE0 Extra Length          0009 (9)\n-046BE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+045AD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+045AD3   Length              0005 (5)\n+045AD5   Flags               01 (1) 'Modification'\n+045AD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+045ADA PAYLOAD\n+\n+046B4B DATA DESCRIPTOR       08074B50 (134695760)\n+046B4F CRC                   0124A640 (19179072)\n+046B53 Compressed Size       00001071 (4209)\n+046B57 Uncompressed Size     00001071 (4209)\n+\n+046B5B LOCAL HEADER #162     04034B50 (67324752)\n+046B5F Extract Zip Spec      14 (20) '2.0'\n+046B60 Extract OS            00 (0) 'MS-DOS'\n+046B61 General Purpose Flag  0000 (0)\n+046B63 Compression Method    0000 (0) 'Stored'\n+046B65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+046B69 CRC                   00000000 (0)\n+046B6D Compressed Size       00000000 (0)\n+046B71 Uncompressed Size     00000000 (0)\n+046B75 Filename Length       0088 (136)\n+046B77 Extra Length          0009 (9)\n+046B79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x46BE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x46B79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-046C6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046C6C   Length              0005 (5)\n-046C6E   Flags               01 (1) 'Modification'\n-046C6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-046C73 LOCAL HEADER #163     04034B50 (67324752)\n-046C77 Extract Zip Spec      14 (20) '2.0'\n-046C78 Extract OS            00 (0) 'MS-DOS'\n-046C79 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-046C7B Compression Method    0000 (0) 'Stored'\n-046C7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046C81 CRC                   00000000 (0)\n-046C85 Compressed Size       00000000 (0)\n-046C89 Uncompressed Size     00000000 (0)\n-046C8D Filename Length       009E (158)\n-046C8F Extra Length          0009 (9)\n-046C91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+046C01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+046C03   Length              0005 (5)\n+046C05   Flags               01 (1) 'Modification'\n+046C06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+046C0A LOCAL HEADER #163     04034B50 (67324752)\n+046C0E Extract Zip Spec      14 (20) '2.0'\n+046C0F Extract OS            00 (0) 'MS-DOS'\n+046C10 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+046C12 Compression Method    0000 (0) 'Stored'\n+046C14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+046C18 CRC                   00000000 (0)\n+046C1C Compressed Size       00000000 (0)\n+046C20 Uncompressed Size     00000000 (0)\n+046C24 Filename Length       009E (158)\n+046C26 Extra Length          0009 (9)\n+046C28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x46C91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x46C28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-046D2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046D31   Length              0005 (5)\n-046D33   Flags               01 (1) 'Modification'\n-046D34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-046D38 PAYLOAD\n-\n-047604 DATA DESCRIPTOR       08074B50 (134695760)\n-047608 CRC                   7E793C9C (2121874588)\n-04760C Compressed Size       000008CC (2252)\n-047610 Uncompressed Size     000008CC (2252)\n-\n-047614 LOCAL HEADER #164     04034B50 (67324752)\n-047618 Extract Zip Spec      14 (20) '2.0'\n-047619 Extract OS            00 (0) 'MS-DOS'\n-04761A General Purpose Flag  0000 (0)\n-04761C Compression Method    0000 (0) 'Stored'\n-04761E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-047622 CRC                   00000000 (0)\n-047626 Compressed Size       00000000 (0)\n-04762A Uncompressed Size     00000000 (0)\n-04762E Filename Length       0026 (38)\n-047630 Extra Length          0009 (9)\n-047632 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x47632: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-047658 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04765A   Length              0005 (5)\n-04765C   Flags               01 (1) 'Modification'\n-04765D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-047661 LOCAL HEADER #165     04034B50 (67324752)\n-047665 Extract Zip Spec      14 (20) '2.0'\n-047666 Extract OS            00 (0) 'MS-DOS'\n-047667 General Purpose Flag  0000 (0)\n-047669 Compression Method    0000 (0) 'Stored'\n-04766B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04766F CRC                   00000000 (0)\n-047673 Compressed Size       00000000 (0)\n-047677 Uncompressed Size     00000000 (0)\n-04767B Filename Length       002F (47)\n-04767D Extra Length          0009 (9)\n-04767F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4767F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0476AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0476B0   Length              0005 (5)\n-0476B2   Flags               01 (1) 'Modification'\n-0476B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0476B7 LOCAL HEADER #166     04034B50 (67324752)\n-0476BB Extract Zip Spec      14 (20) '2.0'\n-0476BC Extract OS            00 (0) 'MS-DOS'\n-0476BD General Purpose Flag  0000 (0)\n-0476BF Compression Method    0000 (0) 'Stored'\n-0476C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0476C5 CRC                   00000000 (0)\n-0476C9 Compressed Size       00000000 (0)\n-0476CD Uncompressed Size     00000000 (0)\n-0476D1 Filename Length       005D (93)\n-0476D3 Extra Length          0009 (9)\n-0476D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x476D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-047732 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-047734   Length              0005 (5)\n-047736   Flags               01 (1) 'Modification'\n-047737   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04773B LOCAL HEADER #167     04034B50 (67324752)\n-04773F Extract Zip Spec      14 (20) '2.0'\n-047740 Extract OS            00 (0) 'MS-DOS'\n-047741 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-047743 Compression Method    0000 (0) 'Stored'\n-047745 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-047749 CRC                   00000000 (0)\n-04774D Compressed Size       00000000 (0)\n-047751 Uncompressed Size     00000000 (0)\n-047755 Filename Length       0073 (115)\n-047757 Extra Length          0009 (9)\n-047759 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x47759: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0477CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0477CE   Length              0005 (5)\n-0477D0   Flags               01 (1) 'Modification'\n-0477D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0477D5 PAYLOAD\n-\n-048036 DATA DESCRIPTOR       08074B50 (134695760)\n-04803A CRC                   4C048087 (1275363463)\n-04803E Compressed Size       00000861 (2145)\n-048042 Uncompressed Size     00000861 (2145)\n-\n-048046 LOCAL HEADER #168     04034B50 (67324752)\n-04804A Extract Zip Spec      14 (20) '2.0'\n-04804B Extract OS            00 (0) 'MS-DOS'\n-04804C General Purpose Flag  0000 (0)\n-04804E Compression Method    0000 (0) 'Stored'\n-048050 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-048054 CRC                   00000000 (0)\n-048058 Compressed Size       00000000 (0)\n-04805C Uncompressed Size     00000000 (0)\n-048060 Filename Length       002D (45)\n-048062 Extra Length          0009 (9)\n-048064 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x48064: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-048091 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-048093   Length              0005 (5)\n-048095   Flags               01 (1) 'Modification'\n-048096   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04809A LOCAL HEADER #169     04034B50 (67324752)\n-04809E Extract Zip Spec      14 (20) '2.0'\n-04809F Extract OS            00 (0) 'MS-DOS'\n-0480A0 General Purpose Flag  0000 (0)\n-0480A2 Compression Method    0000 (0) 'Stored'\n-0480A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0480A8 CRC                   00000000 (0)\n-0480AC Compressed Size       00000000 (0)\n-0480B0 Uncompressed Size     00000000 (0)\n-0480B4 Filename Length       0036 (54)\n-0480B6 Extra Length          0009 (9)\n-0480B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x480B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0480EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0480F0   Length              0005 (5)\n-0480F2   Flags               01 (1) 'Modification'\n-0480F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0480F7 LOCAL HEADER #170     04034B50 (67324752)\n-0480FB Extract Zip Spec      14 (20) '2.0'\n-0480FC Extract OS            00 (0) 'MS-DOS'\n-0480FD General Purpose Flag  0000 (0)\n-0480FF Compression Method    0000 (0) 'Stored'\n-048101 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-048105 CRC                   00000000 (0)\n-048109 Compressed Size       00000000 (0)\n-04810D Uncompressed Size     00000000 (0)\n-048111 Filename Length       006A (106)\n-048113 Extra Length          0009 (9)\n-048115 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x48115: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04817F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-048181   Length              0005 (5)\n-048183   Flags               01 (1) 'Modification'\n-048184   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-048188 LOCAL HEADER #171     04034B50 (67324752)\n-04818C Extract Zip Spec      14 (20) '2.0'\n-04818D Extract OS            00 (0) 'MS-DOS'\n-04818E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-048190 Compression Method    0000 (0) 'Stored'\n-048192 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-048196 CRC                   00000000 (0)\n-04819A Compressed Size       00000000 (0)\n-04819E Uncompressed Size     00000000 (0)\n-0481A2 Filename Length       0080 (128)\n-0481A4 Extra Length          0009 (9)\n-0481A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x481A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-048226 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-048228   Length              0005 (5)\n-04822A   Flags               01 (1) 'Modification'\n-04822B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04822F PAYLOAD\n-\n-04A38D DATA DESCRIPTOR       08074B50 (134695760)\n-04A391 CRC                   877B2EE8 (2272997096)\n-04A395 Compressed Size       0000215E (8542)\n-04A399 Uncompressed Size     0000215E (8542)\n-\n-04A39D LOCAL HEADER #172     04034B50 (67324752)\n-04A3A1 Extract Zip Spec      14 (20) '2.0'\n-04A3A2 Extract OS            00 (0) 'MS-DOS'\n-04A3A3 General Purpose Flag  0000 (0)\n-04A3A5 Compression Method    0000 (0) 'Stored'\n-04A3A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A3AB CRC                   00000000 (0)\n-04A3AF Compressed Size       00000000 (0)\n-04A3B3 Uncompressed Size     00000000 (0)\n-04A3B7 Filename Length       006E (110)\n-04A3B9 Extra Length          0009 (9)\n-04A3BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A3BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A429 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A42B   Length              0005 (5)\n-04A42D   Flags               01 (1) 'Modification'\n-04A42E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04A432 LOCAL HEADER #173     04034B50 (67324752)\n-04A436 Extract Zip Spec      14 (20) '2.0'\n-04A437 Extract OS            00 (0) 'MS-DOS'\n-04A438 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04A43A Compression Method    0000 (0) 'Stored'\n-04A43C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A440 CRC                   00000000 (0)\n-04A444 Compressed Size       00000000 (0)\n-04A448 Uncompressed Size     00000000 (0)\n-04A44C Filename Length       0084 (132)\n-04A44E Extra Length          0009 (9)\n-04A450 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+046CC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+046CC8   Length              0005 (5)\n+046CCA   Flags               01 (1) 'Modification'\n+046CCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+046CCF PAYLOAD\n+\n+04759B DATA DESCRIPTOR       08074B50 (134695760)\n+04759F CRC                   7E793C9C (2121874588)\n+0475A3 Compressed Size       000008CC (2252)\n+0475A7 Uncompressed Size     000008CC (2252)\n+\n+0475AB LOCAL HEADER #164     04034B50 (67324752)\n+0475AF Extract Zip Spec      14 (20) '2.0'\n+0475B0 Extract OS            00 (0) 'MS-DOS'\n+0475B1 General Purpose Flag  0000 (0)\n+0475B3 Compression Method    0000 (0) 'Stored'\n+0475B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0475B9 CRC                   00000000 (0)\n+0475BD Compressed Size       00000000 (0)\n+0475C1 Uncompressed Size     00000000 (0)\n+0475C5 Filename Length       0026 (38)\n+0475C7 Extra Length          0009 (9)\n+0475C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x475C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0475EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0475F1   Length              0005 (5)\n+0475F3   Flags               01 (1) 'Modification'\n+0475F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0475F8 LOCAL HEADER #165     04034B50 (67324752)\n+0475FC Extract Zip Spec      14 (20) '2.0'\n+0475FD Extract OS            00 (0) 'MS-DOS'\n+0475FE General Purpose Flag  0000 (0)\n+047600 Compression Method    0000 (0) 'Stored'\n+047602 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047606 CRC                   00000000 (0)\n+04760A Compressed Size       00000000 (0)\n+04760E Uncompressed Size     00000000 (0)\n+047612 Filename Length       002F (47)\n+047614 Extra Length          0009 (9)\n+047616 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47616: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047645 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047647   Length              0005 (5)\n+047649   Flags               01 (1) 'Modification'\n+04764A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04764E LOCAL HEADER #166     04034B50 (67324752)\n+047652 Extract Zip Spec      14 (20) '2.0'\n+047653 Extract OS            00 (0) 'MS-DOS'\n+047654 General Purpose Flag  0000 (0)\n+047656 Compression Method    0000 (0) 'Stored'\n+047658 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04765C CRC                   00000000 (0)\n+047660 Compressed Size       00000000 (0)\n+047664 Uncompressed Size     00000000 (0)\n+047668 Filename Length       005D (93)\n+04766A Extra Length          0009 (9)\n+04766C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4766C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0476C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0476CB   Length              0005 (5)\n+0476CD   Flags               01 (1) 'Modification'\n+0476CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0476D2 LOCAL HEADER #167     04034B50 (67324752)\n+0476D6 Extract Zip Spec      14 (20) '2.0'\n+0476D7 Extract OS            00 (0) 'MS-DOS'\n+0476D8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0476DA Compression Method    0000 (0) 'Stored'\n+0476DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0476E0 CRC                   00000000 (0)\n+0476E4 Compressed Size       00000000 (0)\n+0476E8 Uncompressed Size     00000000 (0)\n+0476EC Filename Length       0073 (115)\n+0476EE Extra Length          0009 (9)\n+0476F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x476F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047763 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047765   Length              0005 (5)\n+047767   Flags               01 (1) 'Modification'\n+047768   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04776C PAYLOAD\n+\n+047FCD DATA DESCRIPTOR       08074B50 (134695760)\n+047FD1 CRC                   4C048087 (1275363463)\n+047FD5 Compressed Size       00000861 (2145)\n+047FD9 Uncompressed Size     00000861 (2145)\n+\n+047FDD LOCAL HEADER #168     04034B50 (67324752)\n+047FE1 Extract Zip Spec      14 (20) '2.0'\n+047FE2 Extract OS            00 (0) 'MS-DOS'\n+047FE3 General Purpose Flag  0000 (0)\n+047FE5 Compression Method    0000 (0) 'Stored'\n+047FE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047FEB CRC                   00000000 (0)\n+047FEF Compressed Size       00000000 (0)\n+047FF3 Uncompressed Size     00000000 (0)\n+047FF7 Filename Length       002D (45)\n+047FF9 Extra Length          0009 (9)\n+047FFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47FFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+048028 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04802A   Length              0005 (5)\n+04802C   Flags               01 (1) 'Modification'\n+04802D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+048031 LOCAL HEADER #169     04034B50 (67324752)\n+048035 Extract Zip Spec      14 (20) '2.0'\n+048036 Extract OS            00 (0) 'MS-DOS'\n+048037 General Purpose Flag  0000 (0)\n+048039 Compression Method    0000 (0) 'Stored'\n+04803B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04803F CRC                   00000000 (0)\n+048043 Compressed Size       00000000 (0)\n+048047 Uncompressed Size     00000000 (0)\n+04804B Filename Length       0036 (54)\n+04804D Extra Length          0009 (9)\n+04804F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4804F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+048085 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048087   Length              0005 (5)\n+048089   Flags               01 (1) 'Modification'\n+04808A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04808E LOCAL HEADER #170     04034B50 (67324752)\n+048092 Extract Zip Spec      14 (20) '2.0'\n+048093 Extract OS            00 (0) 'MS-DOS'\n+048094 General Purpose Flag  0000 (0)\n+048096 Compression Method    0000 (0) 'Stored'\n+048098 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04809C CRC                   00000000 (0)\n+0480A0 Compressed Size       00000000 (0)\n+0480A4 Uncompressed Size     00000000 (0)\n+0480A8 Filename Length       006A (106)\n+0480AA Extra Length          0009 (9)\n+0480AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x480AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+048116 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048118   Length              0005 (5)\n+04811A   Flags               01 (1) 'Modification'\n+04811B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04811F LOCAL HEADER #171     04034B50 (67324752)\n+048123 Extract Zip Spec      14 (20) '2.0'\n+048124 Extract OS            00 (0) 'MS-DOS'\n+048125 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+048127 Compression Method    0000 (0) 'Stored'\n+048129 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04812D CRC                   00000000 (0)\n+048131 Compressed Size       00000000 (0)\n+048135 Uncompressed Size     00000000 (0)\n+048139 Filename Length       0080 (128)\n+04813B Extra Length          0009 (9)\n+04813D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4813D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0481BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0481BF   Length              0005 (5)\n+0481C1   Flags               01 (1) 'Modification'\n+0481C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0481C6 PAYLOAD\n+\n+04A324 DATA DESCRIPTOR       08074B50 (134695760)\n+04A328 CRC                   877B2EE8 (2272997096)\n+04A32C Compressed Size       0000215E (8542)\n+04A330 Uncompressed Size     0000215E (8542)\n+\n+04A334 LOCAL HEADER #172     04034B50 (67324752)\n+04A338 Extract Zip Spec      14 (20) '2.0'\n+04A339 Extract OS            00 (0) 'MS-DOS'\n+04A33A General Purpose Flag  0000 (0)\n+04A33C Compression Method    0000 (0) 'Stored'\n+04A33E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A342 CRC                   00000000 (0)\n+04A346 Compressed Size       00000000 (0)\n+04A34A Uncompressed Size     00000000 (0)\n+04A34E Filename Length       006E (110)\n+04A350 Extra Length          0009 (9)\n+04A352 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4A352: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04A3C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A3C2   Length              0005 (5)\n+04A3C4   Flags               01 (1) 'Modification'\n+04A3C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04A3C9 LOCAL HEADER #173     04034B50 (67324752)\n+04A3CD Extract Zip Spec      14 (20) '2.0'\n+04A3CE Extract OS            00 (0) 'MS-DOS'\n+04A3CF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04A3D1 Compression Method    0000 (0) 'Stored'\n+04A3D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A3D7 CRC                   00000000 (0)\n+04A3DB Compressed Size       00000000 (0)\n+04A3DF Uncompressed Size     00000000 (0)\n+04A3E3 Filename Length       0084 (132)\n+04A3E5 Extra Length          0009 (9)\n+04A3E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x4A450: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4A3E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04A4D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A4D6   Length              0005 (5)\n-04A4D8   Flags               01 (1) 'Modification'\n-04A4D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04A4DD PAYLOAD\n-\n-04B95C DATA DESCRIPTOR       08074B50 (134695760)\n-04B960 CRC                   E43D22D5 (3829211861)\n-04B964 Compressed Size       0000147F (5247)\n-04B968 Uncompressed Size     0000147F (5247)\n-\n-04B96C LOCAL HEADER #174     04034B50 (67324752)\n-04B970 Extract Zip Spec      14 (20) '2.0'\n-04B971 Extract OS            00 (0) 'MS-DOS'\n-04B972 General Purpose Flag  0000 (0)\n-04B974 Compression Method    0000 (0) 'Stored'\n-04B976 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04B97A CRC                   00000000 (0)\n-04B97E Compressed Size       00000000 (0)\n-04B982 Uncompressed Size     00000000 (0)\n-04B986 Filename Length       0060 (96)\n-04B988 Extra Length          0009 (9)\n-04B98A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B98A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04B9EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04B9EC   Length              0005 (5)\n-04B9EE   Flags               01 (1) 'Modification'\n-04B9EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04B9F3 LOCAL HEADER #175     04034B50 (67324752)\n-04B9F7 Extract Zip Spec      14 (20) '2.0'\n-04B9F8 Extract OS            00 (0) 'MS-DOS'\n-04B9F9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04B9FB Compression Method    0000 (0) 'Stored'\n-04B9FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BA01 CRC                   00000000 (0)\n-04BA05 Compressed Size       00000000 (0)\n-04BA09 Uncompressed Size     00000000 (0)\n-04BA0D Filename Length       0076 (118)\n-04BA0F Extra Length          0009 (9)\n-04BA11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BA11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04BA87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BA89   Length              0005 (5)\n-04BA8B   Flags               01 (1) 'Modification'\n-04BA8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04BA90 PAYLOAD\n-\n-04CAF0 DATA DESCRIPTOR       08074B50 (134695760)\n-04CAF4 CRC                   D765846F (3613754479)\n-04CAF8 Compressed Size       00001060 (4192)\n-04CAFC Uncompressed Size     00001060 (4192)\n-\n-04CB00 LOCAL HEADER #176     04034B50 (67324752)\n-04CB04 Extract Zip Spec      14 (20) '2.0'\n-04CB05 Extract OS            00 (0) 'MS-DOS'\n-04CB06 General Purpose Flag  0000 (0)\n-04CB08 Compression Method    0000 (0) 'Stored'\n-04CB0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04CB0E CRC                   00000000 (0)\n-04CB12 Compressed Size       00000000 (0)\n-04CB16 Uncompressed Size     00000000 (0)\n-04CB1A Filename Length       0060 (96)\n-04CB1C Extra Length          0009 (9)\n-04CB1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4CB1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04CB7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04CB80   Length              0005 (5)\n-04CB82   Flags               01 (1) 'Modification'\n-04CB83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04CB87 LOCAL HEADER #177     04034B50 (67324752)\n-04CB8B Extract Zip Spec      14 (20) '2.0'\n-04CB8C Extract OS            00 (0) 'MS-DOS'\n-04CB8D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04CB8F Compression Method    0000 (0) 'Stored'\n-04CB91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04CB95 CRC                   00000000 (0)\n-04CB99 Compressed Size       00000000 (0)\n-04CB9D Uncompressed Size     00000000 (0)\n-04CBA1 Filename Length       0076 (118)\n-04CBA3 Extra Length          0009 (9)\n-04CBA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4CBA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04CC1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04CC1D   Length              0005 (5)\n-04CC1F   Flags               01 (1) 'Modification'\n-04CC20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04CC24 PAYLOAD\n-\n-04DD80 DATA DESCRIPTOR       08074B50 (134695760)\n-04DD84 CRC                   57E394F3 (1474532595)\n-04DD88 Compressed Size       0000115C (4444)\n-04DD8C Uncompressed Size     0000115C (4444)\n-\n-04DD90 LOCAL HEADER #178     04034B50 (67324752)\n-04DD94 Extract Zip Spec      14 (20) '2.0'\n-04DD95 Extract OS            00 (0) 'MS-DOS'\n-04DD96 General Purpose Flag  0000 (0)\n-04DD98 Compression Method    0000 (0) 'Stored'\n-04DD9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04DD9E CRC                   00000000 (0)\n-04DDA2 Compressed Size       00000000 (0)\n-04DDA6 Uncompressed Size     00000000 (0)\n-04DDAA Filename Length       0023 (35)\n-04DDAC Extra Length          0009 (9)\n-04DDAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4DDAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04DDD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04DDD3   Length              0005 (5)\n-04DDD5   Flags               01 (1) 'Modification'\n-04DDD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04DDDA LOCAL HEADER #179     04034B50 (67324752)\n-04DDDE Extract Zip Spec      14 (20) '2.0'\n-04DDDF Extract OS            00 (0) 'MS-DOS'\n-04DDE0 General Purpose Flag  0000 (0)\n-04DDE2 Compression Method    0000 (0) 'Stored'\n-04DDE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04DDE8 CRC                   00000000 (0)\n-04DDEC Compressed Size       00000000 (0)\n-04DDF0 Uncompressed Size     00000000 (0)\n-04DDF4 Filename Length       002C (44)\n-04DDF6 Extra Length          0009 (9)\n-04DDF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4DDF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04DE24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04DE26   Length              0005 (5)\n-04DE28   Flags               01 (1) 'Modification'\n-04DE29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04DE2D LOCAL HEADER #180     04034B50 (67324752)\n-04DE31 Extract Zip Spec      14 (20) '2.0'\n-04DE32 Extract OS            00 (0) 'MS-DOS'\n-04DE33 General Purpose Flag  0000 (0)\n-04DE35 Compression Method    0000 (0) 'Stored'\n-04DE37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04DE3B CRC                   00000000 (0)\n-04DE3F Compressed Size       00000000 (0)\n-04DE43 Uncompressed Size     00000000 (0)\n-04DE47 Filename Length       005E (94)\n-04DE49 Extra Length          0009 (9)\n-04DE4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4DE4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04DEA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04DEAB   Length              0005 (5)\n-04DEAD   Flags               01 (1) 'Modification'\n-04DEAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04DEB2 LOCAL HEADER #181     04034B50 (67324752)\n-04DEB6 Extract Zip Spec      14 (20) '2.0'\n-04DEB7 Extract OS            00 (0) 'MS-DOS'\n-04DEB8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04DEBA Compression Method    0000 (0) 'Stored'\n-04DEBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04DEC0 CRC                   00000000 (0)\n-04DEC4 Compressed Size       00000000 (0)\n-04DEC8 Uncompressed Size     00000000 (0)\n-04DECC Filename Length       0074 (116)\n-04DECE Extra Length          0009 (9)\n-04DED0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4DED0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04DF44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04DF46   Length              0005 (5)\n-04DF48   Flags               01 (1) 'Modification'\n-04DF49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04DF4D PAYLOAD\n-\n-04E754 DATA DESCRIPTOR       08074B50 (134695760)\n-04E758 CRC                   990AFEE4 (2567634660)\n-04E75C Compressed Size       00000807 (2055)\n-04E760 Uncompressed Size     00000807 (2055)\n-\n-04E764 LOCAL HEADER #182     04034B50 (67324752)\n-04E768 Extract Zip Spec      14 (20) '2.0'\n-04E769 Extract OS            00 (0) 'MS-DOS'\n-04E76A General Purpose Flag  0000 (0)\n-04E76C Compression Method    0000 (0) 'Stored'\n-04E76E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E772 CRC                   00000000 (0)\n-04E776 Compressed Size       00000000 (0)\n-04E77A Uncompressed Size     00000000 (0)\n-04E77E Filename Length       0028 (40)\n-04E780 Extra Length          0009 (9)\n-04E782 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4E782: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04E7AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E7AC   Length              0005 (5)\n-04E7AE   Flags               01 (1) 'Modification'\n-04E7AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04E7B3 LOCAL HEADER #183     04034B50 (67324752)\n-04E7B7 Extract Zip Spec      14 (20) '2.0'\n-04E7B8 Extract OS            00 (0) 'MS-DOS'\n-04E7B9 General Purpose Flag  0000 (0)\n-04E7BB Compression Method    0000 (0) 'Stored'\n-04E7BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E7C1 CRC                   00000000 (0)\n-04E7C5 Compressed Size       00000000 (0)\n-04E7C9 Uncompressed Size     00000000 (0)\n-04E7CD Filename Length       0031 (49)\n-04E7CF Extra Length          0009 (9)\n-04E7D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4E7D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04E802 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E804   Length              0005 (5)\n-04E806   Flags               01 (1) 'Modification'\n-04E807   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04E80B LOCAL HEADER #184     04034B50 (67324752)\n-04E80F Extract Zip Spec      14 (20) '2.0'\n-04E810 Extract OS            00 (0) 'MS-DOS'\n-04E811 General Purpose Flag  0000 (0)\n-04E813 Compression Method    0000 (0) 'Stored'\n-04E815 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E819 CRC                   00000000 (0)\n-04E81D Compressed Size       00000000 (0)\n-04E821 Uncompressed Size     00000000 (0)\n-04E825 Filename Length       0070 (112)\n-04E827 Extra Length          0009 (9)\n-04E829 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4E829: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04E899 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E89B   Length              0005 (5)\n-04E89D   Flags               01 (1) 'Modification'\n-04E89E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04E8A2 LOCAL HEADER #185     04034B50 (67324752)\n-04E8A6 Extract Zip Spec      14 (20) '2.0'\n-04E8A7 Extract OS            00 (0) 'MS-DOS'\n-04E8A8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04E8AA Compression Method    0000 (0) 'Stored'\n-04E8AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E8B0 CRC                   00000000 (0)\n-04E8B4 Compressed Size       00000000 (0)\n-04E8B8 Uncompressed Size     00000000 (0)\n-04E8BC Filename Length       0086 (134)\n-04E8BE Extra Length          0009 (9)\n-04E8C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04A46B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A46D   Length              0005 (5)\n+04A46F   Flags               01 (1) 'Modification'\n+04A470   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04A474 PAYLOAD\n+\n+04B8F3 DATA DESCRIPTOR       08074B50 (134695760)\n+04B8F7 CRC                   E43D22D5 (3829211861)\n+04B8FB Compressed Size       0000147F (5247)\n+04B8FF Uncompressed Size     0000147F (5247)\n+\n+04B903 LOCAL HEADER #174     04034B50 (67324752)\n+04B907 Extract Zip Spec      14 (20) '2.0'\n+04B908 Extract OS            00 (0) 'MS-DOS'\n+04B909 General Purpose Flag  0000 (0)\n+04B90B Compression Method    0000 (0) 'Stored'\n+04B90D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B911 CRC                   00000000 (0)\n+04B915 Compressed Size       00000000 (0)\n+04B919 Uncompressed Size     00000000 (0)\n+04B91D Filename Length       0060 (96)\n+04B91F Extra Length          0009 (9)\n+04B921 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B921: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B981 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B983   Length              0005 (5)\n+04B985   Flags               01 (1) 'Modification'\n+04B986   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04B98A LOCAL HEADER #175     04034B50 (67324752)\n+04B98E Extract Zip Spec      14 (20) '2.0'\n+04B98F Extract OS            00 (0) 'MS-DOS'\n+04B990 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04B992 Compression Method    0000 (0) 'Stored'\n+04B994 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B998 CRC                   00000000 (0)\n+04B99C Compressed Size       00000000 (0)\n+04B9A0 Uncompressed Size     00000000 (0)\n+04B9A4 Filename Length       0076 (118)\n+04B9A6 Extra Length          0009 (9)\n+04B9A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B9A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04BA1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04BA20   Length              0005 (5)\n+04BA22   Flags               01 (1) 'Modification'\n+04BA23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04BA27 PAYLOAD\n+\n+04CA87 DATA DESCRIPTOR       08074B50 (134695760)\n+04CA8B CRC                   D765846F (3613754479)\n+04CA8F Compressed Size       00001060 (4192)\n+04CA93 Uncompressed Size     00001060 (4192)\n+\n+04CA97 LOCAL HEADER #176     04034B50 (67324752)\n+04CA9B Extract Zip Spec      14 (20) '2.0'\n+04CA9C Extract OS            00 (0) 'MS-DOS'\n+04CA9D General Purpose Flag  0000 (0)\n+04CA9F Compression Method    0000 (0) 'Stored'\n+04CAA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04CAA5 CRC                   00000000 (0)\n+04CAA9 Compressed Size       00000000 (0)\n+04CAAD Uncompressed Size     00000000 (0)\n+04CAB1 Filename Length       0060 (96)\n+04CAB3 Extra Length          0009 (9)\n+04CAB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4CAB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04CB15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04CB17   Length              0005 (5)\n+04CB19   Flags               01 (1) 'Modification'\n+04CB1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04CB1E LOCAL HEADER #177     04034B50 (67324752)\n+04CB22 Extract Zip Spec      14 (20) '2.0'\n+04CB23 Extract OS            00 (0) 'MS-DOS'\n+04CB24 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04CB26 Compression Method    0000 (0) 'Stored'\n+04CB28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04CB2C CRC                   00000000 (0)\n+04CB30 Compressed Size       00000000 (0)\n+04CB34 Uncompressed Size     00000000 (0)\n+04CB38 Filename Length       0076 (118)\n+04CB3A Extra Length          0009 (9)\n+04CB3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4CB3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04CBB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04CBB4   Length              0005 (5)\n+04CBB6   Flags               01 (1) 'Modification'\n+04CBB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04CBBB PAYLOAD\n+\n+04DD17 DATA DESCRIPTOR       08074B50 (134695760)\n+04DD1B CRC                   57E394F3 (1474532595)\n+04DD1F Compressed Size       0000115C (4444)\n+04DD23 Uncompressed Size     0000115C (4444)\n+\n+04DD27 LOCAL HEADER #178     04034B50 (67324752)\n+04DD2B Extract Zip Spec      14 (20) '2.0'\n+04DD2C Extract OS            00 (0) 'MS-DOS'\n+04DD2D General Purpose Flag  0000 (0)\n+04DD2F Compression Method    0000 (0) 'Stored'\n+04DD31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04DD35 CRC                   00000000 (0)\n+04DD39 Compressed Size       00000000 (0)\n+04DD3D Uncompressed Size     00000000 (0)\n+04DD41 Filename Length       0023 (35)\n+04DD43 Extra Length          0009 (9)\n+04DD45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4DD45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04DD68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04DD6A   Length              0005 (5)\n+04DD6C   Flags               01 (1) 'Modification'\n+04DD6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04DD71 LOCAL HEADER #179     04034B50 (67324752)\n+04DD75 Extract Zip Spec      14 (20) '2.0'\n+04DD76 Extract OS            00 (0) 'MS-DOS'\n+04DD77 General Purpose Flag  0000 (0)\n+04DD79 Compression Method    0000 (0) 'Stored'\n+04DD7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04DD7F CRC                   00000000 (0)\n+04DD83 Compressed Size       00000000 (0)\n+04DD87 Uncompressed Size     00000000 (0)\n+04DD8B Filename Length       002C (44)\n+04DD8D Extra Length          0009 (9)\n+04DD8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4DD8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04DDBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04DDBD   Length              0005 (5)\n+04DDBF   Flags               01 (1) 'Modification'\n+04DDC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04DDC4 LOCAL HEADER #180     04034B50 (67324752)\n+04DDC8 Extract Zip Spec      14 (20) '2.0'\n+04DDC9 Extract OS            00 (0) 'MS-DOS'\n+04DDCA General Purpose Flag  0000 (0)\n+04DDCC Compression Method    0000 (0) 'Stored'\n+04DDCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04DDD2 CRC                   00000000 (0)\n+04DDD6 Compressed Size       00000000 (0)\n+04DDDA Uncompressed Size     00000000 (0)\n+04DDDE Filename Length       005E (94)\n+04DDE0 Extra Length          0009 (9)\n+04DDE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4DDE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04DE40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04DE42   Length              0005 (5)\n+04DE44   Flags               01 (1) 'Modification'\n+04DE45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04DE49 LOCAL HEADER #181     04034B50 (67324752)\n+04DE4D Extract Zip Spec      14 (20) '2.0'\n+04DE4E Extract OS            00 (0) 'MS-DOS'\n+04DE4F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04DE51 Compression Method    0000 (0) 'Stored'\n+04DE53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04DE57 CRC                   00000000 (0)\n+04DE5B Compressed Size       00000000 (0)\n+04DE5F Uncompressed Size     00000000 (0)\n+04DE63 Filename Length       0074 (116)\n+04DE65 Extra Length          0009 (9)\n+04DE67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4DE67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04DEDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04DEDD   Length              0005 (5)\n+04DEDF   Flags               01 (1) 'Modification'\n+04DEE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04DEE4 PAYLOAD\n+\n+04E6EB DATA DESCRIPTOR       08074B50 (134695760)\n+04E6EF CRC                   990AFEE4 (2567634660)\n+04E6F3 Compressed Size       00000807 (2055)\n+04E6F7 Uncompressed Size     00000807 (2055)\n+\n+04E6FB LOCAL HEADER #182     04034B50 (67324752)\n+04E6FF Extract Zip Spec      14 (20) '2.0'\n+04E700 Extract OS            00 (0) 'MS-DOS'\n+04E701 General Purpose Flag  0000 (0)\n+04E703 Compression Method    0000 (0) 'Stored'\n+04E705 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E709 CRC                   00000000 (0)\n+04E70D Compressed Size       00000000 (0)\n+04E711 Uncompressed Size     00000000 (0)\n+04E715 Filename Length       0028 (40)\n+04E717 Extra Length          0009 (9)\n+04E719 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E719: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E741 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E743   Length              0005 (5)\n+04E745   Flags               01 (1) 'Modification'\n+04E746   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04E74A LOCAL HEADER #183     04034B50 (67324752)\n+04E74E Extract Zip Spec      14 (20) '2.0'\n+04E74F Extract OS            00 (0) 'MS-DOS'\n+04E750 General Purpose Flag  0000 (0)\n+04E752 Compression Method    0000 (0) 'Stored'\n+04E754 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E758 CRC                   00000000 (0)\n+04E75C Compressed Size       00000000 (0)\n+04E760 Uncompressed Size     00000000 (0)\n+04E764 Filename Length       0031 (49)\n+04E766 Extra Length          0009 (9)\n+04E768 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E768: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E799 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E79B   Length              0005 (5)\n+04E79D   Flags               01 (1) 'Modification'\n+04E79E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04E7A2 LOCAL HEADER #184     04034B50 (67324752)\n+04E7A6 Extract Zip Spec      14 (20) '2.0'\n+04E7A7 Extract OS            00 (0) 'MS-DOS'\n+04E7A8 General Purpose Flag  0000 (0)\n+04E7AA Compression Method    0000 (0) 'Stored'\n+04E7AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E7B0 CRC                   00000000 (0)\n+04E7B4 Compressed Size       00000000 (0)\n+04E7B8 Uncompressed Size     00000000 (0)\n+04E7BC Filename Length       0070 (112)\n+04E7BE Extra Length          0009 (9)\n+04E7C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E7C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E830 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E832   Length              0005 (5)\n+04E834   Flags               01 (1) 'Modification'\n+04E835   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04E839 LOCAL HEADER #185     04034B50 (67324752)\n+04E83D Extract Zip Spec      14 (20) '2.0'\n+04E83E Extract OS            00 (0) 'MS-DOS'\n+04E83F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04E841 Compression Method    0000 (0) 'Stored'\n+04E843 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E847 CRC                   00000000 (0)\n+04E84B Compressed Size       00000000 (0)\n+04E84F Uncompressed Size     00000000 (0)\n+04E853 Filename Length       0086 (134)\n+04E855 Extra Length          0009 (9)\n+04E857 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x4E8C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4E857: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04E946 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E948   Length              0005 (5)\n-04E94A   Flags               01 (1) 'Modification'\n-04E94B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04E94F PAYLOAD\n-\n-053A52 DATA DESCRIPTOR       08074B50 (134695760)\n-053A56 CRC                   F6367964 (4130765156)\n-053A5A Compressed Size       00005103 (20739)\n-053A5E Uncompressed Size     00005103 (20739)\n-\n-053A62 LOCAL HEADER #186     04034B50 (67324752)\n-053A66 Extract Zip Spec      14 (20) '2.0'\n-053A67 Extract OS            00 (0) 'MS-DOS'\n-053A68 General Purpose Flag  0000 (0)\n-053A6A Compression Method    0000 (0) 'Stored'\n-053A6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053A70 CRC                   00000000 (0)\n-053A74 Compressed Size       00000000 (0)\n-053A78 Uncompressed Size     00000000 (0)\n-053A7C Filename Length       006A (106)\n-053A7E Extra Length          0009 (9)\n-053A80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053AEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053AEC   Length              0005 (5)\n-053AEE   Flags               01 (1) 'Modification'\n-053AEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-053AF3 LOCAL HEADER #187     04034B50 (67324752)\n-053AF7 Extract Zip Spec      14 (20) '2.0'\n-053AF8 Extract OS            00 (0) 'MS-DOS'\n-053AF9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-053AFB Compression Method    0000 (0) 'Stored'\n-053AFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053B01 CRC                   00000000 (0)\n-053B05 Compressed Size       00000000 (0)\n-053B09 Uncompressed Size     00000000 (0)\n-053B0D Filename Length       0080 (128)\n-053B0F Extra Length          0009 (9)\n-053B11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053B91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053B93   Length              0005 (5)\n-053B95   Flags               01 (1) 'Modification'\n-053B96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-053B9A PAYLOAD\n-\n-057953 DATA DESCRIPTOR       08074B50 (134695760)\n-057957 CRC                   9EC902FD (2663973629)\n-05795B Compressed Size       00003DB9 (15801)\n-05795F Uncompressed Size     00003DB9 (15801)\n-\n-057963 LOCAL HEADER #188     04034B50 (67324752)\n-057967 Extract Zip Spec      14 (20) '2.0'\n-057968 Extract OS            00 (0) 'MS-DOS'\n-057969 General Purpose Flag  0000 (0)\n-05796B Compression Method    0000 (0) 'Stored'\n-05796D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057971 CRC                   00000000 (0)\n-057975 Compressed Size       00000000 (0)\n-057979 Uncompressed Size     00000000 (0)\n-05797D Filename Length       0070 (112)\n-05797F Extra Length          0009 (9)\n-057981 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x57981: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0579F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0579F3   Length              0005 (5)\n-0579F5   Flags               01 (1) 'Modification'\n-0579F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0579FA LOCAL HEADER #189     04034B50 (67324752)\n-0579FE Extract Zip Spec      14 (20) '2.0'\n-0579FF Extract OS            00 (0) 'MS-DOS'\n-057A00 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-057A02 Compression Method    0000 (0) 'Stored'\n-057A04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057A08 CRC                   00000000 (0)\n-057A0C Compressed Size       00000000 (0)\n-057A10 Uncompressed Size     00000000 (0)\n-057A14 Filename Length       0086 (134)\n-057A16 Extra Length          0009 (9)\n-057A18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04E8DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E8DF   Length              0005 (5)\n+04E8E1   Flags               01 (1) 'Modification'\n+04E8E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04E8E6 PAYLOAD\n+\n+0539E9 DATA DESCRIPTOR       08074B50 (134695760)\n+0539ED CRC                   F6367964 (4130765156)\n+0539F1 Compressed Size       00005103 (20739)\n+0539F5 Uncompressed Size     00005103 (20739)\n+\n+0539F9 LOCAL HEADER #186     04034B50 (67324752)\n+0539FD Extract Zip Spec      14 (20) '2.0'\n+0539FE Extract OS            00 (0) 'MS-DOS'\n+0539FF General Purpose Flag  0000 (0)\n+053A01 Compression Method    0000 (0) 'Stored'\n+053A03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+053A07 CRC                   00000000 (0)\n+053A0B Compressed Size       00000000 (0)\n+053A0F Uncompressed Size     00000000 (0)\n+053A13 Filename Length       006A (106)\n+053A15 Extra Length          0009 (9)\n+053A17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+053A81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+053A83   Length              0005 (5)\n+053A85   Flags               01 (1) 'Modification'\n+053A86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+053A8A LOCAL HEADER #187     04034B50 (67324752)\n+053A8E Extract Zip Spec      14 (20) '2.0'\n+053A8F Extract OS            00 (0) 'MS-DOS'\n+053A90 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+053A92 Compression Method    0000 (0) 'Stored'\n+053A94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+053A98 CRC                   00000000 (0)\n+053A9C Compressed Size       00000000 (0)\n+053AA0 Uncompressed Size     00000000 (0)\n+053AA4 Filename Length       0080 (128)\n+053AA6 Extra Length          0009 (9)\n+053AA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+053B28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+053B2A   Length              0005 (5)\n+053B2C   Flags               01 (1) 'Modification'\n+053B2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+053B31 PAYLOAD\n+\n+0578EA DATA DESCRIPTOR       08074B50 (134695760)\n+0578EE CRC                   9EC902FD (2663973629)\n+0578F2 Compressed Size       00003DB9 (15801)\n+0578F6 Uncompressed Size     00003DB9 (15801)\n+\n+0578FA LOCAL HEADER #188     04034B50 (67324752)\n+0578FE Extract Zip Spec      14 (20) '2.0'\n+0578FF Extract OS            00 (0) 'MS-DOS'\n+057900 General Purpose Flag  0000 (0)\n+057902 Compression Method    0000 (0) 'Stored'\n+057904 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+057908 CRC                   00000000 (0)\n+05790C Compressed Size       00000000 (0)\n+057910 Uncompressed Size     00000000 (0)\n+057914 Filename Length       0070 (112)\n+057916 Extra Length          0009 (9)\n+057918 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57918: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+057988 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05798A   Length              0005 (5)\n+05798C   Flags               01 (1) 'Modification'\n+05798D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+057991 LOCAL HEADER #189     04034B50 (67324752)\n+057995 Extract Zip Spec      14 (20) '2.0'\n+057996 Extract OS            00 (0) 'MS-DOS'\n+057997 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+057999 Compression Method    0000 (0) 'Stored'\n+05799B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05799F CRC                   00000000 (0)\n+0579A3 Compressed Size       00000000 (0)\n+0579A7 Uncompressed Size     00000000 (0)\n+0579AB Filename Length       0086 (134)\n+0579AD Extra Length          0009 (9)\n+0579AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x57A18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x579AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-057A9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057AA0   Length              0005 (5)\n-057AA2   Flags               01 (1) 'Modification'\n-057AA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-057AA7 PAYLOAD\n-\n-0616E4 DATA DESCRIPTOR       08074B50 (134695760)\n-0616E8 CRC                   AD150348 (2903835464)\n-0616EC Compressed Size       00009C3D (39997)\n-0616F0 Uncompressed Size     00009C3D (39997)\n-\n-0616F4 LOCAL HEADER #190     04034B50 (67324752)\n-0616F8 Extract Zip Spec      14 (20) '2.0'\n-0616F9 Extract OS            00 (0) 'MS-DOS'\n-0616FA General Purpose Flag  0000 (0)\n-0616FC Compression Method    0000 (0) 'Stored'\n-0616FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-061702 CRC                   00000000 (0)\n-061706 Compressed Size       00000000 (0)\n-06170A Uncompressed Size     00000000 (0)\n-06170E Filename Length       006A (106)\n-061710 Extra Length          0009 (9)\n-061712 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x61712: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06177C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06177E   Length              0005 (5)\n-061780   Flags               01 (1) 'Modification'\n-061781   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-061785 LOCAL HEADER #191     04034B50 (67324752)\n-061789 Extract Zip Spec      14 (20) '2.0'\n-06178A Extract OS            00 (0) 'MS-DOS'\n-06178B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06178D Compression Method    0000 (0) 'Stored'\n-06178F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-061793 CRC                   00000000 (0)\n-061797 Compressed Size       00000000 (0)\n-06179B Uncompressed Size     00000000 (0)\n-06179F Filename Length       0080 (128)\n-0617A1 Extra Length          0009 (9)\n-0617A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x617A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-061823 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-061825   Length              0005 (5)\n-061827   Flags               01 (1) 'Modification'\n-061828   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06182C PAYLOAD\n-\n-064478 DATA DESCRIPTOR       08074B50 (134695760)\n-06447C CRC                   8BF94713 (2348369683)\n-064480 Compressed Size       00002C4C (11340)\n-064484 Uncompressed Size     00002C4C (11340)\n-\n-064488 LOCAL HEADER #192     04034B50 (67324752)\n-06448C Extract Zip Spec      14 (20) '2.0'\n-06448D Extract OS            00 (0) 'MS-DOS'\n-06448E General Purpose Flag  0000 (0)\n-064490 Compression Method    0000 (0) 'Stored'\n-064492 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-064496 CRC                   00000000 (0)\n-06449A Compressed Size       00000000 (0)\n-06449E Uncompressed Size     00000000 (0)\n-0644A2 Filename Length       002E (46)\n-0644A4 Extra Length          0009 (9)\n-0644A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x644A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0644D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0644D6   Length              0005 (5)\n-0644D8   Flags               01 (1) 'Modification'\n-0644D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0644DD LOCAL HEADER #193     04034B50 (67324752)\n-0644E1 Extract Zip Spec      14 (20) '2.0'\n-0644E2 Extract OS            00 (0) 'MS-DOS'\n-0644E3 General Purpose Flag  0000 (0)\n-0644E5 Compression Method    0000 (0) 'Stored'\n-0644E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0644EB CRC                   00000000 (0)\n-0644EF Compressed Size       00000000 (0)\n-0644F3 Uncompressed Size     00000000 (0)\n-0644F7 Filename Length       0037 (55)\n-0644F9 Extra Length          0009 (9)\n-0644FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x644FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064532 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064534   Length              0005 (5)\n-064536   Flags               01 (1) 'Modification'\n-064537   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06453B LOCAL HEADER #194     04034B50 (67324752)\n-06453F Extract Zip Spec      14 (20) '2.0'\n-064540 Extract OS            00 (0) 'MS-DOS'\n-064541 General Purpose Flag  0000 (0)\n-064543 Compression Method    0000 (0) 'Stored'\n-064545 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-064549 CRC                   00000000 (0)\n-06454D Compressed Size       00000000 (0)\n-064551 Uncompressed Size     00000000 (0)\n-064555 Filename Length       0060 (96)\n-064557 Extra Length          0009 (9)\n-064559 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64559: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0645B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0645BB   Length              0005 (5)\n-0645BD   Flags               01 (1) 'Modification'\n-0645BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0645C2 LOCAL HEADER #195     04034B50 (67324752)\n-0645C6 Extract Zip Spec      14 (20) '2.0'\n-0645C7 Extract OS            00 (0) 'MS-DOS'\n-0645C8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0645CA Compression Method    0000 (0) 'Stored'\n-0645CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0645D0 CRC                   00000000 (0)\n-0645D4 Compressed Size       00000000 (0)\n-0645D8 Uncompressed Size     00000000 (0)\n-0645DC Filename Length       0076 (118)\n-0645DE Extra Length          0009 (9)\n-0645E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x645E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064656 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064658   Length              0005 (5)\n-06465A   Flags               01 (1) 'Modification'\n-06465B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06465F PAYLOAD\n-\n-065559 DATA DESCRIPTOR       08074B50 (134695760)\n-06555D CRC                   42E654D4 (1122391252)\n-065561 Compressed Size       00000EFA (3834)\n-065565 Uncompressed Size     00000EFA (3834)\n-\n-065569 LOCAL HEADER #196     04034B50 (67324752)\n-06556D Extract Zip Spec      14 (20) '2.0'\n-06556E Extract OS            00 (0) 'MS-DOS'\n-06556F General Purpose Flag  0000 (0)\n-065571 Compression Method    0000 (0) 'Stored'\n-065573 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-065577 CRC                   00000000 (0)\n-06557B Compressed Size       00000000 (0)\n-06557F Uncompressed Size     00000000 (0)\n-065583 Filename Length       0066 (102)\n-065585 Extra Length          0009 (9)\n-065587 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65587: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0655ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0655EF   Length              0005 (5)\n-0655F1   Flags               01 (1) 'Modification'\n-0655F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0655F6 LOCAL HEADER #197     04034B50 (67324752)\n-0655FA Extract Zip Spec      14 (20) '2.0'\n-0655FB Extract OS            00 (0) 'MS-DOS'\n-0655FC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0655FE Compression Method    0000 (0) 'Stored'\n-065600 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-065604 CRC                   00000000 (0)\n-065608 Compressed Size       00000000 (0)\n-06560C Uncompressed Size     00000000 (0)\n-065610 Filename Length       007C (124)\n-065612 Extra Length          0009 (9)\n-065614 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65614: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-065690 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-065692   Length              0005 (5)\n-065694   Flags               01 (1) 'Modification'\n-065695   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-065699 PAYLOAD\n-\n-066D70 DATA DESCRIPTOR       08074B50 (134695760)\n-066D74 CRC                   51B4F745 (1370814277)\n-066D78 Compressed Size       000016D7 (5847)\n-066D7C Uncompressed Size     000016D7 (5847)\n-\n-066D80 LOCAL HEADER #198     04034B50 (67324752)\n-066D84 Extract Zip Spec      14 (20) '2.0'\n-066D85 Extract OS            00 (0) 'MS-DOS'\n-066D86 General Purpose Flag  0000 (0)\n-066D88 Compression Method    0000 (0) 'Stored'\n-066D8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-066D8E CRC                   00000000 (0)\n-066D92 Compressed Size       00000000 (0)\n-066D96 Uncompressed Size     00000000 (0)\n-066D9A Filename Length       0026 (38)\n-066D9C Extra Length          0009 (9)\n-066D9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x66D9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-066DC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-066DC6   Length              0005 (5)\n-066DC8   Flags               01 (1) 'Modification'\n-066DC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-066DCD LOCAL HEADER #199     04034B50 (67324752)\n-066DD1 Extract Zip Spec      14 (20) '2.0'\n-066DD2 Extract OS            00 (0) 'MS-DOS'\n-066DD3 General Purpose Flag  0000 (0)\n-066DD5 Compression Method    0000 (0) 'Stored'\n-066DD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-066DDB CRC                   00000000 (0)\n-066DDF Compressed Size       00000000 (0)\n-066DE3 Uncompressed Size     00000000 (0)\n-066DE7 Filename Length       002F (47)\n-066DE9 Extra Length          0009 (9)\n-066DEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x66DEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-066E1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-066E1C   Length              0005 (5)\n-066E1E   Flags               01 (1) 'Modification'\n-066E1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-066E23 LOCAL HEADER #200     04034B50 (67324752)\n-066E27 Extract Zip Spec      14 (20) '2.0'\n-066E28 Extract OS            00 (0) 'MS-DOS'\n-066E29 General Purpose Flag  0000 (0)\n-066E2B Compression Method    0000 (0) 'Stored'\n-066E2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-066E31 CRC                   00000000 (0)\n-066E35 Compressed Size       00000000 (0)\n-066E39 Uncompressed Size     00000000 (0)\n-066E3D Filename Length       005E (94)\n-066E3F Extra Length          0009 (9)\n-066E41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x66E41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-066E9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-066EA1   Length              0005 (5)\n-066EA3   Flags               01 (1) 'Modification'\n-066EA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-066EA8 LOCAL HEADER #201     04034B50 (67324752)\n-066EAC Extract Zip Spec      14 (20) '2.0'\n-066EAD Extract OS            00 (0) 'MS-DOS'\n-066EAE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-066EB0 Compression Method    0000 (0) 'Stored'\n-066EB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-066EB6 CRC                   00000000 (0)\n-066EBA Compressed Size       00000000 (0)\n-066EBE Uncompressed Size     00000000 (0)\n-066EC2 Filename Length       0074 (116)\n-066EC4 Extra Length          0009 (9)\n-066EC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x66EC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-066F3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-066F3C   Length              0005 (5)\n-066F3E   Flags               01 (1) 'Modification'\n-066F3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-066F43 PAYLOAD\n-\n-067609 DATA DESCRIPTOR       08074B50 (134695760)\n-06760D CRC                   357DA477 (897426551)\n-067611 Compressed Size       000006C6 (1734)\n-067615 Uncompressed Size     000006C6 (1734)\n-\n-067619 LOCAL HEADER #202     04034B50 (67324752)\n-06761D Extract Zip Spec      14 (20) '2.0'\n-06761E Extract OS            00 (0) 'MS-DOS'\n-06761F General Purpose Flag  0000 (0)\n-067621 Compression Method    0000 (0) 'Stored'\n-067623 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-067627 CRC                   00000000 (0)\n-06762B Compressed Size       00000000 (0)\n-06762F Uncompressed Size     00000000 (0)\n-067633 Filename Length       005B (91)\n-067635 Extra Length          0009 (9)\n-067637 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x67637: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-067692 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-067694   Length              0005 (5)\n-067696   Flags               01 (1) 'Modification'\n-067697   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06769B LOCAL HEADER #203     04034B50 (67324752)\n-06769F Extract Zip Spec      14 (20) '2.0'\n-0676A0 Extract OS            00 (0) 'MS-DOS'\n-0676A1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0676A3 Compression Method    0000 (0) 'Stored'\n-0676A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0676A9 CRC                   00000000 (0)\n-0676AD Compressed Size       00000000 (0)\n-0676B1 Uncompressed Size     00000000 (0)\n-0676B5 Filename Length       0071 (113)\n-0676B7 Extra Length          0009 (9)\n-0676B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x676B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06772A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06772C   Length              0005 (5)\n-06772E   Flags               01 (1) 'Modification'\n-06772F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-067733 PAYLOAD\n-\n-0680EF DATA DESCRIPTOR       08074B50 (134695760)\n-0680F3 CRC                   F9CAC97B (4190816635)\n-0680F7 Compressed Size       000009BC (2492)\n-0680FB Uncompressed Size     000009BC (2492)\n-\n-0680FF LOCAL HEADER #204     04034B50 (67324752)\n-068103 Extract Zip Spec      14 (20) '2.0'\n-068104 Extract OS            00 (0) 'MS-DOS'\n-068105 General Purpose Flag  0000 (0)\n-068107 Compression Method    0000 (0) 'Stored'\n-068109 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06810D CRC                   00000000 (0)\n-068111 Compressed Size       00000000 (0)\n-068115 Uncompressed Size     00000000 (0)\n-068119 Filename Length       0061 (97)\n-06811B Extra Length          0009 (9)\n-06811D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6811D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06817E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-068180   Length              0005 (5)\n-068182   Flags               01 (1) 'Modification'\n-068183   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-068187 LOCAL HEADER #205     04034B50 (67324752)\n-06818B Extract Zip Spec      14 (20) '2.0'\n-06818C Extract OS            00 (0) 'MS-DOS'\n-06818D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06818F Compression Method    0000 (0) 'Stored'\n-068191 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-068195 CRC                   00000000 (0)\n-068199 Compressed Size       00000000 (0)\n-06819D Uncompressed Size     00000000 (0)\n-0681A1 Filename Length       0077 (119)\n-0681A3 Extra Length          0009 (9)\n-0681A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x681A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06821C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06821E   Length              0005 (5)\n-068220   Flags               01 (1) 'Modification'\n-068221   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-068225 PAYLOAD\n-\n-068C2C DATA DESCRIPTOR       08074B50 (134695760)\n-068C30 CRC                   9DEB8C8B (2649459851)\n-068C34 Compressed Size       00000A07 (2567)\n-068C38 Uncompressed Size     00000A07 (2567)\n-\n-068C3C LOCAL HEADER #206     04034B50 (67324752)\n-068C40 Extract Zip Spec      14 (20) '2.0'\n-068C41 Extract OS            00 (0) 'MS-DOS'\n-068C42 General Purpose Flag  0000 (0)\n-068C44 Compression Method    0000 (0) 'Stored'\n-068C46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-068C4A CRC                   00000000 (0)\n-068C4E Compressed Size       00000000 (0)\n-068C52 Uncompressed Size     00000000 (0)\n-068C56 Filename Length       005B (91)\n-068C58 Extra Length          0009 (9)\n-068C5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x68C5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-068CB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-068CB7   Length              0005 (5)\n-068CB9   Flags               01 (1) 'Modification'\n-068CBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-068CBE LOCAL HEADER #207     04034B50 (67324752)\n-068CC2 Extract Zip Spec      14 (20) '2.0'\n-068CC3 Extract OS            00 (0) 'MS-DOS'\n-068CC4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-068CC6 Compression Method    0000 (0) 'Stored'\n-068CC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-068CCC CRC                   00000000 (0)\n-068CD0 Compressed Size       00000000 (0)\n-068CD4 Uncompressed Size     00000000 (0)\n-068CD8 Filename Length       0071 (113)\n-068CDA Extra Length          0009 (9)\n-068CDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x68CDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-068D4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-068D4F   Length              0005 (5)\n-068D51   Flags               01 (1) 'Modification'\n-068D52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-068D56 PAYLOAD\n-\n-069B34 DATA DESCRIPTOR       08074B50 (134695760)\n-069B38 CRC                   85B17459 (2242999385)\n-069B3C Compressed Size       00000DDE (3550)\n-069B40 Uncompressed Size     00000DDE (3550)\n-\n-069B44 LOCAL HEADER #208     04034B50 (67324752)\n-069B48 Extract Zip Spec      14 (20) '2.0'\n-069B49 Extract OS            00 (0) 'MS-DOS'\n-069B4A General Purpose Flag  0000 (0)\n-069B4C Compression Method    0000 (0) 'Stored'\n-069B4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-069B52 CRC                   00000000 (0)\n-069B56 Compressed Size       00000000 (0)\n-069B5A Uncompressed Size     00000000 (0)\n-069B5E Filename Length       0066 (102)\n-069B60 Extra Length          0009 (9)\n-069B62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x69B62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-069BC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-069BCA   Length              0005 (5)\n-069BCC   Flags               01 (1) 'Modification'\n-069BCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-069BD1 LOCAL HEADER #209     04034B50 (67324752)\n-069BD5 Extract Zip Spec      14 (20) '2.0'\n-069BD6 Extract OS            00 (0) 'MS-DOS'\n-069BD7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-069BD9 Compression Method    0000 (0) 'Stored'\n-069BDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-069BDF CRC                   00000000 (0)\n-069BE3 Compressed Size       00000000 (0)\n-069BE7 Uncompressed Size     00000000 (0)\n-069BEB Filename Length       007C (124)\n-069BED Extra Length          0009 (9)\n-069BEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x69BEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-069C6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-069C6D   Length              0005 (5)\n-069C6F   Flags               01 (1) 'Modification'\n-069C70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-069C74 PAYLOAD\n-\n-06A243 DATA DESCRIPTOR       08074B50 (134695760)\n-06A247 CRC                   9C229073 (2619510899)\n-06A24B Compressed Size       000005CF (1487)\n-06A24F Uncompressed Size     000005CF (1487)\n-\n-06A253 LOCAL HEADER #210     04034B50 (67324752)\n-06A257 Extract Zip Spec      14 (20) '2.0'\n-06A258 Extract OS            00 (0) 'MS-DOS'\n-06A259 General Purpose Flag  0000 (0)\n-06A25B Compression Method    0000 (0) 'Stored'\n-06A25D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A261 CRC                   00000000 (0)\n-06A265 Compressed Size       00000000 (0)\n-06A269 Uncompressed Size     00000000 (0)\n-06A26D Filename Length       0066 (102)\n-06A26F Extra Length          0009 (9)\n-06A271 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6A271: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06A2D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06A2D9   Length              0005 (5)\n-06A2DB   Flags               01 (1) 'Modification'\n-06A2DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06A2E0 LOCAL HEADER #211     04034B50 (67324752)\n-06A2E4 Extract Zip Spec      14 (20) '2.0'\n-06A2E5 Extract OS            00 (0) 'MS-DOS'\n-06A2E6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06A2E8 Compression Method    0000 (0) 'Stored'\n-06A2EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A2EE CRC                   00000000 (0)\n-06A2F2 Compressed Size       00000000 (0)\n-06A2F6 Uncompressed Size     00000000 (0)\n-06A2FA Filename Length       007C (124)\n-06A2FC Extra Length          0009 (9)\n-06A2FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6A2FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06A37A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06A37C   Length              0005 (5)\n-06A37E   Flags               01 (1) 'Modification'\n-06A37F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06A383 PAYLOAD\n-\n-06A945 DATA DESCRIPTOR       08074B50 (134695760)\n-06A949 CRC                   A57691CD (2776011213)\n-06A94D Compressed Size       000005C2 (1474)\n-06A951 Uncompressed Size     000005C2 (1474)\n-\n-06A955 LOCAL HEADER #212     04034B50 (67324752)\n-06A959 Extract Zip Spec      14 (20) '2.0'\n-06A95A Extract OS            00 (0) 'MS-DOS'\n-06A95B General Purpose Flag  0000 (0)\n-06A95D Compression Method    0000 (0) 'Stored'\n-06A95F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A963 CRC                   00000000 (0)\n-06A967 Compressed Size       00000000 (0)\n-06A96B Uncompressed Size     00000000 (0)\n-06A96F Filename Length       0065 (101)\n-06A971 Extra Length          0009 (9)\n-06A973 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6A973: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06A9D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06A9DA   Length              0005 (5)\n-06A9DC   Flags               01 (1) 'Modification'\n-06A9DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06A9E1 LOCAL HEADER #213     04034B50 (67324752)\n-06A9E5 Extract Zip Spec      14 (20) '2.0'\n-06A9E6 Extract OS            00 (0) 'MS-DOS'\n-06A9E7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06A9E9 Compression Method    0000 (0) 'Stored'\n-06A9EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A9EF CRC                   00000000 (0)\n-06A9F3 Compressed Size       00000000 (0)\n-06A9F7 Uncompressed Size     00000000 (0)\n-06A9FB Filename Length       007B (123)\n-06A9FD Extra Length          0009 (9)\n-06A9FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6A9FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06AA7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06AA7C   Length              0005 (5)\n-06AA7E   Flags               01 (1) 'Modification'\n-06AA7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06AA83 PAYLOAD\n-\n-06B1BD DATA DESCRIPTOR       08074B50 (134695760)\n-06B1C1 CRC                   6CD31445 (1825772613)\n-06B1C5 Compressed Size       0000073A (1850)\n-06B1C9 Uncompressed Size     0000073A (1850)\n-\n-06B1CD LOCAL HEADER #214     04034B50 (67324752)\n-06B1D1 Extract Zip Spec      14 (20) '2.0'\n-06B1D2 Extract OS            00 (0) 'MS-DOS'\n-06B1D3 General Purpose Flag  0000 (0)\n-06B1D5 Compression Method    0000 (0) 'Stored'\n-06B1D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06B1DB CRC                   00000000 (0)\n-06B1DF Compressed Size       00000000 (0)\n-06B1E3 Uncompressed Size     00000000 (0)\n-06B1E7 Filename Length       0063 (99)\n-06B1E9 Extra Length          0009 (9)\n-06B1EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6B1EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06B24E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06B250   Length              0005 (5)\n-06B252   Flags               01 (1) 'Modification'\n-06B253   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06B257 LOCAL HEADER #215     04034B50 (67324752)\n-06B25B Extract Zip Spec      14 (20) '2.0'\n-06B25C Extract OS            00 (0) 'MS-DOS'\n-06B25D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06B25F Compression Method    0000 (0) 'Stored'\n-06B261 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06B265 CRC                   00000000 (0)\n-06B269 Compressed Size       00000000 (0)\n-06B26D Uncompressed Size     00000000 (0)\n-06B271 Filename Length       0079 (121)\n-06B273 Extra Length          0009 (9)\n-06B275 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6B275: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06B2EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06B2F0   Length              0005 (5)\n-06B2F2   Flags               01 (1) 'Modification'\n-06B2F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06B2F7 PAYLOAD\n-\n-06BD89 DATA DESCRIPTOR       08074B50 (134695760)\n-06BD8D CRC                   C97DF8D6 (3380476118)\n-06BD91 Compressed Size       00000A92 (2706)\n-06BD95 Uncompressed Size     00000A92 (2706)\n-\n-06BD99 LOCAL HEADER #216     04034B50 (67324752)\n-06BD9D Extract Zip Spec      14 (20) '2.0'\n-06BD9E Extract OS            00 (0) 'MS-DOS'\n-06BD9F General Purpose Flag  0000 (0)\n-06BDA1 Compression Method    0000 (0) 'Stored'\n-06BDA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BDA7 CRC                   00000000 (0)\n-06BDAB Compressed Size       00000000 (0)\n-06BDAF Uncompressed Size     00000000 (0)\n-06BDB3 Filename Length       0023 (35)\n-06BDB5 Extra Length          0009 (9)\n-06BDB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BDB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BDDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BDDC   Length              0005 (5)\n-06BDDE   Flags               01 (1) 'Modification'\n-06BDDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06BDE3 LOCAL HEADER #217     04034B50 (67324752)\n-06BDE7 Extract Zip Spec      14 (20) '2.0'\n-06BDE8 Extract OS            00 (0) 'MS-DOS'\n-06BDE9 General Purpose Flag  0000 (0)\n-06BDEB Compression Method    0000 (0) 'Stored'\n-06BDED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BDF1 CRC                   00000000 (0)\n-06BDF5 Compressed Size       00000000 (0)\n-06BDF9 Uncompressed Size     00000000 (0)\n-06BDFD Filename Length       002C (44)\n-06BDFF Extra Length          0009 (9)\n-06BE01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BE01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BE2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BE2F   Length              0005 (5)\n-06BE31   Flags               01 (1) 'Modification'\n-06BE32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06BE36 LOCAL HEADER #218     04034B50 (67324752)\n-06BE3A Extract Zip Spec      14 (20) '2.0'\n-06BE3B Extract OS            00 (0) 'MS-DOS'\n-06BE3C General Purpose Flag  0000 (0)\n-06BE3E Compression Method    0000 (0) 'Stored'\n-06BE40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BE44 CRC                   00000000 (0)\n-06BE48 Compressed Size       00000000 (0)\n-06BE4C Uncompressed Size     00000000 (0)\n-06BE50 Filename Length       0058 (88)\n-06BE52 Extra Length          0009 (9)\n-06BE54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BE54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BEAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BEAE   Length              0005 (5)\n-06BEB0   Flags               01 (1) 'Modification'\n-06BEB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06BEB5 LOCAL HEADER #219     04034B50 (67324752)\n-06BEB9 Extract Zip Spec      14 (20) '2.0'\n-06BEBA Extract OS            00 (0) 'MS-DOS'\n-06BEBB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06BEBD Compression Method    0000 (0) 'Stored'\n-06BEBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BEC3 CRC                   00000000 (0)\n-06BEC7 Compressed Size       00000000 (0)\n-06BECB Uncompressed Size     00000000 (0)\n-06BECF Filename Length       006E (110)\n-06BED1 Extra Length          0009 (9)\n-06BED3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BED3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BF41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BF43   Length              0005 (5)\n-06BF45   Flags               01 (1) 'Modification'\n-06BF46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06BF4A PAYLOAD\n-\n-06C6DF DATA DESCRIPTOR       08074B50 (134695760)\n-06C6E3 CRC                   0B04A112 (184852754)\n-06C6E7 Compressed Size       00000795 (1941)\n-06C6EB Uncompressed Size     00000795 (1941)\n-\n-06C6EF LOCAL HEADER #220     04034B50 (67324752)\n-06C6F3 Extract Zip Spec      14 (20) '2.0'\n-06C6F4 Extract OS            00 (0) 'MS-DOS'\n-06C6F5 General Purpose Flag  0000 (0)\n-06C6F7 Compression Method    0000 (0) 'Stored'\n-06C6F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C6FD CRC                   00000000 (0)\n-06C701 Compressed Size       00000000 (0)\n-06C705 Uncompressed Size     00000000 (0)\n-06C709 Filename Length       0031 (49)\n-06C70B Extra Length          0009 (9)\n-06C70D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C70D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C73E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C740   Length              0005 (5)\n-06C742   Flags               01 (1) 'Modification'\n-06C743   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06C747 LOCAL HEADER #221     04034B50 (67324752)\n-06C74B Extract Zip Spec      14 (20) '2.0'\n-06C74C Extract OS            00 (0) 'MS-DOS'\n-06C74D General Purpose Flag  0000 (0)\n-06C74F Compression Method    0000 (0) 'Stored'\n-06C751 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C755 CRC                   00000000 (0)\n-06C759 Compressed Size       00000000 (0)\n-06C75D Uncompressed Size     00000000 (0)\n-06C761 Filename Length       003A (58)\n-06C763 Extra Length          0009 (9)\n-06C765 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C765: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C79F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C7A1   Length              0005 (5)\n-06C7A3   Flags               01 (1) 'Modification'\n-06C7A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06C7A8 LOCAL HEADER #222     04034B50 (67324752)\n-06C7AC Extract Zip Spec      14 (20) '2.0'\n-06C7AD Extract OS            00 (0) 'MS-DOS'\n-06C7AE General Purpose Flag  0000 (0)\n-06C7B0 Compression Method    0000 (0) 'Stored'\n-06C7B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C7B6 CRC                   00000000 (0)\n-06C7BA Compressed Size       00000000 (0)\n-06C7BE Uncompressed Size     00000000 (0)\n-06C7C2 Filename Length       006C (108)\n-06C7C4 Extra Length          0009 (9)\n-06C7C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C7C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C834   Length              0005 (5)\n-06C836   Flags               01 (1) 'Modification'\n-06C837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06C83B LOCAL HEADER #223     04034B50 (67324752)\n-06C83F Extract Zip Spec      14 (20) '2.0'\n-06C840 Extract OS            00 (0) 'MS-DOS'\n-06C841 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06C843 Compression Method    0000 (0) 'Stored'\n-06C845 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C849 CRC                   00000000 (0)\n-06C84D Compressed Size       00000000 (0)\n-06C851 Uncompressed Size     00000000 (0)\n-06C855 Filename Length       0082 (130)\n-06C857 Extra Length          0009 (9)\n-06C859 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C859: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C8DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C8DD   Length              0005 (5)\n-06C8DF   Flags               01 (1) 'Modification'\n-06C8E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06C8E4 PAYLOAD\n-\n-06D18F DATA DESCRIPTOR       08074B50 (134695760)\n-06D193 CRC                   9A51A289 (2589041289)\n-06D197 Compressed Size       000008AB (2219)\n-06D19B Uncompressed Size     000008AB (2219)\n-\n-06D19F LOCAL HEADER #224     04034B50 (67324752)\n-06D1A3 Extract Zip Spec      14 (20) '2.0'\n-06D1A4 Extract OS            00 (0) 'MS-DOS'\n-06D1A5 General Purpose Flag  0000 (0)\n-06D1A7 Compression Method    0000 (0) 'Stored'\n-06D1A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D1AD CRC                   00000000 (0)\n-06D1B1 Compressed Size       00000000 (0)\n-06D1B5 Uncompressed Size     00000000 (0)\n-06D1B9 Filename Length       0022 (34)\n-06D1BB Extra Length          0009 (9)\n-06D1BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D1BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D1DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D1E1   Length              0005 (5)\n-06D1E3   Flags               01 (1) 'Modification'\n-06D1E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06D1E8 LOCAL HEADER #225     04034B50 (67324752)\n-06D1EC Extract Zip Spec      14 (20) '2.0'\n-06D1ED Extract OS            00 (0) 'MS-DOS'\n-06D1EE General Purpose Flag  0000 (0)\n-06D1F0 Compression Method    0000 (0) 'Stored'\n-06D1F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D1F6 CRC                   00000000 (0)\n-06D1FA Compressed Size       00000000 (0)\n-06D1FE Uncompressed Size     00000000 (0)\n-06D202 Filename Length       002B (43)\n-06D204 Extra Length          0009 (9)\n-06D206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D231 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D233   Length              0005 (5)\n-06D235   Flags               01 (1) 'Modification'\n-06D236   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06D23A LOCAL HEADER #226     04034B50 (67324752)\n-06D23E Extract Zip Spec      14 (20) '2.0'\n-06D23F Extract OS            00 (0) 'MS-DOS'\n-06D240 General Purpose Flag  0000 (0)\n-06D242 Compression Method    0000 (0) 'Stored'\n-06D244 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D248 CRC                   00000000 (0)\n-06D24C Compressed Size       00000000 (0)\n-06D250 Uncompressed Size     00000000 (0)\n-06D254 Filename Length       004D (77)\n-06D256 Extra Length          0009 (9)\n-06D258 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D258: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D2A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D2A7   Length              0005 (5)\n-06D2A9   Flags               01 (1) 'Modification'\n-06D2AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06D2AE LOCAL HEADER #227     04034B50 (67324752)\n-06D2B2 Extract Zip Spec      14 (20) '2.0'\n-06D2B3 Extract OS            00 (0) 'MS-DOS'\n-06D2B4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06D2B6 Compression Method    0000 (0) 'Stored'\n-06D2B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D2BC CRC                   00000000 (0)\n-06D2C0 Compressed Size       00000000 (0)\n-06D2C4 Uncompressed Size     00000000 (0)\n-06D2C8 Filename Length       0063 (99)\n-06D2CA Extra Length          0009 (9)\n-06D2CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D2CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D32F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D331   Length              0005 (5)\n-06D333   Flags               01 (1) 'Modification'\n-06D334   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06D338 PAYLOAD\n-\n-070CA7 DATA DESCRIPTOR       08074B50 (134695760)\n-070CAB CRC                   BEAE3D9C (3199090076)\n-070CAF Compressed Size       0000396F (14703)\n-070CB3 Uncompressed Size     0000396F (14703)\n-\n-070CB7 LOCAL HEADER #228     04034B50 (67324752)\n-070CBB Extract Zip Spec      14 (20) '2.0'\n-070CBC Extract OS            00 (0) 'MS-DOS'\n-070CBD General Purpose Flag  0000 (0)\n-070CBF Compression Method    0000 (0) 'Stored'\n-070CC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-070CC5 CRC                   00000000 (0)\n-070CC9 Compressed Size       00000000 (0)\n-070CCD Uncompressed Size     00000000 (0)\n-070CD1 Filename Length       0030 (48)\n-070CD3 Extra Length          0009 (9)\n-070CD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x70CD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-070D05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-070D07   Length              0005 (5)\n-070D09   Flags               01 (1) 'Modification'\n-070D0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-070D0E LOCAL HEADER #229     04034B50 (67324752)\n-070D12 Extract Zip Spec      14 (20) '2.0'\n-070D13 Extract OS            00 (0) 'MS-DOS'\n-070D14 General Purpose Flag  0000 (0)\n-070D16 Compression Method    0000 (0) 'Stored'\n-070D18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-070D1C CRC                   00000000 (0)\n-070D20 Compressed Size       00000000 (0)\n-070D24 Uncompressed Size     00000000 (0)\n-070D28 Filename Length       0039 (57)\n-070D2A Extra Length          0009 (9)\n-070D2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x70D2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-070D65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-070D67   Length              0005 (5)\n-070D69   Flags               01 (1) 'Modification'\n-070D6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-070D6E LOCAL HEADER #230     04034B50 (67324752)\n-070D72 Extract Zip Spec      14 (20) '2.0'\n-070D73 Extract OS            00 (0) 'MS-DOS'\n-070D74 General Purpose Flag  0000 (0)\n-070D76 Compression Method    0000 (0) 'Stored'\n-070D78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-070D7C CRC                   00000000 (0)\n-070D80 Compressed Size       00000000 (0)\n-070D84 Uncompressed Size     00000000 (0)\n-070D88 Filename Length       006A (106)\n-070D8A Extra Length          0009 (9)\n-070D8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x70D8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-070DF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-070DF8   Length              0005 (5)\n-070DFA   Flags               01 (1) 'Modification'\n-070DFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-070DFF LOCAL HEADER #231     04034B50 (67324752)\n-070E03 Extract Zip Spec      14 (20) '2.0'\n-070E04 Extract OS            00 (0) 'MS-DOS'\n-070E05 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-070E07 Compression Method    0000 (0) 'Stored'\n-070E09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-070E0D CRC                   00000000 (0)\n-070E11 Compressed Size       00000000 (0)\n-070E15 Uncompressed Size     00000000 (0)\n-070E19 Filename Length       0080 (128)\n-070E1B Extra Length          0009 (9)\n-070E1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x70E1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-070E9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-070E9F   Length              0005 (5)\n-070EA1   Flags               01 (1) 'Modification'\n-070EA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-070EA6 PAYLOAD\n-\n-0732C7 DATA DESCRIPTOR       08074B50 (134695760)\n-0732CB CRC                   29D620BA (701898938)\n-0732CF Compressed Size       00002421 (9249)\n-0732D3 Uncompressed Size     00002421 (9249)\n-\n-0732D7 LOCAL HEADER #232     04034B50 (67324752)\n-0732DB Extract Zip Spec      14 (20) '2.0'\n-0732DC Extract OS            00 (0) 'MS-DOS'\n-0732DD General Purpose Flag  0000 (0)\n-0732DF Compression Method    0000 (0) 'Stored'\n-0732E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0732E5 CRC                   00000000 (0)\n-0732E9 Compressed Size       00000000 (0)\n-0732ED Uncompressed Size     00000000 (0)\n-0732F1 Filename Length       003C (60)\n-0732F3 Extra Length          0009 (9)\n-0732F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x732F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-073331 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-073333   Length              0005 (5)\n-073335   Flags               01 (1) 'Modification'\n-073336   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-07333A LOCAL HEADER #233     04034B50 (67324752)\n-07333E Extract Zip Spec      14 (20) '2.0'\n-07333F Extract OS            00 (0) 'MS-DOS'\n-073340 General Purpose Flag  0000 (0)\n-073342 Compression Method    0000 (0) 'Stored'\n-073344 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-073348 CRC                   00000000 (0)\n-07334C Compressed Size       00000000 (0)\n-073350 Uncompressed Size     00000000 (0)\n-073354 Filename Length       0045 (69)\n-073356 Extra Length          0009 (9)\n-073358 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x73358: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07339D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07339F   Length              0005 (5)\n-0733A1   Flags               01 (1) 'Modification'\n-0733A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0733A6 LOCAL HEADER #234     04034B50 (67324752)\n-0733AA Extract Zip Spec      14 (20) '2.0'\n-0733AB Extract OS            00 (0) 'MS-DOS'\n-0733AC General Purpose Flag  0000 (0)\n-0733AE Compression Method    0000 (0) 'Stored'\n-0733B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0733B4 CRC                   00000000 (0)\n-0733B8 Compressed Size       00000000 (0)\n-0733BC Uncompressed Size     00000000 (0)\n-0733C0 Filename Length       0063 (99)\n-0733C2 Extra Length          0009 (9)\n-0733C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x733C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-073427 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-073429   Length              0005 (5)\n-07342B   Flags               01 (1) 'Modification'\n-07342C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-073430 LOCAL HEADER #235     04034B50 (67324752)\n-073434 Extract Zip Spec      14 (20) '2.0'\n-073435 Extract OS            00 (0) 'MS-DOS'\n-073436 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-073438 Compression Method    0000 (0) 'Stored'\n-07343A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07343E CRC                   00000000 (0)\n-073442 Compressed Size       00000000 (0)\n-073446 Uncompressed Size     00000000 (0)\n-07344A Filename Length       0079 (121)\n-07344C Extra Length          0009 (9)\n-07344E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7344E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0734C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0734C9   Length              0005 (5)\n-0734CB   Flags               01 (1) 'Modification'\n-0734CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0734D0 PAYLOAD\n-\n-076BB7 DATA DESCRIPTOR       08074B50 (134695760)\n-076BBB CRC                   9ED7BE90 (2664939152)\n-076BBF Compressed Size       000036E7 (14055)\n-076BC3 Uncompressed Size     000036E7 (14055)\n-\n-076BC7 LOCAL HEADER #236     04034B50 (67324752)\n-076BCB Extract Zip Spec      14 (20) '2.0'\n-076BCC Extract OS            00 (0) 'MS-DOS'\n-076BCD General Purpose Flag  0000 (0)\n-076BCF Compression Method    0000 (0) 'Stored'\n-076BD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-076BD5 CRC                   00000000 (0)\n-076BD9 Compressed Size       00000000 (0)\n-076BDD Uncompressed Size     00000000 (0)\n-076BE1 Filename Length       0063 (99)\n-076BE3 Extra Length          0009 (9)\n-076BE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x76BE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-076C48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-076C4A   Length              0005 (5)\n-076C4C   Flags               01 (1) 'Modification'\n-076C4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-076C51 LOCAL HEADER #237     04034B50 (67324752)\n-076C55 Extract Zip Spec      14 (20) '2.0'\n-076C56 Extract OS            00 (0) 'MS-DOS'\n-076C57 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-076C59 Compression Method    0000 (0) 'Stored'\n-076C5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-076C5F CRC                   00000000 (0)\n-076C63 Compressed Size       00000000 (0)\n-076C67 Uncompressed Size     00000000 (0)\n-076C6B Filename Length       0079 (121)\n-076C6D Extra Length          0009 (9)\n-076C6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x76C6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-076CE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-076CEA   Length              0005 (5)\n-076CEC   Flags               01 (1) 'Modification'\n-076CED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-076CF1 PAYLOAD\n-\n-07B483 DATA DESCRIPTOR       08074B50 (134695760)\n-07B487 CRC                   B51FDD91 (3038764433)\n-07B48B Compressed Size       00004792 (18322)\n-07B48F Uncompressed Size     00004792 (18322)\n-\n-07B493 LOCAL HEADER #238     04034B50 (67324752)\n-07B497 Extract Zip Spec      14 (20) '2.0'\n-07B498 Extract OS            00 (0) 'MS-DOS'\n-07B499 General Purpose Flag  0000 (0)\n-07B49B Compression Method    0000 (0) 'Stored'\n-07B49D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07B4A1 CRC                   00000000 (0)\n-07B4A5 Compressed Size       00000000 (0)\n-07B4A9 Uncompressed Size     00000000 (0)\n-07B4AD Filename Length       0065 (101)\n-07B4AF Extra Length          0009 (9)\n-07B4B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7B4B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07B516 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07B518   Length              0005 (5)\n-07B51A   Flags               01 (1) 'Modification'\n-07B51B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-07B51F LOCAL HEADER #239     04034B50 (67324752)\n-07B523 Extract Zip Spec      14 (20) '2.0'\n-07B524 Extract OS            00 (0) 'MS-DOS'\n-07B525 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-07B527 Compression Method    0000 (0) 'Stored'\n-07B529 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07B52D CRC                   00000000 (0)\n-07B531 Compressed Size       00000000 (0)\n-07B535 Uncompressed Size     00000000 (0)\n-07B539 Filename Length       007B (123)\n-07B53B Extra Length          0009 (9)\n-07B53D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7B53D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07B5B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07B5BA   Length              0005 (5)\n-07B5BC   Flags               01 (1) 'Modification'\n-07B5BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07B5C1 PAYLOAD\n-\n-08139D DATA DESCRIPTOR       08074B50 (134695760)\n-0813A1 CRC                   27CFA48B (667919499)\n-0813A5 Compressed Size       00005DDC (24028)\n-0813A9 Uncompressed Size     00005DDC (24028)\n-\n-0813AD LOCAL HEADER #240     04034B50 (67324752)\n-0813B1 Extract Zip Spec      14 (20) '2.0'\n-0813B2 Extract OS            00 (0) 'MS-DOS'\n-0813B3 General Purpose Flag  0000 (0)\n-0813B5 Compression Method    0000 (0) 'Stored'\n-0813B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0813BB CRC                   00000000 (0)\n-0813BF Compressed Size       00000000 (0)\n-0813C3 Uncompressed Size     00000000 (0)\n-0813C7 Filename Length       0069 (105)\n-0813C9 Extra Length          0009 (9)\n-0813CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x813CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-081434 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-081436   Length              0005 (5)\n-081438   Flags               01 (1) 'Modification'\n-081439   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08143D LOCAL HEADER #241     04034B50 (67324752)\n-081441 Extract Zip Spec      14 (20) '2.0'\n-081442 Extract OS            00 (0) 'MS-DOS'\n-081443 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-081445 Compression Method    0000 (0) 'Stored'\n-081447 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08144B CRC                   00000000 (0)\n-08144F Compressed Size       00000000 (0)\n-081453 Uncompressed Size     00000000 (0)\n-081457 Filename Length       007F (127)\n-081459 Extra Length          0009 (9)\n-08145B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8145B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0814DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0814DC   Length              0005 (5)\n-0814DE   Flags               01 (1) 'Modification'\n-0814DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0814E3 PAYLOAD\n-\n-08501D DATA DESCRIPTOR       08074B50 (134695760)\n-085021 CRC                   620AB78F (1644869519)\n-085025 Compressed Size       00003B3A (15162)\n-085029 Uncompressed Size     00003B3A (15162)\n-\n-08502D LOCAL HEADER #242     04034B50 (67324752)\n-085031 Extract Zip Spec      14 (20) '2.0'\n-085032 Extract OS            00 (0) 'MS-DOS'\n-085033 General Purpose Flag  0000 (0)\n-085035 Compression Method    0000 (0) 'Stored'\n-085037 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08503B CRC                   00000000 (0)\n-08503F Compressed Size       00000000 (0)\n-085043 Uncompressed Size     00000000 (0)\n-085047 Filename Length       0069 (105)\n-085049 Extra Length          0009 (9)\n-08504B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8504B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0850B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0850B6   Length              0005 (5)\n-0850B8   Flags               01 (1) 'Modification'\n-0850B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0850BD LOCAL HEADER #243     04034B50 (67324752)\n-0850C1 Extract Zip Spec      14 (20) '2.0'\n-0850C2 Extract OS            00 (0) 'MS-DOS'\n-0850C3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0850C5 Compression Method    0000 (0) 'Stored'\n-0850C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0850CB CRC                   00000000 (0)\n-0850CF Compressed Size       00000000 (0)\n-0850D3 Uncompressed Size     00000000 (0)\n-0850D7 Filename Length       007F (127)\n-0850D9 Extra Length          0009 (9)\n-0850DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x850DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08515A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08515C   Length              0005 (5)\n-08515E   Flags               01 (1) 'Modification'\n-08515F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-085163 PAYLOAD\n-\n-0899CC DATA DESCRIPTOR       08074B50 (134695760)\n-0899D0 CRC                   937A07E6 (2474248166)\n-0899D4 Compressed Size       00004869 (18537)\n-0899D8 Uncompressed Size     00004869 (18537)\n-\n-0899DC LOCAL HEADER #244     04034B50 (67324752)\n-0899E0 Extract Zip Spec      14 (20) '2.0'\n-0899E1 Extract OS            00 (0) 'MS-DOS'\n-0899E2 General Purpose Flag  0000 (0)\n-0899E4 Compression Method    0000 (0) 'Stored'\n-0899E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0899EA CRC                   00000000 (0)\n-0899EE Compressed Size       00000000 (0)\n-0899F2 Uncompressed Size     00000000 (0)\n-0899F6 Filename Length       006D (109)\n-0899F8 Extra Length          0009 (9)\n-0899FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x899FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-089A67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-089A69   Length              0005 (5)\n-089A6B   Flags               01 (1) 'Modification'\n-089A6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-089A70 LOCAL HEADER #245     04034B50 (67324752)\n-089A74 Extract Zip Spec      14 (20) '2.0'\n-089A75 Extract OS            00 (0) 'MS-DOS'\n-089A76 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-089A78 Compression Method    0000 (0) 'Stored'\n-089A7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089A7E CRC                   00000000 (0)\n-089A82 Compressed Size       00000000 (0)\n-089A86 Uncompressed Size     00000000 (0)\n-089A8A Filename Length       0083 (131)\n-089A8C Extra Length          0009 (9)\n-089A8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x89A8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-089B11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-089B13   Length              0005 (5)\n-089B15   Flags               01 (1) 'Modification'\n-089B16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-089B1A PAYLOAD\n-\n-08A5F9 DATA DESCRIPTOR       08074B50 (134695760)\n-08A5FD CRC                   53DFF1D7 (1407185367)\n-08A601 Compressed Size       00000ADF (2783)\n-08A605 Uncompressed Size     00000ADF (2783)\n-\n-08A609 LOCAL HEADER #246     04034B50 (67324752)\n-08A60D Extract Zip Spec      14 (20) '2.0'\n-08A60E Extract OS            00 (0) 'MS-DOS'\n-08A60F General Purpose Flag  0000 (0)\n-08A611 Compression Method    0000 (0) 'Stored'\n-08A613 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08A617 CRC                   00000000 (0)\n-08A61B Compressed Size       00000000 (0)\n-08A61F Uncompressed Size     00000000 (0)\n-08A623 Filename Length       0069 (105)\n-08A625 Extra Length          0009 (9)\n-08A627 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8A627: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08A690 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08A692   Length              0005 (5)\n-08A694   Flags               01 (1) 'Modification'\n-08A695   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08A699 LOCAL HEADER #247     04034B50 (67324752)\n-08A69D Extract Zip Spec      14 (20) '2.0'\n-08A69E Extract OS            00 (0) 'MS-DOS'\n-08A69F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08A6A1 Compression Method    0000 (0) 'Stored'\n-08A6A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08A6A7 CRC                   00000000 (0)\n-08A6AB Compressed Size       00000000 (0)\n-08A6AF Uncompressed Size     00000000 (0)\n-08A6B3 Filename Length       007F (127)\n-08A6B5 Extra Length          0009 (9)\n-08A6B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8A6B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08A736 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08A738   Length              0005 (5)\n-08A73A   Flags               01 (1) 'Modification'\n-08A73B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08A73F PAYLOAD\n-\n-08B078 DATA DESCRIPTOR       08074B50 (134695760)\n-08B07C CRC                   6D3A5445 (1832539205)\n-08B080 Compressed Size       00000939 (2361)\n-08B084 Uncompressed Size     00000939 (2361)\n-\n-08B088 LOCAL HEADER #248     04034B50 (67324752)\n-08B08C Extract Zip Spec      14 (20) '2.0'\n-08B08D Extract OS            00 (0) 'MS-DOS'\n-08B08E General Purpose Flag  0000 (0)\n-08B090 Compression Method    0000 (0) 'Stored'\n-08B092 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B096 CRC                   00000000 (0)\n-08B09A Compressed Size       00000000 (0)\n-08B09E Uncompressed Size     00000000 (0)\n-08B0A2 Filename Length       0078 (120)\n-08B0A4 Extra Length          0009 (9)\n-08B0A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8B0A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08B11E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B120   Length              0005 (5)\n-08B122   Flags               01 (1) 'Modification'\n-08B123   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08B127 LOCAL HEADER #249     04034B50 (67324752)\n-08B12B Extract Zip Spec      14 (20) '2.0'\n-08B12C Extract OS            00 (0) 'MS-DOS'\n-08B12D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08B12F Compression Method    0000 (0) 'Stored'\n-08B131 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08B135 CRC                   00000000 (0)\n-08B139 Compressed Size       00000000 (0)\n-08B13D Uncompressed Size     00000000 (0)\n-08B141 Filename Length       008E (142)\n-08B143 Extra Length          0009 (9)\n-08B145 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+057A35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+057A37   Length              0005 (5)\n+057A39   Flags               01 (1) 'Modification'\n+057A3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+057A3E PAYLOAD\n+\n+06167B DATA DESCRIPTOR       08074B50 (134695760)\n+06167F CRC                   AD150348 (2903835464)\n+061683 Compressed Size       00009C3D (39997)\n+061687 Uncompressed Size     00009C3D (39997)\n+\n+06168B LOCAL HEADER #190     04034B50 (67324752)\n+06168F Extract Zip Spec      14 (20) '2.0'\n+061690 Extract OS            00 (0) 'MS-DOS'\n+061691 General Purpose Flag  0000 (0)\n+061693 Compression Method    0000 (0) 'Stored'\n+061695 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+061699 CRC                   00000000 (0)\n+06169D Compressed Size       00000000 (0)\n+0616A1 Uncompressed Size     00000000 (0)\n+0616A5 Filename Length       006A (106)\n+0616A7 Extra Length          0009 (9)\n+0616A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x616A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+061713 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+061715   Length              0005 (5)\n+061717   Flags               01 (1) 'Modification'\n+061718   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06171C LOCAL HEADER #191     04034B50 (67324752)\n+061720 Extract Zip Spec      14 (20) '2.0'\n+061721 Extract OS            00 (0) 'MS-DOS'\n+061722 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+061724 Compression Method    0000 (0) 'Stored'\n+061726 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06172A CRC                   00000000 (0)\n+06172E Compressed Size       00000000 (0)\n+061732 Uncompressed Size     00000000 (0)\n+061736 Filename Length       0080 (128)\n+061738 Extra Length          0009 (9)\n+06173A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6173A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0617BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0617BC   Length              0005 (5)\n+0617BE   Flags               01 (1) 'Modification'\n+0617BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0617C3 PAYLOAD\n+\n+06440F DATA DESCRIPTOR       08074B50 (134695760)\n+064413 CRC                   8BF94713 (2348369683)\n+064417 Compressed Size       00002C4C (11340)\n+06441B Uncompressed Size     00002C4C (11340)\n+\n+06441F LOCAL HEADER #192     04034B50 (67324752)\n+064423 Extract Zip Spec      14 (20) '2.0'\n+064424 Extract OS            00 (0) 'MS-DOS'\n+064425 General Purpose Flag  0000 (0)\n+064427 Compression Method    0000 (0) 'Stored'\n+064429 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06442D CRC                   00000000 (0)\n+064431 Compressed Size       00000000 (0)\n+064435 Uncompressed Size     00000000 (0)\n+064439 Filename Length       002E (46)\n+06443B Extra Length          0009 (9)\n+06443D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6443D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06446B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06446D   Length              0005 (5)\n+06446F   Flags               01 (1) 'Modification'\n+064470   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+064474 LOCAL HEADER #193     04034B50 (67324752)\n+064478 Extract Zip Spec      14 (20) '2.0'\n+064479 Extract OS            00 (0) 'MS-DOS'\n+06447A General Purpose Flag  0000 (0)\n+06447C Compression Method    0000 (0) 'Stored'\n+06447E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+064482 CRC                   00000000 (0)\n+064486 Compressed Size       00000000 (0)\n+06448A Uncompressed Size     00000000 (0)\n+06448E Filename Length       0037 (55)\n+064490 Extra Length          0009 (9)\n+064492 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64492: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0644C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0644CB   Length              0005 (5)\n+0644CD   Flags               01 (1) 'Modification'\n+0644CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0644D2 LOCAL HEADER #194     04034B50 (67324752)\n+0644D6 Extract Zip Spec      14 (20) '2.0'\n+0644D7 Extract OS            00 (0) 'MS-DOS'\n+0644D8 General Purpose Flag  0000 (0)\n+0644DA Compression Method    0000 (0) 'Stored'\n+0644DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0644E0 CRC                   00000000 (0)\n+0644E4 Compressed Size       00000000 (0)\n+0644E8 Uncompressed Size     00000000 (0)\n+0644EC Filename Length       0060 (96)\n+0644EE Extra Length          0009 (9)\n+0644F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x644F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+064550 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+064552   Length              0005 (5)\n+064554   Flags               01 (1) 'Modification'\n+064555   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+064559 LOCAL HEADER #195     04034B50 (67324752)\n+06455D Extract Zip Spec      14 (20) '2.0'\n+06455E Extract OS            00 (0) 'MS-DOS'\n+06455F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+064561 Compression Method    0000 (0) 'Stored'\n+064563 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+064567 CRC                   00000000 (0)\n+06456B Compressed Size       00000000 (0)\n+06456F Uncompressed Size     00000000 (0)\n+064573 Filename Length       0076 (118)\n+064575 Extra Length          0009 (9)\n+064577 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64577: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0645ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0645EF   Length              0005 (5)\n+0645F1   Flags               01 (1) 'Modification'\n+0645F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0645F6 PAYLOAD\n+\n+0654F0 DATA DESCRIPTOR       08074B50 (134695760)\n+0654F4 CRC                   42E654D4 (1122391252)\n+0654F8 Compressed Size       00000EFA (3834)\n+0654FC Uncompressed Size     00000EFA (3834)\n+\n+065500 LOCAL HEADER #196     04034B50 (67324752)\n+065504 Extract Zip Spec      14 (20) '2.0'\n+065505 Extract OS            00 (0) 'MS-DOS'\n+065506 General Purpose Flag  0000 (0)\n+065508 Compression Method    0000 (0) 'Stored'\n+06550A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06550E CRC                   00000000 (0)\n+065512 Compressed Size       00000000 (0)\n+065516 Uncompressed Size     00000000 (0)\n+06551A Filename Length       0066 (102)\n+06551C Extra Length          0009 (9)\n+06551E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6551E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+065584 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+065586   Length              0005 (5)\n+065588   Flags               01 (1) 'Modification'\n+065589   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06558D LOCAL HEADER #197     04034B50 (67324752)\n+065591 Extract Zip Spec      14 (20) '2.0'\n+065592 Extract OS            00 (0) 'MS-DOS'\n+065593 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+065595 Compression Method    0000 (0) 'Stored'\n+065597 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06559B CRC                   00000000 (0)\n+06559F Compressed Size       00000000 (0)\n+0655A3 Uncompressed Size     00000000 (0)\n+0655A7 Filename Length       007C (124)\n+0655A9 Extra Length          0009 (9)\n+0655AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x655AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+065627 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+065629   Length              0005 (5)\n+06562B   Flags               01 (1) 'Modification'\n+06562C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+065630 PAYLOAD\n+\n+066D07 DATA DESCRIPTOR       08074B50 (134695760)\n+066D0B CRC                   51B4F745 (1370814277)\n+066D0F Compressed Size       000016D7 (5847)\n+066D13 Uncompressed Size     000016D7 (5847)\n+\n+066D17 LOCAL HEADER #198     04034B50 (67324752)\n+066D1B Extract Zip Spec      14 (20) '2.0'\n+066D1C Extract OS            00 (0) 'MS-DOS'\n+066D1D General Purpose Flag  0000 (0)\n+066D1F Compression Method    0000 (0) 'Stored'\n+066D21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+066D25 CRC                   00000000 (0)\n+066D29 Compressed Size       00000000 (0)\n+066D2D Uncompressed Size     00000000 (0)\n+066D31 Filename Length       0026 (38)\n+066D33 Extra Length          0009 (9)\n+066D35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66D35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+066D5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+066D5D   Length              0005 (5)\n+066D5F   Flags               01 (1) 'Modification'\n+066D60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+066D64 LOCAL HEADER #199     04034B50 (67324752)\n+066D68 Extract Zip Spec      14 (20) '2.0'\n+066D69 Extract OS            00 (0) 'MS-DOS'\n+066D6A General Purpose Flag  0000 (0)\n+066D6C Compression Method    0000 (0) 'Stored'\n+066D6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+066D72 CRC                   00000000 (0)\n+066D76 Compressed Size       00000000 (0)\n+066D7A Uncompressed Size     00000000 (0)\n+066D7E Filename Length       002F (47)\n+066D80 Extra Length          0009 (9)\n+066D82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66D82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+066DB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+066DB3   Length              0005 (5)\n+066DB5   Flags               01 (1) 'Modification'\n+066DB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+066DBA LOCAL HEADER #200     04034B50 (67324752)\n+066DBE Extract Zip Spec      14 (20) '2.0'\n+066DBF Extract OS            00 (0) 'MS-DOS'\n+066DC0 General Purpose Flag  0000 (0)\n+066DC2 Compression Method    0000 (0) 'Stored'\n+066DC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+066DC8 CRC                   00000000 (0)\n+066DCC Compressed Size       00000000 (0)\n+066DD0 Uncompressed Size     00000000 (0)\n+066DD4 Filename Length       005E (94)\n+066DD6 Extra Length          0009 (9)\n+066DD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66DD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+066E36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+066E38   Length              0005 (5)\n+066E3A   Flags               01 (1) 'Modification'\n+066E3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+066E3F LOCAL HEADER #201     04034B50 (67324752)\n+066E43 Extract Zip Spec      14 (20) '2.0'\n+066E44 Extract OS            00 (0) 'MS-DOS'\n+066E45 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+066E47 Compression Method    0000 (0) 'Stored'\n+066E49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+066E4D CRC                   00000000 (0)\n+066E51 Compressed Size       00000000 (0)\n+066E55 Uncompressed Size     00000000 (0)\n+066E59 Filename Length       0074 (116)\n+066E5B Extra Length          0009 (9)\n+066E5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66E5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+066ED1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+066ED3   Length              0005 (5)\n+066ED5   Flags               01 (1) 'Modification'\n+066ED6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+066EDA PAYLOAD\n+\n+0675A0 DATA DESCRIPTOR       08074B50 (134695760)\n+0675A4 CRC                   357DA477 (897426551)\n+0675A8 Compressed Size       000006C6 (1734)\n+0675AC Uncompressed Size     000006C6 (1734)\n+\n+0675B0 LOCAL HEADER #202     04034B50 (67324752)\n+0675B4 Extract Zip Spec      14 (20) '2.0'\n+0675B5 Extract OS            00 (0) 'MS-DOS'\n+0675B6 General Purpose Flag  0000 (0)\n+0675B8 Compression Method    0000 (0) 'Stored'\n+0675BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0675BE CRC                   00000000 (0)\n+0675C2 Compressed Size       00000000 (0)\n+0675C6 Uncompressed Size     00000000 (0)\n+0675CA Filename Length       005B (91)\n+0675CC Extra Length          0009 (9)\n+0675CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x675CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+067629 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06762B   Length              0005 (5)\n+06762D   Flags               01 (1) 'Modification'\n+06762E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+067632 LOCAL HEADER #203     04034B50 (67324752)\n+067636 Extract Zip Spec      14 (20) '2.0'\n+067637 Extract OS            00 (0) 'MS-DOS'\n+067638 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06763A Compression Method    0000 (0) 'Stored'\n+06763C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+067640 CRC                   00000000 (0)\n+067644 Compressed Size       00000000 (0)\n+067648 Uncompressed Size     00000000 (0)\n+06764C Filename Length       0071 (113)\n+06764E Extra Length          0009 (9)\n+067650 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x67650: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0676C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0676C3   Length              0005 (5)\n+0676C5   Flags               01 (1) 'Modification'\n+0676C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0676CA PAYLOAD\n+\n+068086 DATA DESCRIPTOR       08074B50 (134695760)\n+06808A CRC                   F9CAC97B (4190816635)\n+06808E Compressed Size       000009BC (2492)\n+068092 Uncompressed Size     000009BC (2492)\n+\n+068096 LOCAL HEADER #204     04034B50 (67324752)\n+06809A Extract Zip Spec      14 (20) '2.0'\n+06809B Extract OS            00 (0) 'MS-DOS'\n+06809C General Purpose Flag  0000 (0)\n+06809E Compression Method    0000 (0) 'Stored'\n+0680A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0680A4 CRC                   00000000 (0)\n+0680A8 Compressed Size       00000000 (0)\n+0680AC Uncompressed Size     00000000 (0)\n+0680B0 Filename Length       0061 (97)\n+0680B2 Extra Length          0009 (9)\n+0680B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x680B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+068115 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+068117   Length              0005 (5)\n+068119   Flags               01 (1) 'Modification'\n+06811A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06811E LOCAL HEADER #205     04034B50 (67324752)\n+068122 Extract Zip Spec      14 (20) '2.0'\n+068123 Extract OS            00 (0) 'MS-DOS'\n+068124 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+068126 Compression Method    0000 (0) 'Stored'\n+068128 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06812C CRC                   00000000 (0)\n+068130 Compressed Size       00000000 (0)\n+068134 Uncompressed Size     00000000 (0)\n+068138 Filename Length       0077 (119)\n+06813A Extra Length          0009 (9)\n+06813C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6813C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0681B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0681B5   Length              0005 (5)\n+0681B7   Flags               01 (1) 'Modification'\n+0681B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0681BC PAYLOAD\n+\n+068BC3 DATA DESCRIPTOR       08074B50 (134695760)\n+068BC7 CRC                   9DEB8C8B (2649459851)\n+068BCB Compressed Size       00000A07 (2567)\n+068BCF Uncompressed Size     00000A07 (2567)\n+\n+068BD3 LOCAL HEADER #206     04034B50 (67324752)\n+068BD7 Extract Zip Spec      14 (20) '2.0'\n+068BD8 Extract OS            00 (0) 'MS-DOS'\n+068BD9 General Purpose Flag  0000 (0)\n+068BDB Compression Method    0000 (0) 'Stored'\n+068BDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+068BE1 CRC                   00000000 (0)\n+068BE5 Compressed Size       00000000 (0)\n+068BE9 Uncompressed Size     00000000 (0)\n+068BED Filename Length       005B (91)\n+068BEF Extra Length          0009 (9)\n+068BF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x68BF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+068C4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+068C4E   Length              0005 (5)\n+068C50   Flags               01 (1) 'Modification'\n+068C51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+068C55 LOCAL HEADER #207     04034B50 (67324752)\n+068C59 Extract Zip Spec      14 (20) '2.0'\n+068C5A Extract OS            00 (0) 'MS-DOS'\n+068C5B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+068C5D Compression Method    0000 (0) 'Stored'\n+068C5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+068C63 CRC                   00000000 (0)\n+068C67 Compressed Size       00000000 (0)\n+068C6B Uncompressed Size     00000000 (0)\n+068C6F Filename Length       0071 (113)\n+068C71 Extra Length          0009 (9)\n+068C73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x68C73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+068CE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+068CE6   Length              0005 (5)\n+068CE8   Flags               01 (1) 'Modification'\n+068CE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+068CED PAYLOAD\n+\n+069ACB DATA DESCRIPTOR       08074B50 (134695760)\n+069ACF CRC                   85B17459 (2242999385)\n+069AD3 Compressed Size       00000DDE (3550)\n+069AD7 Uncompressed Size     00000DDE (3550)\n+\n+069ADB LOCAL HEADER #208     04034B50 (67324752)\n+069ADF Extract Zip Spec      14 (20) '2.0'\n+069AE0 Extract OS            00 (0) 'MS-DOS'\n+069AE1 General Purpose Flag  0000 (0)\n+069AE3 Compression Method    0000 (0) 'Stored'\n+069AE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+069AE9 CRC                   00000000 (0)\n+069AED Compressed Size       00000000 (0)\n+069AF1 Uncompressed Size     00000000 (0)\n+069AF5 Filename Length       0066 (102)\n+069AF7 Extra Length          0009 (9)\n+069AF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x69AF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+069B5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+069B61   Length              0005 (5)\n+069B63   Flags               01 (1) 'Modification'\n+069B64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+069B68 LOCAL HEADER #209     04034B50 (67324752)\n+069B6C Extract Zip Spec      14 (20) '2.0'\n+069B6D Extract OS            00 (0) 'MS-DOS'\n+069B6E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+069B70 Compression Method    0000 (0) 'Stored'\n+069B72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+069B76 CRC                   00000000 (0)\n+069B7A Compressed Size       00000000 (0)\n+069B7E Uncompressed Size     00000000 (0)\n+069B82 Filename Length       007C (124)\n+069B84 Extra Length          0009 (9)\n+069B86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x69B86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+069C02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+069C04   Length              0005 (5)\n+069C06   Flags               01 (1) 'Modification'\n+069C07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+069C0B PAYLOAD\n+\n+06A1DA DATA DESCRIPTOR       08074B50 (134695760)\n+06A1DE CRC                   9C229073 (2619510899)\n+06A1E2 Compressed Size       000005CF (1487)\n+06A1E6 Uncompressed Size     000005CF (1487)\n+\n+06A1EA LOCAL HEADER #210     04034B50 (67324752)\n+06A1EE Extract Zip Spec      14 (20) '2.0'\n+06A1EF Extract OS            00 (0) 'MS-DOS'\n+06A1F0 General Purpose Flag  0000 (0)\n+06A1F2 Compression Method    0000 (0) 'Stored'\n+06A1F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A1F8 CRC                   00000000 (0)\n+06A1FC Compressed Size       00000000 (0)\n+06A200 Uncompressed Size     00000000 (0)\n+06A204 Filename Length       0066 (102)\n+06A206 Extra Length          0009 (9)\n+06A208 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A208: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06A26E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06A270   Length              0005 (5)\n+06A272   Flags               01 (1) 'Modification'\n+06A273   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06A277 LOCAL HEADER #211     04034B50 (67324752)\n+06A27B Extract Zip Spec      14 (20) '2.0'\n+06A27C Extract OS            00 (0) 'MS-DOS'\n+06A27D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06A27F Compression Method    0000 (0) 'Stored'\n+06A281 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A285 CRC                   00000000 (0)\n+06A289 Compressed Size       00000000 (0)\n+06A28D Uncompressed Size     00000000 (0)\n+06A291 Filename Length       007C (124)\n+06A293 Extra Length          0009 (9)\n+06A295 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A295: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06A311 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06A313   Length              0005 (5)\n+06A315   Flags               01 (1) 'Modification'\n+06A316   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06A31A PAYLOAD\n+\n+06A8DC DATA DESCRIPTOR       08074B50 (134695760)\n+06A8E0 CRC                   A57691CD (2776011213)\n+06A8E4 Compressed Size       000005C2 (1474)\n+06A8E8 Uncompressed Size     000005C2 (1474)\n+\n+06A8EC LOCAL HEADER #212     04034B50 (67324752)\n+06A8F0 Extract Zip Spec      14 (20) '2.0'\n+06A8F1 Extract OS            00 (0) 'MS-DOS'\n+06A8F2 General Purpose Flag  0000 (0)\n+06A8F4 Compression Method    0000 (0) 'Stored'\n+06A8F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A8FA CRC                   00000000 (0)\n+06A8FE Compressed Size       00000000 (0)\n+06A902 Uncompressed Size     00000000 (0)\n+06A906 Filename Length       0065 (101)\n+06A908 Extra Length          0009 (9)\n+06A90A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A90A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06A96F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06A971   Length              0005 (5)\n+06A973   Flags               01 (1) 'Modification'\n+06A974   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06A978 LOCAL HEADER #213     04034B50 (67324752)\n+06A97C Extract Zip Spec      14 (20) '2.0'\n+06A97D Extract OS            00 (0) 'MS-DOS'\n+06A97E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06A980 Compression Method    0000 (0) 'Stored'\n+06A982 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A986 CRC                   00000000 (0)\n+06A98A Compressed Size       00000000 (0)\n+06A98E Uncompressed Size     00000000 (0)\n+06A992 Filename Length       007B (123)\n+06A994 Extra Length          0009 (9)\n+06A996 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A996: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06AA11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06AA13   Length              0005 (5)\n+06AA15   Flags               01 (1) 'Modification'\n+06AA16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06AA1A PAYLOAD\n+\n+06B154 DATA DESCRIPTOR       08074B50 (134695760)\n+06B158 CRC                   6CD31445 (1825772613)\n+06B15C Compressed Size       0000073A (1850)\n+06B160 Uncompressed Size     0000073A (1850)\n+\n+06B164 LOCAL HEADER #214     04034B50 (67324752)\n+06B168 Extract Zip Spec      14 (20) '2.0'\n+06B169 Extract OS            00 (0) 'MS-DOS'\n+06B16A General Purpose Flag  0000 (0)\n+06B16C Compression Method    0000 (0) 'Stored'\n+06B16E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B172 CRC                   00000000 (0)\n+06B176 Compressed Size       00000000 (0)\n+06B17A Uncompressed Size     00000000 (0)\n+06B17E Filename Length       0063 (99)\n+06B180 Extra Length          0009 (9)\n+06B182 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6B182: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06B1E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B1E7   Length              0005 (5)\n+06B1E9   Flags               01 (1) 'Modification'\n+06B1EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06B1EE LOCAL HEADER #215     04034B50 (67324752)\n+06B1F2 Extract Zip Spec      14 (20) '2.0'\n+06B1F3 Extract OS            00 (0) 'MS-DOS'\n+06B1F4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06B1F6 Compression Method    0000 (0) 'Stored'\n+06B1F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B1FC CRC                   00000000 (0)\n+06B200 Compressed Size       00000000 (0)\n+06B204 Uncompressed Size     00000000 (0)\n+06B208 Filename Length       0079 (121)\n+06B20A Extra Length          0009 (9)\n+06B20C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6B20C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06B285 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B287   Length              0005 (5)\n+06B289   Flags               01 (1) 'Modification'\n+06B28A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06B28E PAYLOAD\n+\n+06BD20 DATA DESCRIPTOR       08074B50 (134695760)\n+06BD24 CRC                   C97DF8D6 (3380476118)\n+06BD28 Compressed Size       00000A92 (2706)\n+06BD2C Uncompressed Size     00000A92 (2706)\n+\n+06BD30 LOCAL HEADER #216     04034B50 (67324752)\n+06BD34 Extract Zip Spec      14 (20) '2.0'\n+06BD35 Extract OS            00 (0) 'MS-DOS'\n+06BD36 General Purpose Flag  0000 (0)\n+06BD38 Compression Method    0000 (0) 'Stored'\n+06BD3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06BD3E CRC                   00000000 (0)\n+06BD42 Compressed Size       00000000 (0)\n+06BD46 Uncompressed Size     00000000 (0)\n+06BD4A Filename Length       0023 (35)\n+06BD4C Extra Length          0009 (9)\n+06BD4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6BD4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06BD71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06BD73   Length              0005 (5)\n+06BD75   Flags               01 (1) 'Modification'\n+06BD76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06BD7A LOCAL HEADER #217     04034B50 (67324752)\n+06BD7E Extract Zip Spec      14 (20) '2.0'\n+06BD7F Extract OS            00 (0) 'MS-DOS'\n+06BD80 General Purpose Flag  0000 (0)\n+06BD82 Compression Method    0000 (0) 'Stored'\n+06BD84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06BD88 CRC                   00000000 (0)\n+06BD8C Compressed Size       00000000 (0)\n+06BD90 Uncompressed Size     00000000 (0)\n+06BD94 Filename Length       002C (44)\n+06BD96 Extra Length          0009 (9)\n+06BD98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6BD98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06BDC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06BDC6   Length              0005 (5)\n+06BDC8   Flags               01 (1) 'Modification'\n+06BDC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06BDCD LOCAL HEADER #218     04034B50 (67324752)\n+06BDD1 Extract Zip Spec      14 (20) '2.0'\n+06BDD2 Extract OS            00 (0) 'MS-DOS'\n+06BDD3 General Purpose Flag  0000 (0)\n+06BDD5 Compression Method    0000 (0) 'Stored'\n+06BDD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06BDDB CRC                   00000000 (0)\n+06BDDF Compressed Size       00000000 (0)\n+06BDE3 Uncompressed Size     00000000 (0)\n+06BDE7 Filename Length       0058 (88)\n+06BDE9 Extra Length          0009 (9)\n+06BDEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6BDEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06BE43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06BE45   Length              0005 (5)\n+06BE47   Flags               01 (1) 'Modification'\n+06BE48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06BE4C LOCAL HEADER #219     04034B50 (67324752)\n+06BE50 Extract Zip Spec      14 (20) '2.0'\n+06BE51 Extract OS            00 (0) 'MS-DOS'\n+06BE52 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06BE54 Compression Method    0000 (0) 'Stored'\n+06BE56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06BE5A CRC                   00000000 (0)\n+06BE5E Compressed Size       00000000 (0)\n+06BE62 Uncompressed Size     00000000 (0)\n+06BE66 Filename Length       006E (110)\n+06BE68 Extra Length          0009 (9)\n+06BE6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6BE6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06BED8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06BEDA   Length              0005 (5)\n+06BEDC   Flags               01 (1) 'Modification'\n+06BEDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06BEE1 PAYLOAD\n+\n+06C676 DATA DESCRIPTOR       08074B50 (134695760)\n+06C67A CRC                   0B04A112 (184852754)\n+06C67E Compressed Size       00000795 (1941)\n+06C682 Uncompressed Size     00000795 (1941)\n+\n+06C686 LOCAL HEADER #220     04034B50 (67324752)\n+06C68A Extract Zip Spec      14 (20) '2.0'\n+06C68B Extract OS            00 (0) 'MS-DOS'\n+06C68C General Purpose Flag  0000 (0)\n+06C68E Compression Method    0000 (0) 'Stored'\n+06C690 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C694 CRC                   00000000 (0)\n+06C698 Compressed Size       00000000 (0)\n+06C69C Uncompressed Size     00000000 (0)\n+06C6A0 Filename Length       0031 (49)\n+06C6A2 Extra Length          0009 (9)\n+06C6A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C6A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C6D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C6D7   Length              0005 (5)\n+06C6D9   Flags               01 (1) 'Modification'\n+06C6DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06C6DE LOCAL HEADER #221     04034B50 (67324752)\n+06C6E2 Extract Zip Spec      14 (20) '2.0'\n+06C6E3 Extract OS            00 (0) 'MS-DOS'\n+06C6E4 General Purpose Flag  0000 (0)\n+06C6E6 Compression Method    0000 (0) 'Stored'\n+06C6E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C6EC CRC                   00000000 (0)\n+06C6F0 Compressed Size       00000000 (0)\n+06C6F4 Uncompressed Size     00000000 (0)\n+06C6F8 Filename Length       003A (58)\n+06C6FA Extra Length          0009 (9)\n+06C6FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C6FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C736 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C738   Length              0005 (5)\n+06C73A   Flags               01 (1) 'Modification'\n+06C73B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06C73F LOCAL HEADER #222     04034B50 (67324752)\n+06C743 Extract Zip Spec      14 (20) '2.0'\n+06C744 Extract OS            00 (0) 'MS-DOS'\n+06C745 General Purpose Flag  0000 (0)\n+06C747 Compression Method    0000 (0) 'Stored'\n+06C749 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C74D CRC                   00000000 (0)\n+06C751 Compressed Size       00000000 (0)\n+06C755 Uncompressed Size     00000000 (0)\n+06C759 Filename Length       006C (108)\n+06C75B Extra Length          0009 (9)\n+06C75D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C75D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C7C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C7CB   Length              0005 (5)\n+06C7CD   Flags               01 (1) 'Modification'\n+06C7CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06C7D2 LOCAL HEADER #223     04034B50 (67324752)\n+06C7D6 Extract Zip Spec      14 (20) '2.0'\n+06C7D7 Extract OS            00 (0) 'MS-DOS'\n+06C7D8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06C7DA Compression Method    0000 (0) 'Stored'\n+06C7DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C7E0 CRC                   00000000 (0)\n+06C7E4 Compressed Size       00000000 (0)\n+06C7E8 Uncompressed Size     00000000 (0)\n+06C7EC Filename Length       0082 (130)\n+06C7EE Extra Length          0009 (9)\n+06C7F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C7F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C872 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C874   Length              0005 (5)\n+06C876   Flags               01 (1) 'Modification'\n+06C877   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06C87B PAYLOAD\n+\n+06D126 DATA DESCRIPTOR       08074B50 (134695760)\n+06D12A CRC                   9A51A289 (2589041289)\n+06D12E Compressed Size       000008AB (2219)\n+06D132 Uncompressed Size     000008AB (2219)\n+\n+06D136 LOCAL HEADER #224     04034B50 (67324752)\n+06D13A Extract Zip Spec      14 (20) '2.0'\n+06D13B Extract OS            00 (0) 'MS-DOS'\n+06D13C General Purpose Flag  0000 (0)\n+06D13E Compression Method    0000 (0) 'Stored'\n+06D140 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D144 CRC                   00000000 (0)\n+06D148 Compressed Size       00000000 (0)\n+06D14C Uncompressed Size     00000000 (0)\n+06D150 Filename Length       0022 (34)\n+06D152 Extra Length          0009 (9)\n+06D154 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D154: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06D176 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06D178   Length              0005 (5)\n+06D17A   Flags               01 (1) 'Modification'\n+06D17B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06D17F LOCAL HEADER #225     04034B50 (67324752)\n+06D183 Extract Zip Spec      14 (20) '2.0'\n+06D184 Extract OS            00 (0) 'MS-DOS'\n+06D185 General Purpose Flag  0000 (0)\n+06D187 Compression Method    0000 (0) 'Stored'\n+06D189 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D18D CRC                   00000000 (0)\n+06D191 Compressed Size       00000000 (0)\n+06D195 Uncompressed Size     00000000 (0)\n+06D199 Filename Length       002B (43)\n+06D19B Extra Length          0009 (9)\n+06D19D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D19D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06D1C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06D1CA   Length              0005 (5)\n+06D1CC   Flags               01 (1) 'Modification'\n+06D1CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06D1D1 LOCAL HEADER #226     04034B50 (67324752)\n+06D1D5 Extract Zip Spec      14 (20) '2.0'\n+06D1D6 Extract OS            00 (0) 'MS-DOS'\n+06D1D7 General Purpose Flag  0000 (0)\n+06D1D9 Compression Method    0000 (0) 'Stored'\n+06D1DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D1DF CRC                   00000000 (0)\n+06D1E3 Compressed Size       00000000 (0)\n+06D1E7 Uncompressed Size     00000000 (0)\n+06D1EB Filename Length       004D (77)\n+06D1ED Extra Length          0009 (9)\n+06D1EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D1EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06D23C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06D23E   Length              0005 (5)\n+06D240   Flags               01 (1) 'Modification'\n+06D241   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06D245 LOCAL HEADER #227     04034B50 (67324752)\n+06D249 Extract Zip Spec      14 (20) '2.0'\n+06D24A Extract OS            00 (0) 'MS-DOS'\n+06D24B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06D24D Compression Method    0000 (0) 'Stored'\n+06D24F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D253 CRC                   00000000 (0)\n+06D257 Compressed Size       00000000 (0)\n+06D25B Uncompressed Size     00000000 (0)\n+06D25F Filename Length       0063 (99)\n+06D261 Extra Length          0009 (9)\n+06D263 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D263: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06D2C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06D2C8   Length              0005 (5)\n+06D2CA   Flags               01 (1) 'Modification'\n+06D2CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06D2CF PAYLOAD\n+\n+070C3E DATA DESCRIPTOR       08074B50 (134695760)\n+070C42 CRC                   BEAE3D9C (3199090076)\n+070C46 Compressed Size       0000396F (14703)\n+070C4A Uncompressed Size     0000396F (14703)\n+\n+070C4E LOCAL HEADER #228     04034B50 (67324752)\n+070C52 Extract Zip Spec      14 (20) '2.0'\n+070C53 Extract OS            00 (0) 'MS-DOS'\n+070C54 General Purpose Flag  0000 (0)\n+070C56 Compression Method    0000 (0) 'Stored'\n+070C58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070C5C CRC                   00000000 (0)\n+070C60 Compressed Size       00000000 (0)\n+070C64 Uncompressed Size     00000000 (0)\n+070C68 Filename Length       0030 (48)\n+070C6A Extra Length          0009 (9)\n+070C6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70C6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070C9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070C9E   Length              0005 (5)\n+070CA0   Flags               01 (1) 'Modification'\n+070CA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070CA5 LOCAL HEADER #229     04034B50 (67324752)\n+070CA9 Extract Zip Spec      14 (20) '2.0'\n+070CAA Extract OS            00 (0) 'MS-DOS'\n+070CAB General Purpose Flag  0000 (0)\n+070CAD Compression Method    0000 (0) 'Stored'\n+070CAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070CB3 CRC                   00000000 (0)\n+070CB7 Compressed Size       00000000 (0)\n+070CBB Uncompressed Size     00000000 (0)\n+070CBF Filename Length       0039 (57)\n+070CC1 Extra Length          0009 (9)\n+070CC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70CC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070CFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070CFE   Length              0005 (5)\n+070D00   Flags               01 (1) 'Modification'\n+070D01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070D05 LOCAL HEADER #230     04034B50 (67324752)\n+070D09 Extract Zip Spec      14 (20) '2.0'\n+070D0A Extract OS            00 (0) 'MS-DOS'\n+070D0B General Purpose Flag  0000 (0)\n+070D0D Compression Method    0000 (0) 'Stored'\n+070D0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070D13 CRC                   00000000 (0)\n+070D17 Compressed Size       00000000 (0)\n+070D1B Uncompressed Size     00000000 (0)\n+070D1F Filename Length       006A (106)\n+070D21 Extra Length          0009 (9)\n+070D23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70D23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070D8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070D8F   Length              0005 (5)\n+070D91   Flags               01 (1) 'Modification'\n+070D92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070D96 LOCAL HEADER #231     04034B50 (67324752)\n+070D9A Extract Zip Spec      14 (20) '2.0'\n+070D9B Extract OS            00 (0) 'MS-DOS'\n+070D9C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+070D9E Compression Method    0000 (0) 'Stored'\n+070DA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070DA4 CRC                   00000000 (0)\n+070DA8 Compressed Size       00000000 (0)\n+070DAC Uncompressed Size     00000000 (0)\n+070DB0 Filename Length       0080 (128)\n+070DB2 Extra Length          0009 (9)\n+070DB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70DB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070E34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070E36   Length              0005 (5)\n+070E38   Flags               01 (1) 'Modification'\n+070E39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+070E3D PAYLOAD\n+\n+07325E DATA DESCRIPTOR       08074B50 (134695760)\n+073262 CRC                   29D620BA (701898938)\n+073266 Compressed Size       00002421 (9249)\n+07326A Uncompressed Size     00002421 (9249)\n+\n+07326E LOCAL HEADER #232     04034B50 (67324752)\n+073272 Extract Zip Spec      14 (20) '2.0'\n+073273 Extract OS            00 (0) 'MS-DOS'\n+073274 General Purpose Flag  0000 (0)\n+073276 Compression Method    0000 (0) 'Stored'\n+073278 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07327C CRC                   00000000 (0)\n+073280 Compressed Size       00000000 (0)\n+073284 Uncompressed Size     00000000 (0)\n+073288 Filename Length       003C (60)\n+07328A Extra Length          0009 (9)\n+07328C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7328C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0732C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0732CA   Length              0005 (5)\n+0732CC   Flags               01 (1) 'Modification'\n+0732CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0732D1 LOCAL HEADER #233     04034B50 (67324752)\n+0732D5 Extract Zip Spec      14 (20) '2.0'\n+0732D6 Extract OS            00 (0) 'MS-DOS'\n+0732D7 General Purpose Flag  0000 (0)\n+0732D9 Compression Method    0000 (0) 'Stored'\n+0732DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0732DF CRC                   00000000 (0)\n+0732E3 Compressed Size       00000000 (0)\n+0732E7 Uncompressed Size     00000000 (0)\n+0732EB Filename Length       0045 (69)\n+0732ED Extra Length          0009 (9)\n+0732EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x732EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+073334 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+073336   Length              0005 (5)\n+073338   Flags               01 (1) 'Modification'\n+073339   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07333D LOCAL HEADER #234     04034B50 (67324752)\n+073341 Extract Zip Spec      14 (20) '2.0'\n+073342 Extract OS            00 (0) 'MS-DOS'\n+073343 General Purpose Flag  0000 (0)\n+073345 Compression Method    0000 (0) 'Stored'\n+073347 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07334B CRC                   00000000 (0)\n+07334F Compressed Size       00000000 (0)\n+073353 Uncompressed Size     00000000 (0)\n+073357 Filename Length       0063 (99)\n+073359 Extra Length          0009 (9)\n+07335B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7335B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0733BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0733C0   Length              0005 (5)\n+0733C2   Flags               01 (1) 'Modification'\n+0733C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0733C7 LOCAL HEADER #235     04034B50 (67324752)\n+0733CB Extract Zip Spec      14 (20) '2.0'\n+0733CC Extract OS            00 (0) 'MS-DOS'\n+0733CD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0733CF Compression Method    0000 (0) 'Stored'\n+0733D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0733D5 CRC                   00000000 (0)\n+0733D9 Compressed Size       00000000 (0)\n+0733DD Uncompressed Size     00000000 (0)\n+0733E1 Filename Length       0079 (121)\n+0733E3 Extra Length          0009 (9)\n+0733E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x733E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07345E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+073460   Length              0005 (5)\n+073462   Flags               01 (1) 'Modification'\n+073463   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+073467 PAYLOAD\n+\n+076B4E DATA DESCRIPTOR       08074B50 (134695760)\n+076B52 CRC                   9ED7BE90 (2664939152)\n+076B56 Compressed Size       000036E7 (14055)\n+076B5A Uncompressed Size     000036E7 (14055)\n+\n+076B5E LOCAL HEADER #236     04034B50 (67324752)\n+076B62 Extract Zip Spec      14 (20) '2.0'\n+076B63 Extract OS            00 (0) 'MS-DOS'\n+076B64 General Purpose Flag  0000 (0)\n+076B66 Compression Method    0000 (0) 'Stored'\n+076B68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+076B6C CRC                   00000000 (0)\n+076B70 Compressed Size       00000000 (0)\n+076B74 Uncompressed Size     00000000 (0)\n+076B78 Filename Length       0063 (99)\n+076B7A Extra Length          0009 (9)\n+076B7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x76B7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+076BDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+076BE1   Length              0005 (5)\n+076BE3   Flags               01 (1) 'Modification'\n+076BE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+076BE8 LOCAL HEADER #237     04034B50 (67324752)\n+076BEC Extract Zip Spec      14 (20) '2.0'\n+076BED Extract OS            00 (0) 'MS-DOS'\n+076BEE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+076BF0 Compression Method    0000 (0) 'Stored'\n+076BF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+076BF6 CRC                   00000000 (0)\n+076BFA Compressed Size       00000000 (0)\n+076BFE Uncompressed Size     00000000 (0)\n+076C02 Filename Length       0079 (121)\n+076C04 Extra Length          0009 (9)\n+076C06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x76C06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+076C7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+076C81   Length              0005 (5)\n+076C83   Flags               01 (1) 'Modification'\n+076C84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+076C88 PAYLOAD\n+\n+07B41A DATA DESCRIPTOR       08074B50 (134695760)\n+07B41E CRC                   B51FDD91 (3038764433)\n+07B422 Compressed Size       00004792 (18322)\n+07B426 Uncompressed Size     00004792 (18322)\n+\n+07B42A LOCAL HEADER #238     04034B50 (67324752)\n+07B42E Extract Zip Spec      14 (20) '2.0'\n+07B42F Extract OS            00 (0) 'MS-DOS'\n+07B430 General Purpose Flag  0000 (0)\n+07B432 Compression Method    0000 (0) 'Stored'\n+07B434 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07B438 CRC                   00000000 (0)\n+07B43C Compressed Size       00000000 (0)\n+07B440 Uncompressed Size     00000000 (0)\n+07B444 Filename Length       0065 (101)\n+07B446 Extra Length          0009 (9)\n+07B448 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7B448: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07B4AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07B4AF   Length              0005 (5)\n+07B4B1   Flags               01 (1) 'Modification'\n+07B4B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07B4B6 LOCAL HEADER #239     04034B50 (67324752)\n+07B4BA Extract Zip Spec      14 (20) '2.0'\n+07B4BB Extract OS            00 (0) 'MS-DOS'\n+07B4BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+07B4BE Compression Method    0000 (0) 'Stored'\n+07B4C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07B4C4 CRC                   00000000 (0)\n+07B4C8 Compressed Size       00000000 (0)\n+07B4CC Uncompressed Size     00000000 (0)\n+07B4D0 Filename Length       007B (123)\n+07B4D2 Extra Length          0009 (9)\n+07B4D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7B4D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07B54F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07B551   Length              0005 (5)\n+07B553   Flags               01 (1) 'Modification'\n+07B554   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07B558 PAYLOAD\n+\n+081334 DATA DESCRIPTOR       08074B50 (134695760)\n+081338 CRC                   27CFA48B (667919499)\n+08133C Compressed Size       00005DDC (24028)\n+081340 Uncompressed Size     00005DDC (24028)\n+\n+081344 LOCAL HEADER #240     04034B50 (67324752)\n+081348 Extract Zip Spec      14 (20) '2.0'\n+081349 Extract OS            00 (0) 'MS-DOS'\n+08134A General Purpose Flag  0000 (0)\n+08134C Compression Method    0000 (0) 'Stored'\n+08134E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+081352 CRC                   00000000 (0)\n+081356 Compressed Size       00000000 (0)\n+08135A Uncompressed Size     00000000 (0)\n+08135E Filename Length       0069 (105)\n+081360 Extra Length          0009 (9)\n+081362 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x81362: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0813CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0813CD   Length              0005 (5)\n+0813CF   Flags               01 (1) 'Modification'\n+0813D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0813D4 LOCAL HEADER #241     04034B50 (67324752)\n+0813D8 Extract Zip Spec      14 (20) '2.0'\n+0813D9 Extract OS            00 (0) 'MS-DOS'\n+0813DA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0813DC Compression Method    0000 (0) 'Stored'\n+0813DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0813E2 CRC                   00000000 (0)\n+0813E6 Compressed Size       00000000 (0)\n+0813EA Uncompressed Size     00000000 (0)\n+0813EE Filename Length       007F (127)\n+0813F0 Extra Length          0009 (9)\n+0813F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x813F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+081471 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+081473   Length              0005 (5)\n+081475   Flags               01 (1) 'Modification'\n+081476   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08147A PAYLOAD\n+\n+084FB4 DATA DESCRIPTOR       08074B50 (134695760)\n+084FB8 CRC                   620AB78F (1644869519)\n+084FBC Compressed Size       00003B3A (15162)\n+084FC0 Uncompressed Size     00003B3A (15162)\n+\n+084FC4 LOCAL HEADER #242     04034B50 (67324752)\n+084FC8 Extract Zip Spec      14 (20) '2.0'\n+084FC9 Extract OS            00 (0) 'MS-DOS'\n+084FCA General Purpose Flag  0000 (0)\n+084FCC Compression Method    0000 (0) 'Stored'\n+084FCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+084FD2 CRC                   00000000 (0)\n+084FD6 Compressed Size       00000000 (0)\n+084FDA Uncompressed Size     00000000 (0)\n+084FDE Filename Length       0069 (105)\n+084FE0 Extra Length          0009 (9)\n+084FE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x84FE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08504B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08504D   Length              0005 (5)\n+08504F   Flags               01 (1) 'Modification'\n+085050   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+085054 LOCAL HEADER #243     04034B50 (67324752)\n+085058 Extract Zip Spec      14 (20) '2.0'\n+085059 Extract OS            00 (0) 'MS-DOS'\n+08505A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08505C Compression Method    0000 (0) 'Stored'\n+08505E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+085062 CRC                   00000000 (0)\n+085066 Compressed Size       00000000 (0)\n+08506A Uncompressed Size     00000000 (0)\n+08506E Filename Length       007F (127)\n+085070 Extra Length          0009 (9)\n+085072 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x85072: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0850F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0850F3   Length              0005 (5)\n+0850F5   Flags               01 (1) 'Modification'\n+0850F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0850FA PAYLOAD\n+\n+089963 DATA DESCRIPTOR       08074B50 (134695760)\n+089967 CRC                   937A07E6 (2474248166)\n+08996B Compressed Size       00004869 (18537)\n+08996F Uncompressed Size     00004869 (18537)\n+\n+089973 LOCAL HEADER #244     04034B50 (67324752)\n+089977 Extract Zip Spec      14 (20) '2.0'\n+089978 Extract OS            00 (0) 'MS-DOS'\n+089979 General Purpose Flag  0000 (0)\n+08997B Compression Method    0000 (0) 'Stored'\n+08997D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+089981 CRC                   00000000 (0)\n+089985 Compressed Size       00000000 (0)\n+089989 Uncompressed Size     00000000 (0)\n+08998D Filename Length       006D (109)\n+08998F Extra Length          0009 (9)\n+089991 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x89991: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0899FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+089A00   Length              0005 (5)\n+089A02   Flags               01 (1) 'Modification'\n+089A03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+089A07 LOCAL HEADER #245     04034B50 (67324752)\n+089A0B Extract Zip Spec      14 (20) '2.0'\n+089A0C Extract OS            00 (0) 'MS-DOS'\n+089A0D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+089A0F Compression Method    0000 (0) 'Stored'\n+089A11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+089A15 CRC                   00000000 (0)\n+089A19 Compressed Size       00000000 (0)\n+089A1D Uncompressed Size     00000000 (0)\n+089A21 Filename Length       0083 (131)\n+089A23 Extra Length          0009 (9)\n+089A25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x89A25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+089AA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+089AAA   Length              0005 (5)\n+089AAC   Flags               01 (1) 'Modification'\n+089AAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+089AB1 PAYLOAD\n+\n+08A590 DATA DESCRIPTOR       08074B50 (134695760)\n+08A594 CRC                   53DFF1D7 (1407185367)\n+08A598 Compressed Size       00000ADF (2783)\n+08A59C Uncompressed Size     00000ADF (2783)\n+\n+08A5A0 LOCAL HEADER #246     04034B50 (67324752)\n+08A5A4 Extract Zip Spec      14 (20) '2.0'\n+08A5A5 Extract OS            00 (0) 'MS-DOS'\n+08A5A6 General Purpose Flag  0000 (0)\n+08A5A8 Compression Method    0000 (0) 'Stored'\n+08A5AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A5AE CRC                   00000000 (0)\n+08A5B2 Compressed Size       00000000 (0)\n+08A5B6 Uncompressed Size     00000000 (0)\n+08A5BA Filename Length       0069 (105)\n+08A5BC Extra Length          0009 (9)\n+08A5BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A5BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A627 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A629   Length              0005 (5)\n+08A62B   Flags               01 (1) 'Modification'\n+08A62C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08A630 LOCAL HEADER #247     04034B50 (67324752)\n+08A634 Extract Zip Spec      14 (20) '2.0'\n+08A635 Extract OS            00 (0) 'MS-DOS'\n+08A636 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08A638 Compression Method    0000 (0) 'Stored'\n+08A63A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A63E CRC                   00000000 (0)\n+08A642 Compressed Size       00000000 (0)\n+08A646 Uncompressed Size     00000000 (0)\n+08A64A Filename Length       007F (127)\n+08A64C Extra Length          0009 (9)\n+08A64E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A64E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A6CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A6CF   Length              0005 (5)\n+08A6D1   Flags               01 (1) 'Modification'\n+08A6D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08A6D6 PAYLOAD\n+\n+08B00F DATA DESCRIPTOR       08074B50 (134695760)\n+08B013 CRC                   6D3A5445 (1832539205)\n+08B017 Compressed Size       00000939 (2361)\n+08B01B Uncompressed Size     00000939 (2361)\n+\n+08B01F LOCAL HEADER #248     04034B50 (67324752)\n+08B023 Extract Zip Spec      14 (20) '2.0'\n+08B024 Extract OS            00 (0) 'MS-DOS'\n+08B025 General Purpose Flag  0000 (0)\n+08B027 Compression Method    0000 (0) 'Stored'\n+08B029 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08B02D CRC                   00000000 (0)\n+08B031 Compressed Size       00000000 (0)\n+08B035 Uncompressed Size     00000000 (0)\n+08B039 Filename Length       0078 (120)\n+08B03B Extra Length          0009 (9)\n+08B03D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8B03D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08B0B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08B0B7   Length              0005 (5)\n+08B0B9   Flags               01 (1) 'Modification'\n+08B0BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08B0BE LOCAL HEADER #249     04034B50 (67324752)\n+08B0C2 Extract Zip Spec      14 (20) '2.0'\n+08B0C3 Extract OS            00 (0) 'MS-DOS'\n+08B0C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08B0C6 Compression Method    0000 (0) 'Stored'\n+08B0C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08B0CC CRC                   00000000 (0)\n+08B0D0 Compressed Size       00000000 (0)\n+08B0D4 Uncompressed Size     00000000 (0)\n+08B0D8 Filename Length       008E (142)\n+08B0DA Extra Length          0009 (9)\n+08B0DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x8B145: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8B0DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08B1D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08B1D5   Length              0005 (5)\n-08B1D7   Flags               01 (1) 'Modification'\n-08B1D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08B1DC PAYLOAD\n-\n-08BFB9 DATA DESCRIPTOR       08074B50 (134695760)\n-08BFBD CRC                   5C6B1924 (1550522660)\n-08BFC1 Compressed Size       00000DDD (3549)\n-08BFC5 Uncompressed Size     00000DDD (3549)\n-\n-08BFC9 LOCAL HEADER #250     04034B50 (67324752)\n-08BFCD Extract Zip Spec      14 (20) '2.0'\n-08BFCE Extract OS            00 (0) 'MS-DOS'\n-08BFCF General Purpose Flag  0000 (0)\n-08BFD1 Compression Method    0000 (0) 'Stored'\n-08BFD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08BFD7 CRC                   00000000 (0)\n-08BFDB Compressed Size       00000000 (0)\n-08BFDF Uncompressed Size     00000000 (0)\n-08BFE3 Filename Length       0063 (99)\n-08BFE5 Extra Length          0009 (9)\n-08BFE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8BFE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08C04A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08C04C   Length              0005 (5)\n-08C04E   Flags               01 (1) 'Modification'\n-08C04F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08C053 LOCAL HEADER #251     04034B50 (67324752)\n-08C057 Extract Zip Spec      14 (20) '2.0'\n-08C058 Extract OS            00 (0) 'MS-DOS'\n-08C059 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08C05B Compression Method    0000 (0) 'Stored'\n-08C05D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08C061 CRC                   00000000 (0)\n-08C065 Compressed Size       00000000 (0)\n-08C069 Uncompressed Size     00000000 (0)\n-08C06D Filename Length       0079 (121)\n-08C06F Extra Length          0009 (9)\n-08C071 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8C071: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08C0EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08C0EC   Length              0005 (5)\n-08C0EE   Flags               01 (1) 'Modification'\n-08C0EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08C0F3 PAYLOAD\n-\n-095428 DATA DESCRIPTOR       08074B50 (134695760)\n-09542C CRC                   C7DF88BB (3353315515)\n-095430 Compressed Size       00009335 (37685)\n-095434 Uncompressed Size     00009335 (37685)\n-\n-095438 LOCAL HEADER #252     04034B50 (67324752)\n-09543C Extract Zip Spec      14 (20) '2.0'\n-09543D Extract OS            00 (0) 'MS-DOS'\n-09543E General Purpose Flag  0000 (0)\n-095440 Compression Method    0000 (0) 'Stored'\n-095442 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-095446 CRC                   00000000 (0)\n-09544A Compressed Size       00000000 (0)\n-09544E Uncompressed Size     00000000 (0)\n-095452 Filename Length       006C (108)\n-095454 Extra Length          0009 (9)\n-095456 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x95456: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0954C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0954C4   Length              0005 (5)\n-0954C6   Flags               01 (1) 'Modification'\n-0954C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0954CB LOCAL HEADER #253     04034B50 (67324752)\n-0954CF Extract Zip Spec      14 (20) '2.0'\n-0954D0 Extract OS            00 (0) 'MS-DOS'\n-0954D1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0954D3 Compression Method    0000 (0) 'Stored'\n-0954D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0954D9 CRC                   00000000 (0)\n-0954DD Compressed Size       00000000 (0)\n-0954E1 Uncompressed Size     00000000 (0)\n-0954E5 Filename Length       0082 (130)\n-0954E7 Extra Length          0009 (9)\n-0954E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x954E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09556B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09556D   Length              0005 (5)\n-09556F   Flags               01 (1) 'Modification'\n-095570   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-095574 PAYLOAD\n-\n-097125 DATA DESCRIPTOR       08074B50 (134695760)\n-097129 CRC                   217BBE0B (561757707)\n-09712D Compressed Size       00001BB1 (7089)\n-097131 Uncompressed Size     00001BB1 (7089)\n-\n-097135 LOCAL HEADER #254     04034B50 (67324752)\n-097139 Extract Zip Spec      14 (20) '2.0'\n-09713A Extract OS            00 (0) 'MS-DOS'\n-09713B General Purpose Flag  0000 (0)\n-09713D Compression Method    0000 (0) 'Stored'\n-09713F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-097143 CRC                   00000000 (0)\n-097147 Compressed Size       00000000 (0)\n-09714B Uncompressed Size     00000000 (0)\n-09714F Filename Length       0069 (105)\n-097151 Extra Length          0009 (9)\n-097153 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97153: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0971BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0971BE   Length              0005 (5)\n-0971C0   Flags               01 (1) 'Modification'\n-0971C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0971C5 LOCAL HEADER #255     04034B50 (67324752)\n-0971C9 Extract Zip Spec      14 (20) '2.0'\n-0971CA Extract OS            00 (0) 'MS-DOS'\n-0971CB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0971CD Compression Method    0000 (0) 'Stored'\n-0971CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0971D3 CRC                   00000000 (0)\n-0971D7 Compressed Size       00000000 (0)\n-0971DB Uncompressed Size     00000000 (0)\n-0971DF Filename Length       007F (127)\n-0971E1 Extra Length          0009 (9)\n-0971E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x971E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-097262 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-097264   Length              0005 (5)\n-097266   Flags               01 (1) 'Modification'\n-097267   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09726B PAYLOAD\n-\n-09BCD5 DATA DESCRIPTOR       08074B50 (134695760)\n-09BCD9 CRC                   CF72F6D0 (3480418000)\n-09BCDD Compressed Size       00004A6A (19050)\n-09BCE1 Uncompressed Size     00004A6A (19050)\n-\n-09BCE5 LOCAL HEADER #256     04034B50 (67324752)\n-09BCE9 Extract Zip Spec      14 (20) '2.0'\n-09BCEA Extract OS            00 (0) 'MS-DOS'\n-09BCEB General Purpose Flag  0000 (0)\n-09BCED Compression Method    0000 (0) 'Stored'\n-09BCEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09BCF3 CRC                   00000000 (0)\n-09BCF7 Compressed Size       00000000 (0)\n-09BCFB Uncompressed Size     00000000 (0)\n-09BCFF Filename Length       0029 (41)\n-09BD01 Extra Length          0009 (9)\n-09BD03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9BD03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09BD2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09BD2E   Length              0005 (5)\n-09BD30   Flags               01 (1) 'Modification'\n-09BD31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09BD35 LOCAL HEADER #257     04034B50 (67324752)\n-09BD39 Extract Zip Spec      14 (20) '2.0'\n-09BD3A Extract OS            00 (0) 'MS-DOS'\n-09BD3B General Purpose Flag  0000 (0)\n-09BD3D Compression Method    0000 (0) 'Stored'\n-09BD3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09BD43 CRC                   00000000 (0)\n-09BD47 Compressed Size       00000000 (0)\n-09BD4B Uncompressed Size     00000000 (0)\n-09BD4F Filename Length       0032 (50)\n-09BD51 Extra Length          0009 (9)\n-09BD53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9BD53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09BD85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09BD87   Length              0005 (5)\n-09BD89   Flags               01 (1) 'Modification'\n-09BD8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09BD8E LOCAL HEADER #258     04034B50 (67324752)\n-09BD92 Extract Zip Spec      14 (20) '2.0'\n-09BD93 Extract OS            00 (0) 'MS-DOS'\n-09BD94 General Purpose Flag  0000 (0)\n-09BD96 Compression Method    0000 (0) 'Stored'\n-09BD98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09BD9C CRC                   00000000 (0)\n-09BDA0 Compressed Size       00000000 (0)\n-09BDA4 Uncompressed Size     00000000 (0)\n-09BDA8 Filename Length       006C (108)\n-09BDAA Extra Length          0009 (9)\n-09BDAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9BDAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09BE18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09BE1A   Length              0005 (5)\n-09BE1C   Flags               01 (1) 'Modification'\n-09BE1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09BE21 LOCAL HEADER #259     04034B50 (67324752)\n-09BE25 Extract Zip Spec      14 (20) '2.0'\n-09BE26 Extract OS            00 (0) 'MS-DOS'\n-09BE27 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09BE29 Compression Method    0000 (0) 'Stored'\n-09BE2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09BE2F CRC                   00000000 (0)\n-09BE33 Compressed Size       00000000 (0)\n-09BE37 Uncompressed Size     00000000 (0)\n-09BE3B Filename Length       0082 (130)\n-09BE3D Extra Length          0009 (9)\n-09BE3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9BE3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09BEC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09BEC3   Length              0005 (5)\n-09BEC5   Flags               01 (1) 'Modification'\n-09BEC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09BECA PAYLOAD\n-\n-09C89D DATA DESCRIPTOR       08074B50 (134695760)\n-09C8A1 CRC                   DCEFA272 (3706692210)\n-09C8A5 Compressed Size       000009D3 (2515)\n-09C8A9 Uncompressed Size     000009D3 (2515)\n-\n-09C8AD LOCAL HEADER #260     04034B50 (67324752)\n-09C8B1 Extract Zip Spec      14 (20) '2.0'\n-09C8B2 Extract OS            00 (0) 'MS-DOS'\n-09C8B3 General Purpose Flag  0000 (0)\n-09C8B5 Compression Method    0000 (0) 'Stored'\n-09C8B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09C8BB CRC                   00000000 (0)\n-09C8BF Compressed Size       00000000 (0)\n-09C8C3 Uncompressed Size     00000000 (0)\n-09C8C7 Filename Length       006E (110)\n-09C8C9 Extra Length          0009 (9)\n-09C8CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9C8CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09C939 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09C93B   Length              0005 (5)\n-09C93D   Flags               01 (1) 'Modification'\n-09C93E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09C942 LOCAL HEADER #261     04034B50 (67324752)\n-09C946 Extract Zip Spec      14 (20) '2.0'\n-09C947 Extract OS            00 (0) 'MS-DOS'\n-09C948 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09C94A Compression Method    0000 (0) 'Stored'\n-09C94C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09C950 CRC                   00000000 (0)\n-09C954 Compressed Size       00000000 (0)\n-09C958 Uncompressed Size     00000000 (0)\n-09C95C Filename Length       0084 (132)\n-09C95E Extra Length          0009 (9)\n-09C960 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+08B16A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08B16C   Length              0005 (5)\n+08B16E   Flags               01 (1) 'Modification'\n+08B16F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08B173 PAYLOAD\n+\n+08BF50 DATA DESCRIPTOR       08074B50 (134695760)\n+08BF54 CRC                   5C6B1924 (1550522660)\n+08BF58 Compressed Size       00000DDD (3549)\n+08BF5C Uncompressed Size     00000DDD (3549)\n+\n+08BF60 LOCAL HEADER #250     04034B50 (67324752)\n+08BF64 Extract Zip Spec      14 (20) '2.0'\n+08BF65 Extract OS            00 (0) 'MS-DOS'\n+08BF66 General Purpose Flag  0000 (0)\n+08BF68 Compression Method    0000 (0) 'Stored'\n+08BF6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08BF6E CRC                   00000000 (0)\n+08BF72 Compressed Size       00000000 (0)\n+08BF76 Uncompressed Size     00000000 (0)\n+08BF7A Filename Length       0063 (99)\n+08BF7C Extra Length          0009 (9)\n+08BF7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8BF7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08BFE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08BFE3   Length              0005 (5)\n+08BFE5   Flags               01 (1) 'Modification'\n+08BFE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08BFEA LOCAL HEADER #251     04034B50 (67324752)\n+08BFEE Extract Zip Spec      14 (20) '2.0'\n+08BFEF Extract OS            00 (0) 'MS-DOS'\n+08BFF0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08BFF2 Compression Method    0000 (0) 'Stored'\n+08BFF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08BFF8 CRC                   00000000 (0)\n+08BFFC Compressed Size       00000000 (0)\n+08C000 Uncompressed Size     00000000 (0)\n+08C004 Filename Length       0079 (121)\n+08C006 Extra Length          0009 (9)\n+08C008 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8C008: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08C081 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08C083   Length              0005 (5)\n+08C085   Flags               01 (1) 'Modification'\n+08C086   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08C08A PAYLOAD\n+\n+0953BF DATA DESCRIPTOR       08074B50 (134695760)\n+0953C3 CRC                   C7DF88BB (3353315515)\n+0953C7 Compressed Size       00009335 (37685)\n+0953CB Uncompressed Size     00009335 (37685)\n+\n+0953CF LOCAL HEADER #252     04034B50 (67324752)\n+0953D3 Extract Zip Spec      14 (20) '2.0'\n+0953D4 Extract OS            00 (0) 'MS-DOS'\n+0953D5 General Purpose Flag  0000 (0)\n+0953D7 Compression Method    0000 (0) 'Stored'\n+0953D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0953DD CRC                   00000000 (0)\n+0953E1 Compressed Size       00000000 (0)\n+0953E5 Uncompressed Size     00000000 (0)\n+0953E9 Filename Length       006C (108)\n+0953EB Extra Length          0009 (9)\n+0953ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x953ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+095459 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09545B   Length              0005 (5)\n+09545D   Flags               01 (1) 'Modification'\n+09545E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+095462 LOCAL HEADER #253     04034B50 (67324752)\n+095466 Extract Zip Spec      14 (20) '2.0'\n+095467 Extract OS            00 (0) 'MS-DOS'\n+095468 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09546A Compression Method    0000 (0) 'Stored'\n+09546C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+095470 CRC                   00000000 (0)\n+095474 Compressed Size       00000000 (0)\n+095478 Uncompressed Size     00000000 (0)\n+09547C Filename Length       0082 (130)\n+09547E Extra Length          0009 (9)\n+095480 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95480: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+095502 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+095504   Length              0005 (5)\n+095506   Flags               01 (1) 'Modification'\n+095507   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09550B PAYLOAD\n+\n+0970BC DATA DESCRIPTOR       08074B50 (134695760)\n+0970C0 CRC                   217BBE0B (561757707)\n+0970C4 Compressed Size       00001BB1 (7089)\n+0970C8 Uncompressed Size     00001BB1 (7089)\n+\n+0970CC LOCAL HEADER #254     04034B50 (67324752)\n+0970D0 Extract Zip Spec      14 (20) '2.0'\n+0970D1 Extract OS            00 (0) 'MS-DOS'\n+0970D2 General Purpose Flag  0000 (0)\n+0970D4 Compression Method    0000 (0) 'Stored'\n+0970D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0970DA CRC                   00000000 (0)\n+0970DE Compressed Size       00000000 (0)\n+0970E2 Uncompressed Size     00000000 (0)\n+0970E6 Filename Length       0069 (105)\n+0970E8 Extra Length          0009 (9)\n+0970EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x970EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+097153 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+097155   Length              0005 (5)\n+097157   Flags               01 (1) 'Modification'\n+097158   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09715C LOCAL HEADER #255     04034B50 (67324752)\n+097160 Extract Zip Spec      14 (20) '2.0'\n+097161 Extract OS            00 (0) 'MS-DOS'\n+097162 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+097164 Compression Method    0000 (0) 'Stored'\n+097166 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09716A CRC                   00000000 (0)\n+09716E Compressed Size       00000000 (0)\n+097172 Uncompressed Size     00000000 (0)\n+097176 Filename Length       007F (127)\n+097178 Extra Length          0009 (9)\n+09717A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9717A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0971F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0971FB   Length              0005 (5)\n+0971FD   Flags               01 (1) 'Modification'\n+0971FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+097202 PAYLOAD\n+\n+09BC6C DATA DESCRIPTOR       08074B50 (134695760)\n+09BC70 CRC                   CF72F6D0 (3480418000)\n+09BC74 Compressed Size       00004A6A (19050)\n+09BC78 Uncompressed Size     00004A6A (19050)\n+\n+09BC7C LOCAL HEADER #256     04034B50 (67324752)\n+09BC80 Extract Zip Spec      14 (20) '2.0'\n+09BC81 Extract OS            00 (0) 'MS-DOS'\n+09BC82 General Purpose Flag  0000 (0)\n+09BC84 Compression Method    0000 (0) 'Stored'\n+09BC86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09BC8A CRC                   00000000 (0)\n+09BC8E Compressed Size       00000000 (0)\n+09BC92 Uncompressed Size     00000000 (0)\n+09BC96 Filename Length       0029 (41)\n+09BC98 Extra Length          0009 (9)\n+09BC9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9BC9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09BCC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09BCC5   Length              0005 (5)\n+09BCC7   Flags               01 (1) 'Modification'\n+09BCC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09BCCC LOCAL HEADER #257     04034B50 (67324752)\n+09BCD0 Extract Zip Spec      14 (20) '2.0'\n+09BCD1 Extract OS            00 (0) 'MS-DOS'\n+09BCD2 General Purpose Flag  0000 (0)\n+09BCD4 Compression Method    0000 (0) 'Stored'\n+09BCD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09BCDA CRC                   00000000 (0)\n+09BCDE Compressed Size       00000000 (0)\n+09BCE2 Uncompressed Size     00000000 (0)\n+09BCE6 Filename Length       0032 (50)\n+09BCE8 Extra Length          0009 (9)\n+09BCEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9BCEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09BD1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09BD1E   Length              0005 (5)\n+09BD20   Flags               01 (1) 'Modification'\n+09BD21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09BD25 LOCAL HEADER #258     04034B50 (67324752)\n+09BD29 Extract Zip Spec      14 (20) '2.0'\n+09BD2A Extract OS            00 (0) 'MS-DOS'\n+09BD2B General Purpose Flag  0000 (0)\n+09BD2D Compression Method    0000 (0) 'Stored'\n+09BD2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09BD33 CRC                   00000000 (0)\n+09BD37 Compressed Size       00000000 (0)\n+09BD3B Uncompressed Size     00000000 (0)\n+09BD3F Filename Length       006C (108)\n+09BD41 Extra Length          0009 (9)\n+09BD43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9BD43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09BDAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09BDB1   Length              0005 (5)\n+09BDB3   Flags               01 (1) 'Modification'\n+09BDB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09BDB8 LOCAL HEADER #259     04034B50 (67324752)\n+09BDBC Extract Zip Spec      14 (20) '2.0'\n+09BDBD Extract OS            00 (0) 'MS-DOS'\n+09BDBE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09BDC0 Compression Method    0000 (0) 'Stored'\n+09BDC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09BDC6 CRC                   00000000 (0)\n+09BDCA Compressed Size       00000000 (0)\n+09BDCE Uncompressed Size     00000000 (0)\n+09BDD2 Filename Length       0082 (130)\n+09BDD4 Extra Length          0009 (9)\n+09BDD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9BDD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09BE58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09BE5A   Length              0005 (5)\n+09BE5C   Flags               01 (1) 'Modification'\n+09BE5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09BE61 PAYLOAD\n+\n+09C834 DATA DESCRIPTOR       08074B50 (134695760)\n+09C838 CRC                   DCEFA272 (3706692210)\n+09C83C Compressed Size       000009D3 (2515)\n+09C840 Uncompressed Size     000009D3 (2515)\n+\n+09C844 LOCAL HEADER #260     04034B50 (67324752)\n+09C848 Extract Zip Spec      14 (20) '2.0'\n+09C849 Extract OS            00 (0) 'MS-DOS'\n+09C84A General Purpose Flag  0000 (0)\n+09C84C Compression Method    0000 (0) 'Stored'\n+09C84E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C852 CRC                   00000000 (0)\n+09C856 Compressed Size       00000000 (0)\n+09C85A Uncompressed Size     00000000 (0)\n+09C85E Filename Length       006E (110)\n+09C860 Extra Length          0009 (9)\n+09C862 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9C862: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09C8D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C8D2   Length              0005 (5)\n+09C8D4   Flags               01 (1) 'Modification'\n+09C8D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09C8D9 LOCAL HEADER #261     04034B50 (67324752)\n+09C8DD Extract Zip Spec      14 (20) '2.0'\n+09C8DE Extract OS            00 (0) 'MS-DOS'\n+09C8DF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09C8E1 Compression Method    0000 (0) 'Stored'\n+09C8E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C8E7 CRC                   00000000 (0)\n+09C8EB Compressed Size       00000000 (0)\n+09C8EF Uncompressed Size     00000000 (0)\n+09C8F3 Filename Length       0084 (132)\n+09C8F5 Extra Length          0009 (9)\n+09C8F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x9C960: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9C8F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09C9E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09C9E6   Length              0005 (5)\n-09C9E8   Flags               01 (1) 'Modification'\n-09C9E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09C9ED PAYLOAD\n-\n-09DC63 DATA DESCRIPTOR       08074B50 (134695760)\n-09DC67 CRC                   26E963FE (652829694)\n-09DC6B Compressed Size       00001276 (4726)\n-09DC6F Uncompressed Size     00001276 (4726)\n-\n-09DC73 LOCAL HEADER #262     04034B50 (67324752)\n-09DC77 Extract Zip Spec      14 (20) '2.0'\n-09DC78 Extract OS            00 (0) 'MS-DOS'\n-09DC79 General Purpose Flag  0000 (0)\n-09DC7B Compression Method    0000 (0) 'Stored'\n-09DC7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09DC81 CRC                   00000000 (0)\n-09DC85 Compressed Size       00000000 (0)\n-09DC89 Uncompressed Size     00000000 (0)\n-09DC8D Filename Length       0028 (40)\n-09DC8F Extra Length          0009 (9)\n-09DC91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9DC91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09DCB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09DCBB   Length              0005 (5)\n-09DCBD   Flags               01 (1) 'Modification'\n-09DCBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09DCC2 LOCAL HEADER #263     04034B50 (67324752)\n-09DCC6 Extract Zip Spec      14 (20) '2.0'\n-09DCC7 Extract OS            00 (0) 'MS-DOS'\n-09DCC8 General Purpose Flag  0000 (0)\n-09DCCA Compression Method    0000 (0) 'Stored'\n-09DCCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09DCD0 CRC                   00000000 (0)\n-09DCD4 Compressed Size       00000000 (0)\n-09DCD8 Uncompressed Size     00000000 (0)\n-09DCDC Filename Length       0031 (49)\n-09DCDE Extra Length          0009 (9)\n-09DCE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9DCE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09DD11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09DD13   Length              0005 (5)\n-09DD15   Flags               01 (1) 'Modification'\n-09DD16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09DD1A LOCAL HEADER #264     04034B50 (67324752)\n-09DD1E Extract Zip Spec      14 (20) '2.0'\n-09DD1F Extract OS            00 (0) 'MS-DOS'\n-09DD20 General Purpose Flag  0000 (0)\n-09DD22 Compression Method    0000 (0) 'Stored'\n-09DD24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09DD28 CRC                   00000000 (0)\n-09DD2C Compressed Size       00000000 (0)\n-09DD30 Uncompressed Size     00000000 (0)\n-09DD34 Filename Length       0061 (97)\n-09DD36 Extra Length          0009 (9)\n-09DD38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9DD38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09DD99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09DD9B   Length              0005 (5)\n-09DD9D   Flags               01 (1) 'Modification'\n-09DD9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09DDA2 LOCAL HEADER #265     04034B50 (67324752)\n-09DDA6 Extract Zip Spec      14 (20) '2.0'\n-09DDA7 Extract OS            00 (0) 'MS-DOS'\n-09DDA8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09DDAA Compression Method    0000 (0) 'Stored'\n-09DDAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09DDB0 CRC                   00000000 (0)\n-09DDB4 Compressed Size       00000000 (0)\n-09DDB8 Uncompressed Size     00000000 (0)\n-09DDBC Filename Length       0077 (119)\n-09DDBE Extra Length          0009 (9)\n-09DDC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9DDC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09DE37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09DE39   Length              0005 (5)\n-09DE3B   Flags               01 (1) 'Modification'\n-09DE3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09DE40 PAYLOAD\n-\n-0A3304 DATA DESCRIPTOR       08074B50 (134695760)\n-0A3308 CRC                   9B32EF54 (2603806548)\n-0A330C Compressed Size       000054C4 (21700)\n-0A3310 Uncompressed Size     000054C4 (21700)\n-\n-0A3314 LOCAL HEADER #266     04034B50 (67324752)\n-0A3318 Extract Zip Spec      14 (20) '2.0'\n-0A3319 Extract OS            00 (0) 'MS-DOS'\n-0A331A General Purpose Flag  0000 (0)\n-0A331C Compression Method    0000 (0) 'Stored'\n-0A331E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A3322 CRC                   00000000 (0)\n-0A3326 Compressed Size       00000000 (0)\n-0A332A Uncompressed Size     00000000 (0)\n-0A332E Filename Length       0068 (104)\n-0A3330 Extra Length          0009 (9)\n-0A3332 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA3332: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A339A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A339C   Length              0005 (5)\n-0A339E   Flags               01 (1) 'Modification'\n-0A339F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A33A3 LOCAL HEADER #267     04034B50 (67324752)\n-0A33A7 Extract Zip Spec      14 (20) '2.0'\n-0A33A8 Extract OS            00 (0) 'MS-DOS'\n-0A33A9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A33AB Compression Method    0000 (0) 'Stored'\n-0A33AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A33B1 CRC                   00000000 (0)\n-0A33B5 Compressed Size       00000000 (0)\n-0A33B9 Uncompressed Size     00000000 (0)\n-0A33BD Filename Length       007E (126)\n-0A33BF Extra Length          0009 (9)\n-0A33C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA33C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A343F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A3441   Length              0005 (5)\n-0A3443   Flags               01 (1) 'Modification'\n-0A3444   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A3448 PAYLOAD\n-\n-0A4F69 DATA DESCRIPTOR       08074B50 (134695760)\n-0A4F6D CRC                   4975042F (1232405551)\n-0A4F71 Compressed Size       00001B21 (6945)\n-0A4F75 Uncompressed Size     00001B21 (6945)\n-\n-0A4F79 LOCAL HEADER #268     04034B50 (67324752)\n-0A4F7D Extract Zip Spec      14 (20) '2.0'\n-0A4F7E Extract OS            00 (0) 'MS-DOS'\n-0A4F7F General Purpose Flag  0000 (0)\n-0A4F81 Compression Method    0000 (0) 'Stored'\n-0A4F83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A4F87 CRC                   00000000 (0)\n-0A4F8B Compressed Size       00000000 (0)\n-0A4F8F Uncompressed Size     00000000 (0)\n-0A4F93 Filename Length       006B (107)\n-0A4F95 Extra Length          0009 (9)\n-0A4F97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA4F97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A5002 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A5004   Length              0005 (5)\n-0A5006   Flags               01 (1) 'Modification'\n-0A5007   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A500B LOCAL HEADER #269     04034B50 (67324752)\n-0A500F Extract Zip Spec      14 (20) '2.0'\n-0A5010 Extract OS            00 (0) 'MS-DOS'\n-0A5011 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A5013 Compression Method    0000 (0) 'Stored'\n-0A5015 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A5019 CRC                   00000000 (0)\n-0A501D Compressed Size       00000000 (0)\n-0A5021 Uncompressed Size     00000000 (0)\n-0A5025 Filename Length       0081 (129)\n-0A5027 Extra Length          0009 (9)\n-0A5029 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA5029: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A50AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A50AC   Length              0005 (5)\n-0A50AE   Flags               01 (1) 'Modification'\n-0A50AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A50B3 PAYLOAD\n-\n-0A659D DATA DESCRIPTOR       08074B50 (134695760)\n-0A65A1 CRC                   27E12F4C (669069132)\n-0A65A5 Compressed Size       000014EA (5354)\n-0A65A9 Uncompressed Size     000014EA (5354)\n-\n-0A65AD LOCAL HEADER #270     04034B50 (67324752)\n-0A65B1 Extract Zip Spec      14 (20) '2.0'\n-0A65B2 Extract OS            00 (0) 'MS-DOS'\n-0A65B3 General Purpose Flag  0000 (0)\n-0A65B5 Compression Method    0000 (0) 'Stored'\n-0A65B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A65BB CRC                   00000000 (0)\n-0A65BF Compressed Size       00000000 (0)\n-0A65C3 Uncompressed Size     00000000 (0)\n-0A65C7 Filename Length       006B (107)\n-0A65C9 Extra Length          0009 (9)\n-0A65CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA65CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A6636 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6638   Length              0005 (5)\n-0A663A   Flags               01 (1) 'Modification'\n-0A663B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A663F LOCAL HEADER #271     04034B50 (67324752)\n-0A6643 Extract Zip Spec      14 (20) '2.0'\n-0A6644 Extract OS            00 (0) 'MS-DOS'\n-0A6645 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A6647 Compression Method    0000 (0) 'Stored'\n-0A6649 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A664D CRC                   00000000 (0)\n-0A6651 Compressed Size       00000000 (0)\n-0A6655 Uncompressed Size     00000000 (0)\n-0A6659 Filename Length       0081 (129)\n-0A665B Extra Length          0009 (9)\n-0A665D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA665D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A66DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A66E0   Length              0005 (5)\n-0A66E2   Flags               01 (1) 'Modification'\n-0A66E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A66E7 PAYLOAD\n-\n-0A9DC7 DATA DESCRIPTOR       08074B50 (134695760)\n-0A9DCB CRC                   3E8950DE (1049186526)\n-0A9DCF Compressed Size       000036E0 (14048)\n-0A9DD3 Uncompressed Size     000036E0 (14048)\n-\n-0A9DD7 LOCAL HEADER #272     04034B50 (67324752)\n-0A9DDB Extract Zip Spec      14 (20) '2.0'\n-0A9DDC Extract OS            00 (0) 'MS-DOS'\n-0A9DDD General Purpose Flag  0000 (0)\n-0A9DDF Compression Method    0000 (0) 'Stored'\n-0A9DE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A9DE5 CRC                   00000000 (0)\n-0A9DE9 Compressed Size       00000000 (0)\n-0A9DED Uncompressed Size     00000000 (0)\n-0A9DF1 Filename Length       006A (106)\n-0A9DF3 Extra Length          0009 (9)\n-0A9DF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA9DF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A9E5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A9E61   Length              0005 (5)\n-0A9E63   Flags               01 (1) 'Modification'\n-0A9E64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A9E68 LOCAL HEADER #273     04034B50 (67324752)\n-0A9E6C Extract Zip Spec      14 (20) '2.0'\n-0A9E6D Extract OS            00 (0) 'MS-DOS'\n-0A9E6E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A9E70 Compression Method    0000 (0) 'Stored'\n-0A9E72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A9E76 CRC                   00000000 (0)\n-0A9E7A Compressed Size       00000000 (0)\n-0A9E7E Uncompressed Size     00000000 (0)\n-0A9E82 Filename Length       0080 (128)\n-0A9E84 Extra Length          0009 (9)\n-0A9E86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA9E86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A9F06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A9F08   Length              0005 (5)\n-0A9F0A   Flags               01 (1) 'Modification'\n-0A9F0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A9F0F PAYLOAD\n-\n-0ABF60 DATA DESCRIPTOR       08074B50 (134695760)\n-0ABF64 CRC                   A9B3A4D7 (2847122647)\n-0ABF68 Compressed Size       00002051 (8273)\n-0ABF6C Uncompressed Size     00002051 (8273)\n-\n-0ABF70 LOCAL HEADER #274     04034B50 (67324752)\n-0ABF74 Extract Zip Spec      14 (20) '2.0'\n-0ABF75 Extract OS            00 (0) 'MS-DOS'\n-0ABF76 General Purpose Flag  0000 (0)\n-0ABF78 Compression Method    0000 (0) 'Stored'\n-0ABF7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ABF7E CRC                   00000000 (0)\n-0ABF82 Compressed Size       00000000 (0)\n-0ABF86 Uncompressed Size     00000000 (0)\n-0ABF8A Filename Length       0026 (38)\n-0ABF8C Extra Length          0009 (9)\n-0ABF8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xABF8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ABFB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ABFB6   Length              0005 (5)\n-0ABFB8   Flags               01 (1) 'Modification'\n-0ABFB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0ABFBD LOCAL HEADER #275     04034B50 (67324752)\n-0ABFC1 Extract Zip Spec      14 (20) '2.0'\n-0ABFC2 Extract OS            00 (0) 'MS-DOS'\n-0ABFC3 General Purpose Flag  0000 (0)\n-0ABFC5 Compression Method    0000 (0) 'Stored'\n-0ABFC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ABFCB CRC                   00000000 (0)\n-0ABFCF Compressed Size       00000000 (0)\n-0ABFD3 Uncompressed Size     00000000 (0)\n-0ABFD7 Filename Length       002F (47)\n-0ABFD9 Extra Length          0009 (9)\n-0ABFDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xABFDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AC00A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AC00C   Length              0005 (5)\n-0AC00E   Flags               01 (1) 'Modification'\n-0AC00F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AC013 LOCAL HEADER #276     04034B50 (67324752)\n-0AC017 Extract Zip Spec      14 (20) '2.0'\n-0AC018 Extract OS            00 (0) 'MS-DOS'\n-0AC019 General Purpose Flag  0000 (0)\n-0AC01B Compression Method    0000 (0) 'Stored'\n-0AC01D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AC021 CRC                   00000000 (0)\n-0AC025 Compressed Size       00000000 (0)\n-0AC029 Uncompressed Size     00000000 (0)\n-0AC02D Filename Length       005D (93)\n-0AC02F Extra Length          0009 (9)\n-0AC031 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAC031: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AC08E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AC090   Length              0005 (5)\n-0AC092   Flags               01 (1) 'Modification'\n-0AC093   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AC097 LOCAL HEADER #277     04034B50 (67324752)\n-0AC09B Extract Zip Spec      14 (20) '2.0'\n-0AC09C Extract OS            00 (0) 'MS-DOS'\n-0AC09D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AC09F Compression Method    0000 (0) 'Stored'\n-0AC0A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AC0A5 CRC                   00000000 (0)\n-0AC0A9 Compressed Size       00000000 (0)\n-0AC0AD Uncompressed Size     00000000 (0)\n-0AC0B1 Filename Length       0073 (115)\n-0AC0B3 Extra Length          0009 (9)\n-0AC0B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAC0B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AC128 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AC12A   Length              0005 (5)\n-0AC12C   Flags               01 (1) 'Modification'\n-0AC12D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AC131 PAYLOAD\n-\n-0ACB8C DATA DESCRIPTOR       08074B50 (134695760)\n-0ACB90 CRC                   B12610E6 (2972061926)\n-0ACB94 Compressed Size       00000A5B (2651)\n-0ACB98 Uncompressed Size     00000A5B (2651)\n-\n-0ACB9C LOCAL HEADER #278     04034B50 (67324752)\n-0ACBA0 Extract Zip Spec      14 (20) '2.0'\n-0ACBA1 Extract OS            00 (0) 'MS-DOS'\n-0ACBA2 General Purpose Flag  0000 (0)\n-0ACBA4 Compression Method    0000 (0) 'Stored'\n-0ACBA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ACBAA CRC                   00000000 (0)\n-0ACBAE Compressed Size       00000000 (0)\n-0ACBB2 Uncompressed Size     00000000 (0)\n-0ACBB6 Filename Length       0035 (53)\n-0ACBB8 Extra Length          0009 (9)\n-0ACBBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xACBBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ACBEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ACBF1   Length              0005 (5)\n-0ACBF3   Flags               01 (1) 'Modification'\n-0ACBF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0ACBF8 LOCAL HEADER #279     04034B50 (67324752)\n-0ACBFC Extract Zip Spec      14 (20) '2.0'\n-0ACBFD Extract OS            00 (0) 'MS-DOS'\n-0ACBFE General Purpose Flag  0000 (0)\n-0ACC00 Compression Method    0000 (0) 'Stored'\n-0ACC02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ACC06 CRC                   00000000 (0)\n-0ACC0A Compressed Size       00000000 (0)\n-0ACC0E Uncompressed Size     00000000 (0)\n-0ACC12 Filename Length       003E (62)\n-0ACC14 Extra Length          0009 (9)\n-0ACC16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xACC16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ACC54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ACC56   Length              0005 (5)\n-0ACC58   Flags               01 (1) 'Modification'\n-0ACC59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0ACC5D LOCAL HEADER #280     04034B50 (67324752)\n-0ACC61 Extract Zip Spec      14 (20) '2.0'\n-0ACC62 Extract OS            00 (0) 'MS-DOS'\n-0ACC63 General Purpose Flag  0000 (0)\n-0ACC65 Compression Method    0000 (0) 'Stored'\n-0ACC67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ACC6B CRC                   00000000 (0)\n-0ACC6F Compressed Size       00000000 (0)\n-0ACC73 Uncompressed Size     00000000 (0)\n-0ACC77 Filename Length       0078 (120)\n-0ACC79 Extra Length          0009 (9)\n-0ACC7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xACC7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ACCF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ACCF5   Length              0005 (5)\n-0ACCF7   Flags               01 (1) 'Modification'\n-0ACCF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0ACCFC LOCAL HEADER #281     04034B50 (67324752)\n-0ACD00 Extract Zip Spec      14 (20) '2.0'\n-0ACD01 Extract OS            00 (0) 'MS-DOS'\n-0ACD02 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0ACD04 Compression Method    0000 (0) 'Stored'\n-0ACD06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ACD0A CRC                   00000000 (0)\n-0ACD0E Compressed Size       00000000 (0)\n-0ACD12 Uncompressed Size     00000000 (0)\n-0ACD16 Filename Length       008E (142)\n-0ACD18 Extra Length          0009 (9)\n-0ACD1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+09C97B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C97D   Length              0005 (5)\n+09C97F   Flags               01 (1) 'Modification'\n+09C980   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09C984 PAYLOAD\n+\n+09DBFA DATA DESCRIPTOR       08074B50 (134695760)\n+09DBFE CRC                   26E963FE (652829694)\n+09DC02 Compressed Size       00001276 (4726)\n+09DC06 Uncompressed Size     00001276 (4726)\n+\n+09DC0A LOCAL HEADER #262     04034B50 (67324752)\n+09DC0E Extract Zip Spec      14 (20) '2.0'\n+09DC0F Extract OS            00 (0) 'MS-DOS'\n+09DC10 General Purpose Flag  0000 (0)\n+09DC12 Compression Method    0000 (0) 'Stored'\n+09DC14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09DC18 CRC                   00000000 (0)\n+09DC1C Compressed Size       00000000 (0)\n+09DC20 Uncompressed Size     00000000 (0)\n+09DC24 Filename Length       0028 (40)\n+09DC26 Extra Length          0009 (9)\n+09DC28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9DC28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09DC50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09DC52   Length              0005 (5)\n+09DC54   Flags               01 (1) 'Modification'\n+09DC55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09DC59 LOCAL HEADER #263     04034B50 (67324752)\n+09DC5D Extract Zip Spec      14 (20) '2.0'\n+09DC5E Extract OS            00 (0) 'MS-DOS'\n+09DC5F General Purpose Flag  0000 (0)\n+09DC61 Compression Method    0000 (0) 'Stored'\n+09DC63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09DC67 CRC                   00000000 (0)\n+09DC6B Compressed Size       00000000 (0)\n+09DC6F Uncompressed Size     00000000 (0)\n+09DC73 Filename Length       0031 (49)\n+09DC75 Extra Length          0009 (9)\n+09DC77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9DC77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09DCA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09DCAA   Length              0005 (5)\n+09DCAC   Flags               01 (1) 'Modification'\n+09DCAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09DCB1 LOCAL HEADER #264     04034B50 (67324752)\n+09DCB5 Extract Zip Spec      14 (20) '2.0'\n+09DCB6 Extract OS            00 (0) 'MS-DOS'\n+09DCB7 General Purpose Flag  0000 (0)\n+09DCB9 Compression Method    0000 (0) 'Stored'\n+09DCBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09DCBF CRC                   00000000 (0)\n+09DCC3 Compressed Size       00000000 (0)\n+09DCC7 Uncompressed Size     00000000 (0)\n+09DCCB Filename Length       0061 (97)\n+09DCCD Extra Length          0009 (9)\n+09DCCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9DCCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09DD30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09DD32   Length              0005 (5)\n+09DD34   Flags               01 (1) 'Modification'\n+09DD35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09DD39 LOCAL HEADER #265     04034B50 (67324752)\n+09DD3D Extract Zip Spec      14 (20) '2.0'\n+09DD3E Extract OS            00 (0) 'MS-DOS'\n+09DD3F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09DD41 Compression Method    0000 (0) 'Stored'\n+09DD43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09DD47 CRC                   00000000 (0)\n+09DD4B Compressed Size       00000000 (0)\n+09DD4F Uncompressed Size     00000000 (0)\n+09DD53 Filename Length       0077 (119)\n+09DD55 Extra Length          0009 (9)\n+09DD57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9DD57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09DDCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09DDD0   Length              0005 (5)\n+09DDD2   Flags               01 (1) 'Modification'\n+09DDD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09DDD7 PAYLOAD\n+\n+0A329B DATA DESCRIPTOR       08074B50 (134695760)\n+0A329F CRC                   9B32EF54 (2603806548)\n+0A32A3 Compressed Size       000054C4 (21700)\n+0A32A7 Uncompressed Size     000054C4 (21700)\n+\n+0A32AB LOCAL HEADER #266     04034B50 (67324752)\n+0A32AF Extract Zip Spec      14 (20) '2.0'\n+0A32B0 Extract OS            00 (0) 'MS-DOS'\n+0A32B1 General Purpose Flag  0000 (0)\n+0A32B3 Compression Method    0000 (0) 'Stored'\n+0A32B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A32B9 CRC                   00000000 (0)\n+0A32BD Compressed Size       00000000 (0)\n+0A32C1 Uncompressed Size     00000000 (0)\n+0A32C5 Filename Length       0068 (104)\n+0A32C7 Extra Length          0009 (9)\n+0A32C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA32C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A3331 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A3333   Length              0005 (5)\n+0A3335   Flags               01 (1) 'Modification'\n+0A3336   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A333A LOCAL HEADER #267     04034B50 (67324752)\n+0A333E Extract Zip Spec      14 (20) '2.0'\n+0A333F Extract OS            00 (0) 'MS-DOS'\n+0A3340 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A3342 Compression Method    0000 (0) 'Stored'\n+0A3344 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A3348 CRC                   00000000 (0)\n+0A334C Compressed Size       00000000 (0)\n+0A3350 Uncompressed Size     00000000 (0)\n+0A3354 Filename Length       007E (126)\n+0A3356 Extra Length          0009 (9)\n+0A3358 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA3358: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A33D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A33D8   Length              0005 (5)\n+0A33DA   Flags               01 (1) 'Modification'\n+0A33DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A33DF PAYLOAD\n+\n+0A4F00 DATA DESCRIPTOR       08074B50 (134695760)\n+0A4F04 CRC                   4975042F (1232405551)\n+0A4F08 Compressed Size       00001B21 (6945)\n+0A4F0C Uncompressed Size     00001B21 (6945)\n+\n+0A4F10 LOCAL HEADER #268     04034B50 (67324752)\n+0A4F14 Extract Zip Spec      14 (20) '2.0'\n+0A4F15 Extract OS            00 (0) 'MS-DOS'\n+0A4F16 General Purpose Flag  0000 (0)\n+0A4F18 Compression Method    0000 (0) 'Stored'\n+0A4F1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A4F1E CRC                   00000000 (0)\n+0A4F22 Compressed Size       00000000 (0)\n+0A4F26 Uncompressed Size     00000000 (0)\n+0A4F2A Filename Length       006B (107)\n+0A4F2C Extra Length          0009 (9)\n+0A4F2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA4F2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A4F99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A4F9B   Length              0005 (5)\n+0A4F9D   Flags               01 (1) 'Modification'\n+0A4F9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A4FA2 LOCAL HEADER #269     04034B50 (67324752)\n+0A4FA6 Extract Zip Spec      14 (20) '2.0'\n+0A4FA7 Extract OS            00 (0) 'MS-DOS'\n+0A4FA8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A4FAA Compression Method    0000 (0) 'Stored'\n+0A4FAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A4FB0 CRC                   00000000 (0)\n+0A4FB4 Compressed Size       00000000 (0)\n+0A4FB8 Uncompressed Size     00000000 (0)\n+0A4FBC Filename Length       0081 (129)\n+0A4FBE Extra Length          0009 (9)\n+0A4FC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA4FC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A5041 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A5043   Length              0005 (5)\n+0A5045   Flags               01 (1) 'Modification'\n+0A5046   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A504A PAYLOAD\n+\n+0A6534 DATA DESCRIPTOR       08074B50 (134695760)\n+0A6538 CRC                   27E12F4C (669069132)\n+0A653C Compressed Size       000014EA (5354)\n+0A6540 Uncompressed Size     000014EA (5354)\n+\n+0A6544 LOCAL HEADER #270     04034B50 (67324752)\n+0A6548 Extract Zip Spec      14 (20) '2.0'\n+0A6549 Extract OS            00 (0) 'MS-DOS'\n+0A654A General Purpose Flag  0000 (0)\n+0A654C Compression Method    0000 (0) 'Stored'\n+0A654E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A6552 CRC                   00000000 (0)\n+0A6556 Compressed Size       00000000 (0)\n+0A655A Uncompressed Size     00000000 (0)\n+0A655E Filename Length       006B (107)\n+0A6560 Extra Length          0009 (9)\n+0A6562 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA6562: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A65CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A65CF   Length              0005 (5)\n+0A65D1   Flags               01 (1) 'Modification'\n+0A65D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A65D6 LOCAL HEADER #271     04034B50 (67324752)\n+0A65DA Extract Zip Spec      14 (20) '2.0'\n+0A65DB Extract OS            00 (0) 'MS-DOS'\n+0A65DC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A65DE Compression Method    0000 (0) 'Stored'\n+0A65E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A65E4 CRC                   00000000 (0)\n+0A65E8 Compressed Size       00000000 (0)\n+0A65EC Uncompressed Size     00000000 (0)\n+0A65F0 Filename Length       0081 (129)\n+0A65F2 Extra Length          0009 (9)\n+0A65F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA65F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A6675 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A6677   Length              0005 (5)\n+0A6679   Flags               01 (1) 'Modification'\n+0A667A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A667E PAYLOAD\n+\n+0A9D5E DATA DESCRIPTOR       08074B50 (134695760)\n+0A9D62 CRC                   3E8950DE (1049186526)\n+0A9D66 Compressed Size       000036E0 (14048)\n+0A9D6A Uncompressed Size     000036E0 (14048)\n+\n+0A9D6E LOCAL HEADER #272     04034B50 (67324752)\n+0A9D72 Extract Zip Spec      14 (20) '2.0'\n+0A9D73 Extract OS            00 (0) 'MS-DOS'\n+0A9D74 General Purpose Flag  0000 (0)\n+0A9D76 Compression Method    0000 (0) 'Stored'\n+0A9D78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A9D7C CRC                   00000000 (0)\n+0A9D80 Compressed Size       00000000 (0)\n+0A9D84 Uncompressed Size     00000000 (0)\n+0A9D88 Filename Length       006A (106)\n+0A9D8A Extra Length          0009 (9)\n+0A9D8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA9D8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A9DF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A9DF8   Length              0005 (5)\n+0A9DFA   Flags               01 (1) 'Modification'\n+0A9DFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A9DFF LOCAL HEADER #273     04034B50 (67324752)\n+0A9E03 Extract Zip Spec      14 (20) '2.0'\n+0A9E04 Extract OS            00 (0) 'MS-DOS'\n+0A9E05 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A9E07 Compression Method    0000 (0) 'Stored'\n+0A9E09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A9E0D CRC                   00000000 (0)\n+0A9E11 Compressed Size       00000000 (0)\n+0A9E15 Uncompressed Size     00000000 (0)\n+0A9E19 Filename Length       0080 (128)\n+0A9E1B Extra Length          0009 (9)\n+0A9E1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA9E1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A9E9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A9E9F   Length              0005 (5)\n+0A9EA1   Flags               01 (1) 'Modification'\n+0A9EA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A9EA6 PAYLOAD\n+\n+0ABEF7 DATA DESCRIPTOR       08074B50 (134695760)\n+0ABEFB CRC                   A9B3A4D7 (2847122647)\n+0ABEFF Compressed Size       00002051 (8273)\n+0ABF03 Uncompressed Size     00002051 (8273)\n+\n+0ABF07 LOCAL HEADER #274     04034B50 (67324752)\n+0ABF0B Extract Zip Spec      14 (20) '2.0'\n+0ABF0C Extract OS            00 (0) 'MS-DOS'\n+0ABF0D General Purpose Flag  0000 (0)\n+0ABF0F Compression Method    0000 (0) 'Stored'\n+0ABF11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ABF15 CRC                   00000000 (0)\n+0ABF19 Compressed Size       00000000 (0)\n+0ABF1D Uncompressed Size     00000000 (0)\n+0ABF21 Filename Length       0026 (38)\n+0ABF23 Extra Length          0009 (9)\n+0ABF25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xABF25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ABF4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ABF4D   Length              0005 (5)\n+0ABF4F   Flags               01 (1) 'Modification'\n+0ABF50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0ABF54 LOCAL HEADER #275     04034B50 (67324752)\n+0ABF58 Extract Zip Spec      14 (20) '2.0'\n+0ABF59 Extract OS            00 (0) 'MS-DOS'\n+0ABF5A General Purpose Flag  0000 (0)\n+0ABF5C Compression Method    0000 (0) 'Stored'\n+0ABF5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ABF62 CRC                   00000000 (0)\n+0ABF66 Compressed Size       00000000 (0)\n+0ABF6A Uncompressed Size     00000000 (0)\n+0ABF6E Filename Length       002F (47)\n+0ABF70 Extra Length          0009 (9)\n+0ABF72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xABF72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ABFA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ABFA3   Length              0005 (5)\n+0ABFA5   Flags               01 (1) 'Modification'\n+0ABFA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0ABFAA LOCAL HEADER #276     04034B50 (67324752)\n+0ABFAE Extract Zip Spec      14 (20) '2.0'\n+0ABFAF Extract OS            00 (0) 'MS-DOS'\n+0ABFB0 General Purpose Flag  0000 (0)\n+0ABFB2 Compression Method    0000 (0) 'Stored'\n+0ABFB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ABFB8 CRC                   00000000 (0)\n+0ABFBC Compressed Size       00000000 (0)\n+0ABFC0 Uncompressed Size     00000000 (0)\n+0ABFC4 Filename Length       005D (93)\n+0ABFC6 Extra Length          0009 (9)\n+0ABFC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xABFC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AC025 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AC027   Length              0005 (5)\n+0AC029   Flags               01 (1) 'Modification'\n+0AC02A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AC02E LOCAL HEADER #277     04034B50 (67324752)\n+0AC032 Extract Zip Spec      14 (20) '2.0'\n+0AC033 Extract OS            00 (0) 'MS-DOS'\n+0AC034 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AC036 Compression Method    0000 (0) 'Stored'\n+0AC038 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AC03C CRC                   00000000 (0)\n+0AC040 Compressed Size       00000000 (0)\n+0AC044 Uncompressed Size     00000000 (0)\n+0AC048 Filename Length       0073 (115)\n+0AC04A Extra Length          0009 (9)\n+0AC04C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAC04C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AC0BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AC0C1   Length              0005 (5)\n+0AC0C3   Flags               01 (1) 'Modification'\n+0AC0C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AC0C8 PAYLOAD\n+\n+0ACB23 DATA DESCRIPTOR       08074B50 (134695760)\n+0ACB27 CRC                   B12610E6 (2972061926)\n+0ACB2B Compressed Size       00000A5B (2651)\n+0ACB2F Uncompressed Size     00000A5B (2651)\n+\n+0ACB33 LOCAL HEADER #278     04034B50 (67324752)\n+0ACB37 Extract Zip Spec      14 (20) '2.0'\n+0ACB38 Extract OS            00 (0) 'MS-DOS'\n+0ACB39 General Purpose Flag  0000 (0)\n+0ACB3B Compression Method    0000 (0) 'Stored'\n+0ACB3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ACB41 CRC                   00000000 (0)\n+0ACB45 Compressed Size       00000000 (0)\n+0ACB49 Uncompressed Size     00000000 (0)\n+0ACB4D Filename Length       0035 (53)\n+0ACB4F Extra Length          0009 (9)\n+0ACB51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xACB51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ACB86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ACB88   Length              0005 (5)\n+0ACB8A   Flags               01 (1) 'Modification'\n+0ACB8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0ACB8F LOCAL HEADER #279     04034B50 (67324752)\n+0ACB93 Extract Zip Spec      14 (20) '2.0'\n+0ACB94 Extract OS            00 (0) 'MS-DOS'\n+0ACB95 General Purpose Flag  0000 (0)\n+0ACB97 Compression Method    0000 (0) 'Stored'\n+0ACB99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ACB9D CRC                   00000000 (0)\n+0ACBA1 Compressed Size       00000000 (0)\n+0ACBA5 Uncompressed Size     00000000 (0)\n+0ACBA9 Filename Length       003E (62)\n+0ACBAB Extra Length          0009 (9)\n+0ACBAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xACBAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ACBEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ACBED   Length              0005 (5)\n+0ACBEF   Flags               01 (1) 'Modification'\n+0ACBF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0ACBF4 LOCAL HEADER #280     04034B50 (67324752)\n+0ACBF8 Extract Zip Spec      14 (20) '2.0'\n+0ACBF9 Extract OS            00 (0) 'MS-DOS'\n+0ACBFA General Purpose Flag  0000 (0)\n+0ACBFC Compression Method    0000 (0) 'Stored'\n+0ACBFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ACC02 CRC                   00000000 (0)\n+0ACC06 Compressed Size       00000000 (0)\n+0ACC0A Uncompressed Size     00000000 (0)\n+0ACC0E Filename Length       0078 (120)\n+0ACC10 Extra Length          0009 (9)\n+0ACC12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xACC12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ACC8A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ACC8C   Length              0005 (5)\n+0ACC8E   Flags               01 (1) 'Modification'\n+0ACC8F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0ACC93 LOCAL HEADER #281     04034B50 (67324752)\n+0ACC97 Extract Zip Spec      14 (20) '2.0'\n+0ACC98 Extract OS            00 (0) 'MS-DOS'\n+0ACC99 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0ACC9B Compression Method    0000 (0) 'Stored'\n+0ACC9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ACCA1 CRC                   00000000 (0)\n+0ACCA5 Compressed Size       00000000 (0)\n+0ACCA9 Uncompressed Size     00000000 (0)\n+0ACCAD Filename Length       008E (142)\n+0ACCAF Extra Length          0009 (9)\n+0ACCB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0xACD1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xACCB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0ACDA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ACDAA   Length              0005 (5)\n-0ACDAC   Flags               01 (1) 'Modification'\n-0ACDAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0ACDB1 PAYLOAD\n-\n-0AD8D3 DATA DESCRIPTOR       08074B50 (134695760)\n-0AD8D7 CRC                   041CE92B (69003563)\n-0AD8DB Compressed Size       00000B22 (2850)\n-0AD8DF Uncompressed Size     00000B22 (2850)\n-\n-0AD8E3 LOCAL HEADER #282     04034B50 (67324752)\n-0AD8E7 Extract Zip Spec      14 (20) '2.0'\n-0AD8E8 Extract OS            00 (0) 'MS-DOS'\n-0AD8E9 General Purpose Flag  0000 (0)\n-0AD8EB Compression Method    0000 (0) 'Stored'\n-0AD8ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AD8F1 CRC                   00000000 (0)\n-0AD8F5 Compressed Size       00000000 (0)\n-0AD8F9 Uncompressed Size     00000000 (0)\n-0AD8FD Filename Length       0077 (119)\n-0AD8FF Extra Length          0009 (9)\n-0AD901 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAD901: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AD978 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AD97A   Length              0005 (5)\n-0AD97C   Flags               01 (1) 'Modification'\n-0AD97D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AD981 LOCAL HEADER #283     04034B50 (67324752)\n-0AD985 Extract Zip Spec      14 (20) '2.0'\n-0AD986 Extract OS            00 (0) 'MS-DOS'\n-0AD987 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AD989 Compression Method    0000 (0) 'Stored'\n-0AD98B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AD98F CRC                   00000000 (0)\n-0AD993 Compressed Size       00000000 (0)\n-0AD997 Uncompressed Size     00000000 (0)\n-0AD99B Filename Length       008D (141)\n-0AD99D Extra Length          0009 (9)\n-0AD99F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0ACD3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ACD41   Length              0005 (5)\n+0ACD43   Flags               01 (1) 'Modification'\n+0ACD44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0ACD48 PAYLOAD\n+\n+0AD86A DATA DESCRIPTOR       08074B50 (134695760)\n+0AD86E CRC                   041CE92B (69003563)\n+0AD872 Compressed Size       00000B22 (2850)\n+0AD876 Uncompressed Size     00000B22 (2850)\n+\n+0AD87A LOCAL HEADER #282     04034B50 (67324752)\n+0AD87E Extract Zip Spec      14 (20) '2.0'\n+0AD87F Extract OS            00 (0) 'MS-DOS'\n+0AD880 General Purpose Flag  0000 (0)\n+0AD882 Compression Method    0000 (0) 'Stored'\n+0AD884 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AD888 CRC                   00000000 (0)\n+0AD88C Compressed Size       00000000 (0)\n+0AD890 Uncompressed Size     00000000 (0)\n+0AD894 Filename Length       0077 (119)\n+0AD896 Extra Length          0009 (9)\n+0AD898 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAD898: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AD90F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AD911   Length              0005 (5)\n+0AD913   Flags               01 (1) 'Modification'\n+0AD914   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AD918 LOCAL HEADER #283     04034B50 (67324752)\n+0AD91C Extract Zip Spec      14 (20) '2.0'\n+0AD91D Extract OS            00 (0) 'MS-DOS'\n+0AD91E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AD920 Compression Method    0000 (0) 'Stored'\n+0AD922 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AD926 CRC                   00000000 (0)\n+0AD92A Compressed Size       00000000 (0)\n+0AD92E Uncompressed Size     00000000 (0)\n+0AD932 Filename Length       008D (141)\n+0AD934 Extra Length          0009 (9)\n+0AD936 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0xAD99F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xAD936: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0ADA2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ADA2E   Length              0005 (5)\n-0ADA30   Flags               01 (1) 'Modification'\n-0ADA31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0ADA35 PAYLOAD\n-\n-0AF119 DATA DESCRIPTOR       08074B50 (134695760)\n-0AF11D CRC                   16A4BA93 (379894419)\n-0AF121 Compressed Size       000016E4 (5860)\n-0AF125 Uncompressed Size     000016E4 (5860)\n-\n-0AF129 LOCAL HEADER #284     04034B50 (67324752)\n-0AF12D Extract Zip Spec      14 (20) '2.0'\n-0AF12E Extract OS            00 (0) 'MS-DOS'\n-0AF12F General Purpose Flag  0000 (0)\n-0AF131 Compression Method    0000 (0) 'Stored'\n-0AF133 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AF137 CRC                   00000000 (0)\n-0AF13B Compressed Size       00000000 (0)\n-0AF13F Uncompressed Size     00000000 (0)\n-0AF143 Filename Length       007A (122)\n-0AF145 Extra Length          0009 (9)\n-0AF147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAF147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AF1C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AF1C3   Length              0005 (5)\n-0AF1C5   Flags               01 (1) 'Modification'\n-0AF1C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AF1CA LOCAL HEADER #285     04034B50 (67324752)\n-0AF1CE Extract Zip Spec      14 (20) '2.0'\n-0AF1CF Extract OS            00 (0) 'MS-DOS'\n-0AF1D0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AF1D2 Compression Method    0000 (0) 'Stored'\n-0AF1D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AF1D8 CRC                   00000000 (0)\n-0AF1DC Compressed Size       00000000 (0)\n-0AF1E0 Uncompressed Size     00000000 (0)\n-0AF1E4 Filename Length       0090 (144)\n-0AF1E6 Extra Length          0009 (9)\n-0AF1E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0AD9C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AD9C5   Length              0005 (5)\n+0AD9C7   Flags               01 (1) 'Modification'\n+0AD9C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AD9CC PAYLOAD\n+\n+0AF0B0 DATA DESCRIPTOR       08074B50 (134695760)\n+0AF0B4 CRC                   16A4BA93 (379894419)\n+0AF0B8 Compressed Size       000016E4 (5860)\n+0AF0BC Uncompressed Size     000016E4 (5860)\n+\n+0AF0C0 LOCAL HEADER #284     04034B50 (67324752)\n+0AF0C4 Extract Zip Spec      14 (20) '2.0'\n+0AF0C5 Extract OS            00 (0) 'MS-DOS'\n+0AF0C6 General Purpose Flag  0000 (0)\n+0AF0C8 Compression Method    0000 (0) 'Stored'\n+0AF0CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AF0CE CRC                   00000000 (0)\n+0AF0D2 Compressed Size       00000000 (0)\n+0AF0D6 Uncompressed Size     00000000 (0)\n+0AF0DA Filename Length       007A (122)\n+0AF0DC Extra Length          0009 (9)\n+0AF0DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAF0DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AF158 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AF15A   Length              0005 (5)\n+0AF15C   Flags               01 (1) 'Modification'\n+0AF15D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AF161 LOCAL HEADER #285     04034B50 (67324752)\n+0AF165 Extract Zip Spec      14 (20) '2.0'\n+0AF166 Extract OS            00 (0) 'MS-DOS'\n+0AF167 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AF169 Compression Method    0000 (0) 'Stored'\n+0AF16B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AF16F CRC                   00000000 (0)\n+0AF173 Compressed Size       00000000 (0)\n+0AF177 Uncompressed Size     00000000 (0)\n+0AF17B Filename Length       0090 (144)\n+0AF17D Extra Length          0009 (9)\n+0AF17F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xAF1E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xAF17F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0AF278 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AF27A   Length              0005 (5)\n-0AF27C   Flags               01 (1) 'Modification'\n-0AF27D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AF281 PAYLOAD\n-\n-0B02E9 DATA DESCRIPTOR       08074B50 (134695760)\n-0B02ED CRC                   390AB403 (957002755)\n-0B02F1 Compressed Size       00001068 (4200)\n-0B02F5 Uncompressed Size     00001068 (4200)\n-\n-0B02F9 LOCAL HEADER #286     04034B50 (67324752)\n-0B02FD Extract Zip Spec      14 (20) '2.0'\n-0B02FE Extract OS            00 (0) 'MS-DOS'\n-0B02FF General Purpose Flag  0000 (0)\n-0B0301 Compression Method    0000 (0) 'Stored'\n-0B0303 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B0307 CRC                   00000000 (0)\n-0B030B Compressed Size       00000000 (0)\n-0B030F Uncompressed Size     00000000 (0)\n-0B0313 Filename Length       0076 (118)\n-0B0315 Extra Length          0009 (9)\n-0B0317 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB0317: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B038D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B038F   Length              0005 (5)\n-0B0391   Flags               01 (1) 'Modification'\n-0B0392   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B0396 LOCAL HEADER #287     04034B50 (67324752)\n-0B039A Extract Zip Spec      14 (20) '2.0'\n-0B039B Extract OS            00 (0) 'MS-DOS'\n-0B039C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B039E Compression Method    0000 (0) 'Stored'\n-0B03A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B03A4 CRC                   00000000 (0)\n-0B03A8 Compressed Size       00000000 (0)\n-0B03AC Uncompressed Size     00000000 (0)\n-0B03B0 Filename Length       008C (140)\n-0B03B2 Extra Length          0009 (9)\n-0B03B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0AF20F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AF211   Length              0005 (5)\n+0AF213   Flags               01 (1) 'Modification'\n+0AF214   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AF218 PAYLOAD\n+\n+0B0280 DATA DESCRIPTOR       08074B50 (134695760)\n+0B0284 CRC                   390AB403 (957002755)\n+0B0288 Compressed Size       00001068 (4200)\n+0B028C Uncompressed Size     00001068 (4200)\n+\n+0B0290 LOCAL HEADER #286     04034B50 (67324752)\n+0B0294 Extract Zip Spec      14 (20) '2.0'\n+0B0295 Extract OS            00 (0) 'MS-DOS'\n+0B0296 General Purpose Flag  0000 (0)\n+0B0298 Compression Method    0000 (0) 'Stored'\n+0B029A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B029E CRC                   00000000 (0)\n+0B02A2 Compressed Size       00000000 (0)\n+0B02A6 Uncompressed Size     00000000 (0)\n+0B02AA Filename Length       0076 (118)\n+0B02AC Extra Length          0009 (9)\n+0B02AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB02AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B0324 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B0326   Length              0005 (5)\n+0B0328   Flags               01 (1) 'Modification'\n+0B0329   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B032D LOCAL HEADER #287     04034B50 (67324752)\n+0B0331 Extract Zip Spec      14 (20) '2.0'\n+0B0332 Extract OS            00 (0) 'MS-DOS'\n+0B0333 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B0335 Compression Method    0000 (0) 'Stored'\n+0B0337 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B033B CRC                   00000000 (0)\n+0B033F Compressed Size       00000000 (0)\n+0B0343 Uncompressed Size     00000000 (0)\n+0B0347 Filename Length       008C (140)\n+0B0349 Extra Length          0009 (9)\n+0B034B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0xB03B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB034B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B0440 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B0442   Length              0005 (5)\n-0B0444   Flags               01 (1) 'Modification'\n-0B0445   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B0449 PAYLOAD\n-\n-0B1AF3 DATA DESCRIPTOR       08074B50 (134695760)\n-0B1AF7 CRC                   3DE98548 (1038714184)\n-0B1AFB Compressed Size       000016AA (5802)\n-0B1AFF Uncompressed Size     000016AA (5802)\n-\n-0B1B03 LOCAL HEADER #288     04034B50 (67324752)\n-0B1B07 Extract Zip Spec      14 (20) '2.0'\n-0B1B08 Extract OS            00 (0) 'MS-DOS'\n-0B1B09 General Purpose Flag  0000 (0)\n-0B1B0B Compression Method    0000 (0) 'Stored'\n-0B1B0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1B11 CRC                   00000000 (0)\n-0B1B15 Compressed Size       00000000 (0)\n-0B1B19 Uncompressed Size     00000000 (0)\n-0B1B1D Filename Length       0024 (36)\n-0B1B1F Extra Length          0009 (9)\n-0B1B21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1B21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1B45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1B47   Length              0005 (5)\n-0B1B49   Flags               01 (1) 'Modification'\n-0B1B4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1B4E LOCAL HEADER #289     04034B50 (67324752)\n-0B1B52 Extract Zip Spec      14 (20) '2.0'\n-0B1B53 Extract OS            00 (0) 'MS-DOS'\n-0B1B54 General Purpose Flag  0000 (0)\n-0B1B56 Compression Method    0000 (0) 'Stored'\n-0B1B58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1B5C CRC                   00000000 (0)\n-0B1B60 Compressed Size       00000000 (0)\n-0B1B64 Uncompressed Size     00000000 (0)\n-0B1B68 Filename Length       002D (45)\n-0B1B6A Extra Length          0009 (9)\n-0B1B6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1B6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1B99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1B9B   Length              0005 (5)\n-0B1B9D   Flags               01 (1) 'Modification'\n-0B1B9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1BA2 LOCAL HEADER #290     04034B50 (67324752)\n-0B1BA6 Extract Zip Spec      14 (20) '2.0'\n-0B1BA7 Extract OS            00 (0) 'MS-DOS'\n-0B1BA8 General Purpose Flag  0000 (0)\n-0B1BAA Compression Method    0000 (0) 'Stored'\n-0B1BAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1BB0 CRC                   00000000 (0)\n-0B1BB4 Compressed Size       00000000 (0)\n-0B1BB8 Uncompressed Size     00000000 (0)\n-0B1BBC Filename Length       005B (91)\n-0B1BBE Extra Length          0009 (9)\n-0B1BC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1BC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1C1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1C1D   Length              0005 (5)\n-0B1C1F   Flags               01 (1) 'Modification'\n-0B1C20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1C24 LOCAL HEADER #291     04034B50 (67324752)\n-0B1C28 Extract Zip Spec      14 (20) '2.0'\n-0B1C29 Extract OS            00 (0) 'MS-DOS'\n-0B1C2A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B1C2C Compression Method    0000 (0) 'Stored'\n-0B1C2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1C32 CRC                   00000000 (0)\n-0B1C36 Compressed Size       00000000 (0)\n-0B1C3A Uncompressed Size     00000000 (0)\n-0B1C3E Filename Length       0071 (113)\n-0B1C40 Extra Length          0009 (9)\n-0B1C42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1C42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1CB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1CB5   Length              0005 (5)\n-0B1CB7   Flags               01 (1) 'Modification'\n-0B1CB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B1CBC PAYLOAD\n-\n-0B3564 DATA DESCRIPTOR       08074B50 (134695760)\n-0B3568 CRC                   561A3BB2 (1444559794)\n-0B356C Compressed Size       000018A8 (6312)\n-0B3570 Uncompressed Size     000018A8 (6312)\n-\n-0B3574 LOCAL HEADER #292     04034B50 (67324752)\n-0B3578 Extract Zip Spec      14 (20) '2.0'\n-0B3579 Extract OS            00 (0) 'MS-DOS'\n-0B357A General Purpose Flag  0000 (0)\n-0B357C Compression Method    0000 (0) 'Stored'\n-0B357E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B3582 CRC                   00000000 (0)\n-0B3586 Compressed Size       00000000 (0)\n-0B358A Uncompressed Size     00000000 (0)\n-0B358E Filename Length       005A (90)\n-0B3590 Extra Length          0009 (9)\n-0B3592 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB3592: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B35EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B35EE   Length              0005 (5)\n-0B35F0   Flags               01 (1) 'Modification'\n-0B35F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B35F5 LOCAL HEADER #293     04034B50 (67324752)\n-0B35F9 Extract Zip Spec      14 (20) '2.0'\n-0B35FA Extract OS            00 (0) 'MS-DOS'\n-0B35FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B35FD Compression Method    0000 (0) 'Stored'\n-0B35FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B3603 CRC                   00000000 (0)\n-0B3607 Compressed Size       00000000 (0)\n-0B360B Uncompressed Size     00000000 (0)\n-0B360F Filename Length       0070 (112)\n-0B3611 Extra Length          0009 (9)\n-0B3613 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB3613: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B3683 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B3685   Length              0005 (5)\n-0B3687   Flags               01 (1) 'Modification'\n-0B3688   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B368C PAYLOAD\n-\n-0B514E DATA DESCRIPTOR       08074B50 (134695760)\n-0B5152 CRC                   A1D18B9C (2714864540)\n-0B5156 Compressed Size       00001AC2 (6850)\n-0B515A Uncompressed Size     00001AC2 (6850)\n-\n-0B515E LOCAL HEADER #294     04034B50 (67324752)\n-0B5162 Extract Zip Spec      14 (20) '2.0'\n-0B5163 Extract OS            00 (0) 'MS-DOS'\n-0B5164 General Purpose Flag  0000 (0)\n-0B5166 Compression Method    0000 (0) 'Stored'\n-0B5168 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B516C CRC                   00000000 (0)\n-0B5170 Compressed Size       00000000 (0)\n-0B5174 Uncompressed Size     00000000 (0)\n-0B5178 Filename Length       005B (91)\n-0B517A Extra Length          0009 (9)\n-0B517C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB517C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B51D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B51D9   Length              0005 (5)\n-0B51DB   Flags               01 (1) 'Modification'\n-0B51DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B51E0 LOCAL HEADER #295     04034B50 (67324752)\n-0B51E4 Extract Zip Spec      14 (20) '2.0'\n-0B51E5 Extract OS            00 (0) 'MS-DOS'\n-0B51E6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B51E8 Compression Method    0000 (0) 'Stored'\n-0B51EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B51EE CRC                   00000000 (0)\n-0B51F2 Compressed Size       00000000 (0)\n-0B51F6 Uncompressed Size     00000000 (0)\n-0B51FA Filename Length       0071 (113)\n-0B51FC Extra Length          0009 (9)\n-0B51FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB51FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B526F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B5271   Length              0005 (5)\n-0B5273   Flags               01 (1) 'Modification'\n-0B5274   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B5278 PAYLOAD\n-\n-0B6611 DATA DESCRIPTOR       08074B50 (134695760)\n-0B6615 CRC                   33231FD5 (857939925)\n-0B6619 Compressed Size       00001399 (5017)\n-0B661D Uncompressed Size     00001399 (5017)\n-\n-0B6621 LOCAL HEADER #296     04034B50 (67324752)\n-0B6625 Extract Zip Spec      14 (20) '2.0'\n-0B6626 Extract OS            00 (0) 'MS-DOS'\n-0B6627 General Purpose Flag  0000 (0)\n-0B6629 Compression Method    0000 (0) 'Stored'\n-0B662B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B662F CRC                   00000000 (0)\n-0B6633 Compressed Size       00000000 (0)\n-0B6637 Uncompressed Size     00000000 (0)\n-0B663B Filename Length       0023 (35)\n-0B663D Extra Length          0009 (9)\n-0B663F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB663F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6662 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6664   Length              0005 (5)\n-0B6666   Flags               01 (1) 'Modification'\n-0B6667   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B666B LOCAL HEADER #297     04034B50 (67324752)\n-0B666F Extract Zip Spec      14 (20) '2.0'\n-0B6670 Extract OS            00 (0) 'MS-DOS'\n-0B6671 General Purpose Flag  0000 (0)\n-0B6673 Compression Method    0000 (0) 'Stored'\n-0B6675 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6679 CRC                   00000000 (0)\n-0B667D Compressed Size       00000000 (0)\n-0B6681 Uncompressed Size     00000000 (0)\n-0B6685 Filename Length       002C (44)\n-0B6687 Extra Length          0009 (9)\n-0B6689 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6689: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B66B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B66B7   Length              0005 (5)\n-0B66B9   Flags               01 (1) 'Modification'\n-0B66BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B66BE LOCAL HEADER #298     04034B50 (67324752)\n-0B66C2 Extract Zip Spec      14 (20) '2.0'\n-0B66C3 Extract OS            00 (0) 'MS-DOS'\n-0B66C4 General Purpose Flag  0000 (0)\n-0B66C6 Compression Method    0000 (0) 'Stored'\n-0B66C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B66CC CRC                   00000000 (0)\n-0B66D0 Compressed Size       00000000 (0)\n-0B66D4 Uncompressed Size     00000000 (0)\n-0B66D8 Filename Length       0054 (84)\n-0B66DA Extra Length          0009 (9)\n-0B66DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB66DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6730 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6732   Length              0005 (5)\n-0B6734   Flags               01 (1) 'Modification'\n-0B6735   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B6739 LOCAL HEADER #299     04034B50 (67324752)\n-0B673D Extract Zip Spec      14 (20) '2.0'\n-0B673E Extract OS            00 (0) 'MS-DOS'\n-0B673F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B6741 Compression Method    0000 (0) 'Stored'\n-0B6743 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6747 CRC                   00000000 (0)\n-0B674B Compressed Size       00000000 (0)\n-0B674F Uncompressed Size     00000000 (0)\n-0B6753 Filename Length       006A (106)\n-0B6755 Extra Length          0009 (9)\n-0B6757 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6757: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B67C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B67C3   Length              0005 (5)\n-0B67C5   Flags               01 (1) 'Modification'\n-0B67C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B67CA PAYLOAD\n-\n-0B74C2 DATA DESCRIPTOR       08074B50 (134695760)\n-0B74C6 CRC                   63C353AF (1673745327)\n-0B74CA Compressed Size       00000CF8 (3320)\n-0B74CE Uncompressed Size     00000CF8 (3320)\n-\n-0B74D2 LOCAL HEADER #300     04034B50 (67324752)\n-0B74D6 Extract Zip Spec      14 (20) '2.0'\n-0B74D7 Extract OS            00 (0) 'MS-DOS'\n-0B74D8 General Purpose Flag  0000 (0)\n-0B74DA Compression Method    0000 (0) 'Stored'\n-0B74DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B74E0 CRC                   00000000 (0)\n-0B74E4 Compressed Size       00000000 (0)\n-0B74E8 Uncompressed Size     00000000 (0)\n-0B74EC Filename Length       005B (91)\n-0B74EE Extra Length          0009 (9)\n-0B74F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB74F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B754B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B754D   Length              0005 (5)\n-0B754F   Flags               01 (1) 'Modification'\n-0B7550   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B7554 LOCAL HEADER #301     04034B50 (67324752)\n-0B7558 Extract Zip Spec      14 (20) '2.0'\n-0B7559 Extract OS            00 (0) 'MS-DOS'\n-0B755A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B755C Compression Method    0000 (0) 'Stored'\n-0B755E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B7562 CRC                   00000000 (0)\n-0B7566 Compressed Size       00000000 (0)\n-0B756A Uncompressed Size     00000000 (0)\n-0B756E Filename Length       0071 (113)\n-0B7570 Extra Length          0009 (9)\n-0B7572 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB7572: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B75E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B75E5   Length              0005 (5)\n-0B75E7   Flags               01 (1) 'Modification'\n-0B75E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B75EC PAYLOAD\n-\n-0B7D0F DATA DESCRIPTOR       08074B50 (134695760)\n-0B7D13 CRC                   C64481A5 (3326378405)\n-0B7D17 Compressed Size       00000723 (1827)\n-0B7D1B Uncompressed Size     00000723 (1827)\n-\n-0B7D1F LOCAL HEADER #302     04034B50 (67324752)\n-0B7D23 Extract Zip Spec      14 (20) '2.0'\n-0B7D24 Extract OS            00 (0) 'MS-DOS'\n-0B7D25 General Purpose Flag  0000 (0)\n-0B7D27 Compression Method    0000 (0) 'Stored'\n-0B7D29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B7D2D CRC                   00000000 (0)\n-0B7D31 Compressed Size       00000000 (0)\n-0B7D35 Uncompressed Size     00000000 (0)\n-0B7D39 Filename Length       0059 (89)\n-0B7D3B Extra Length          0009 (9)\n-0B7D3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB7D3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B7D96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B7D98   Length              0005 (5)\n-0B7D9A   Flags               01 (1) 'Modification'\n-0B7D9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B7D9F LOCAL HEADER #303     04034B50 (67324752)\n-0B7DA3 Extract Zip Spec      14 (20) '2.0'\n-0B7DA4 Extract OS            00 (0) 'MS-DOS'\n-0B7DA5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B7DA7 Compression Method    0000 (0) 'Stored'\n-0B7DA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B7DAD CRC                   00000000 (0)\n-0B7DB1 Compressed Size       00000000 (0)\n-0B7DB5 Uncompressed Size     00000000 (0)\n-0B7DB9 Filename Length       006F (111)\n-0B7DBB Extra Length          0009 (9)\n-0B7DBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB7DBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B7E2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B7E2E   Length              0005 (5)\n-0B7E30   Flags               01 (1) 'Modification'\n-0B7E31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B7E35 PAYLOAD\n-\n-0B8517 DATA DESCRIPTOR       08074B50 (134695760)\n-0B851B CRC                   39649106 (962892038)\n-0B851F Compressed Size       000006E2 (1762)\n-0B8523 Uncompressed Size     000006E2 (1762)\n-\n-0B8527 LOCAL HEADER #304     04034B50 (67324752)\n-0B852B Extract Zip Spec      14 (20) '2.0'\n-0B852C Extract OS            00 (0) 'MS-DOS'\n-0B852D General Purpose Flag  0000 (0)\n-0B852F Compression Method    0000 (0) 'Stored'\n-0B8531 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B8535 CRC                   00000000 (0)\n-0B8539 Compressed Size       00000000 (0)\n-0B853D Uncompressed Size     00000000 (0)\n-0B8541 Filename Length       0054 (84)\n-0B8543 Extra Length          0009 (9)\n-0B8545 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB8545: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B8599 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B859B   Length              0005 (5)\n-0B859D   Flags               01 (1) 'Modification'\n-0B859E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B85A2 LOCAL HEADER #305     04034B50 (67324752)\n-0B85A6 Extract Zip Spec      14 (20) '2.0'\n-0B85A7 Extract OS            00 (0) 'MS-DOS'\n-0B85A8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B85AA Compression Method    0000 (0) 'Stored'\n-0B85AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B85B0 CRC                   00000000 (0)\n-0B85B4 Compressed Size       00000000 (0)\n-0B85B8 Uncompressed Size     00000000 (0)\n-0B85BC Filename Length       006A (106)\n-0B85BE Extra Length          0009 (9)\n-0B85C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB85C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B862A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B862C   Length              0005 (5)\n-0B862E   Flags               01 (1) 'Modification'\n-0B862F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B8633 PAYLOAD\n-\n-0B8DB5 DATA DESCRIPTOR       08074B50 (134695760)\n-0B8DB9 CRC                   8DC8B44C (2378740812)\n-0B8DBD Compressed Size       00000782 (1922)\n-0B8DC1 Uncompressed Size     00000782 (1922)\n-\n-0B8DC5 LOCAL HEADER #306     04034B50 (67324752)\n-0B8DC9 Extract Zip Spec      14 (20) '2.0'\n-0B8DCA Extract OS            00 (0) 'MS-DOS'\n-0B8DCB General Purpose Flag  0000 (0)\n-0B8DCD Compression Method    0000 (0) 'Stored'\n-0B8DCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B8DD3 CRC                   00000000 (0)\n-0B8DD7 Compressed Size       00000000 (0)\n-0B8DDB Uncompressed Size     00000000 (0)\n-0B8DDF Filename Length       0025 (37)\n-0B8DE1 Extra Length          0009 (9)\n-0B8DE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB8DE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B8E08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B8E0A   Length              0005 (5)\n-0B8E0C   Flags               01 (1) 'Modification'\n-0B8E0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B8E11 LOCAL HEADER #307     04034B50 (67324752)\n-0B8E15 Extract Zip Spec      14 (20) '2.0'\n-0B8E16 Extract OS            00 (0) 'MS-DOS'\n-0B8E17 General Purpose Flag  0000 (0)\n-0B8E19 Compression Method    0000 (0) 'Stored'\n-0B8E1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B8E1F CRC                   00000000 (0)\n-0B8E23 Compressed Size       00000000 (0)\n-0B8E27 Uncompressed Size     00000000 (0)\n-0B8E2B Filename Length       002E (46)\n-0B8E2D Extra Length          0009 (9)\n-0B8E2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB8E2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B8E5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B8E5F   Length              0005 (5)\n-0B8E61   Flags               01 (1) 'Modification'\n-0B8E62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B8E66 LOCAL HEADER #308     04034B50 (67324752)\n-0B8E6A Extract Zip Spec      14 (20) '2.0'\n-0B8E6B Extract OS            00 (0) 'MS-DOS'\n-0B8E6C General Purpose Flag  0000 (0)\n-0B8E6E Compression Method    0000 (0) 'Stored'\n-0B8E70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B8E74 CRC                   00000000 (0)\n-0B8E78 Compressed Size       00000000 (0)\n-0B8E7C Uncompressed Size     00000000 (0)\n-0B8E80 Filename Length       005E (94)\n-0B8E82 Extra Length          0009 (9)\n-0B8E84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB8E84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B8EE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B8EE4   Length              0005 (5)\n-0B8EE6   Flags               01 (1) 'Modification'\n-0B8EE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B8EEB LOCAL HEADER #309     04034B50 (67324752)\n-0B8EEF Extract Zip Spec      14 (20) '2.0'\n-0B8EF0 Extract OS            00 (0) 'MS-DOS'\n-0B8EF1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B8EF3 Compression Method    0000 (0) 'Stored'\n-0B8EF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B8EF9 CRC                   00000000 (0)\n-0B8EFD Compressed Size       00000000 (0)\n-0B8F01 Uncompressed Size     00000000 (0)\n-0B8F05 Filename Length       0074 (116)\n-0B8F07 Extra Length          0009 (9)\n-0B8F09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB8F09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B8F7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B8F7F   Length              0005 (5)\n-0B8F81   Flags               01 (1) 'Modification'\n-0B8F82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B8F86 PAYLOAD\n-\n-0B9E20 DATA DESCRIPTOR       08074B50 (134695760)\n-0B9E24 CRC                   335CA1CD (861708749)\n-0B9E28 Compressed Size       00000E9A (3738)\n-0B9E2C Uncompressed Size     00000E9A (3738)\n-\n-0B9E30 LOCAL HEADER #310     04034B50 (67324752)\n-0B9E34 Extract Zip Spec      14 (20) '2.0'\n-0B9E35 Extract OS            00 (0) 'MS-DOS'\n-0B9E36 General Purpose Flag  0000 (0)\n-0B9E38 Compression Method    0000 (0) 'Stored'\n-0B9E3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B9E3E CRC                   00000000 (0)\n-0B9E42 Compressed Size       00000000 (0)\n-0B9E46 Uncompressed Size     00000000 (0)\n-0B9E4A Filename Length       006A (106)\n-0B9E4C Extra Length          0009 (9)\n-0B9E4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB9E4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B9EB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B9EBA   Length              0005 (5)\n-0B9EBC   Flags               01 (1) 'Modification'\n-0B9EBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B9EC1 LOCAL HEADER #311     04034B50 (67324752)\n-0B9EC5 Extract Zip Spec      14 (20) '2.0'\n-0B9EC6 Extract OS            00 (0) 'MS-DOS'\n-0B9EC7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B9EC9 Compression Method    0000 (0) 'Stored'\n-0B9ECB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B9ECF CRC                   00000000 (0)\n-0B9ED3 Compressed Size       00000000 (0)\n-0B9ED7 Uncompressed Size     00000000 (0)\n-0B9EDB Filename Length       0080 (128)\n-0B9EDD Extra Length          0009 (9)\n-0B9EDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB9EDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B9F5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B9F61   Length              0005 (5)\n-0B9F63   Flags               01 (1) 'Modification'\n-0B9F64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B9F68 PAYLOAD\n-\n-0BAFC1 DATA DESCRIPTOR       08074B50 (134695760)\n-0BAFC5 CRC                   3EE7FDDD (1055391197)\n-0BAFC9 Compressed Size       00001059 (4185)\n-0BAFCD Uncompressed Size     00001059 (4185)\n-\n-0BAFD1 LOCAL HEADER #312     04034B50 (67324752)\n-0BAFD5 Extract Zip Spec      14 (20) '2.0'\n-0BAFD6 Extract OS            00 (0) 'MS-DOS'\n-0BAFD7 General Purpose Flag  0000 (0)\n-0BAFD9 Compression Method    0000 (0) 'Stored'\n-0BAFDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BAFDF CRC                   00000000 (0)\n-0BAFE3 Compressed Size       00000000 (0)\n-0BAFE7 Uncompressed Size     00000000 (0)\n-0BAFEB Filename Length       0027 (39)\n-0BAFED Extra Length          0009 (9)\n-0BAFEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBAFEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB016 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB018   Length              0005 (5)\n-0BB01A   Flags               01 (1) 'Modification'\n-0BB01B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BB01F LOCAL HEADER #313     04034B50 (67324752)\n-0BB023 Extract Zip Spec      14 (20) '2.0'\n-0BB024 Extract OS            00 (0) 'MS-DOS'\n-0BB025 General Purpose Flag  0000 (0)\n-0BB027 Compression Method    0000 (0) 'Stored'\n-0BB029 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB02D CRC                   00000000 (0)\n-0BB031 Compressed Size       00000000 (0)\n-0BB035 Uncompressed Size     00000000 (0)\n-0BB039 Filename Length       0030 (48)\n-0BB03B Extra Length          0009 (9)\n-0BB03D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB03D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB06D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB06F   Length              0005 (5)\n-0BB071   Flags               01 (1) 'Modification'\n-0BB072   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BB076 LOCAL HEADER #314     04034B50 (67324752)\n-0BB07A Extract Zip Spec      14 (20) '2.0'\n-0BB07B Extract OS            00 (0) 'MS-DOS'\n-0BB07C General Purpose Flag  0000 (0)\n-0BB07E Compression Method    0000 (0) 'Stored'\n-0BB080 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB084 CRC                   00000000 (0)\n-0BB088 Compressed Size       00000000 (0)\n-0BB08C Uncompressed Size     00000000 (0)\n-0BB090 Filename Length       0069 (105)\n-0BB092 Extra Length          0009 (9)\n-0BB094 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB094: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB0FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB0FF   Length              0005 (5)\n-0BB101   Flags               01 (1) 'Modification'\n-0BB102   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BB106 LOCAL HEADER #315     04034B50 (67324752)\n-0BB10A Extract Zip Spec      14 (20) '2.0'\n-0BB10B Extract OS            00 (0) 'MS-DOS'\n-0BB10C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BB10E Compression Method    0000 (0) 'Stored'\n-0BB110 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB114 CRC                   00000000 (0)\n-0BB118 Compressed Size       00000000 (0)\n-0BB11C Uncompressed Size     00000000 (0)\n-0BB120 Filename Length       007F (127)\n-0BB122 Extra Length          0009 (9)\n-0BB124 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB124: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB1A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB1A5   Length              0005 (5)\n-0BB1A7   Flags               01 (1) 'Modification'\n-0BB1A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BB1AC PAYLOAD\n-\n-0BBE07 DATA DESCRIPTOR       08074B50 (134695760)\n-0BBE0B CRC                   67FA3A91 (1744452241)\n-0BBE0F Compressed Size       00000C5B (3163)\n-0BBE13 Uncompressed Size     00000C5B (3163)\n-\n-0BBE17 LOCAL HEADER #316     04034B50 (67324752)\n-0BBE1B Extract Zip Spec      14 (20) '2.0'\n-0BBE1C Extract OS            00 (0) 'MS-DOS'\n-0BBE1D General Purpose Flag  0000 (0)\n-0BBE1F Compression Method    0000 (0) 'Stored'\n-0BBE21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BBE25 CRC                   00000000 (0)\n-0BBE29 Compressed Size       00000000 (0)\n-0BBE2D Uncompressed Size     00000000 (0)\n-0BBE31 Filename Length       0064 (100)\n-0BBE33 Extra Length          0009 (9)\n-0BBE35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBBE35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BBE99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BBE9B   Length              0005 (5)\n-0BBE9D   Flags               01 (1) 'Modification'\n-0BBE9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BBEA2 LOCAL HEADER #317     04034B50 (67324752)\n-0BBEA6 Extract Zip Spec      14 (20) '2.0'\n-0BBEA7 Extract OS            00 (0) 'MS-DOS'\n-0BBEA8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BBEAA Compression Method    0000 (0) 'Stored'\n-0BBEAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BBEB0 CRC                   00000000 (0)\n-0BBEB4 Compressed Size       00000000 (0)\n-0BBEB8 Uncompressed Size     00000000 (0)\n-0BBEBC Filename Length       007A (122)\n-0BBEBE Extra Length          0009 (9)\n-0BBEC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBBEC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BBF3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BBF3C   Length              0005 (5)\n-0BBF3E   Flags               01 (1) 'Modification'\n-0BBF3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BBF43 PAYLOAD\n-\n-0BD9E7 DATA DESCRIPTOR       08074B50 (134695760)\n-0BD9EB CRC                   984F1B9C (2555321244)\n-0BD9EF Compressed Size       00001AA4 (6820)\n-0BD9F3 Uncompressed Size     00001AA4 (6820)\n-\n-0BD9F7 LOCAL HEADER #318     04034B50 (67324752)\n-0BD9FB Extract Zip Spec      14 (20) '2.0'\n-0BD9FC Extract OS            00 (0) 'MS-DOS'\n-0BD9FD General Purpose Flag  0000 (0)\n-0BD9FF Compression Method    0000 (0) 'Stored'\n-0BDA01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BDA05 CRC                   00000000 (0)\n-0BDA09 Compressed Size       00000000 (0)\n-0BDA0D Uncompressed Size     00000000 (0)\n-0BDA11 Filename Length       006C (108)\n-0BDA13 Extra Length          0009 (9)\n-0BDA15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBDA15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BDA81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BDA83   Length              0005 (5)\n-0BDA85   Flags               01 (1) 'Modification'\n-0BDA86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BDA8A LOCAL HEADER #319     04034B50 (67324752)\n-0BDA8E Extract Zip Spec      14 (20) '2.0'\n-0BDA8F Extract OS            00 (0) 'MS-DOS'\n-0BDA90 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BDA92 Compression Method    0000 (0) 'Stored'\n-0BDA94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BDA98 CRC                   00000000 (0)\n-0BDA9C Compressed Size       00000000 (0)\n-0BDAA0 Uncompressed Size     00000000 (0)\n-0BDAA4 Filename Length       0082 (130)\n-0BDAA6 Extra Length          0009 (9)\n-0BDAA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBDAA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BDB2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BDB2C   Length              0005 (5)\n-0BDB2E   Flags               01 (1) 'Modification'\n-0BDB2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BDB33 PAYLOAD\n-\n-0BE8F5 DATA DESCRIPTOR       08074B50 (134695760)\n-0BE8F9 CRC                   0FF19131 (267489585)\n-0BE8FD Compressed Size       00000DC2 (3522)\n-0BE901 Uncompressed Size     00000DC2 (3522)\n-\n-0BE905 LOCAL HEADER #320     04034B50 (67324752)\n-0BE909 Extract Zip Spec      14 (20) '2.0'\n-0BE90A Extract OS            00 (0) 'MS-DOS'\n-0BE90B General Purpose Flag  0000 (0)\n-0BE90D Compression Method    0000 (0) 'Stored'\n-0BE90F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BE913 CRC                   00000000 (0)\n-0BE917 Compressed Size       00000000 (0)\n-0BE91B Uncompressed Size     00000000 (0)\n-0BE91F Filename Length       0069 (105)\n-0BE921 Extra Length          0009 (9)\n-0BE923 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBE923: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BE98C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BE98E   Length              0005 (5)\n-0BE990   Flags               01 (1) 'Modification'\n-0BE991   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BE995 LOCAL HEADER #321     04034B50 (67324752)\n-0BE999 Extract Zip Spec      14 (20) '2.0'\n-0BE99A Extract OS            00 (0) 'MS-DOS'\n-0BE99B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BE99D Compression Method    0000 (0) 'Stored'\n-0BE99F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BE9A3 CRC                   00000000 (0)\n-0BE9A7 Compressed Size       00000000 (0)\n-0BE9AB Uncompressed Size     00000000 (0)\n-0BE9AF Filename Length       007F (127)\n-0BE9B1 Extra Length          0009 (9)\n-0BE9B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBE9B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BEA32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BEA34   Length              0005 (5)\n-0BEA36   Flags               01 (1) 'Modification'\n-0BEA37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BEA3B PAYLOAD\n-\n-0BF1FB DATA DESCRIPTOR       08074B50 (134695760)\n-0BF1FF CRC                   63513D5C (1666268508)\n-0BF203 Compressed Size       000007C0 (1984)\n-0BF207 Uncompressed Size     000007C0 (1984)\n-\n-0BF20B LOCAL HEADER #322     04034B50 (67324752)\n-0BF20F Extract Zip Spec      14 (20) '2.0'\n-0BF210 Extract OS            00 (0) 'MS-DOS'\n-0BF211 General Purpose Flag  0000 (0)\n-0BF213 Compression Method    0000 (0) 'Stored'\n-0BF215 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BF219 CRC                   00000000 (0)\n-0BF21D Compressed Size       00000000 (0)\n-0BF221 Uncompressed Size     00000000 (0)\n-0BF225 Filename Length       0060 (96)\n-0BF227 Extra Length          0009 (9)\n-0BF229 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBF229: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BF289 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BF28B   Length              0005 (5)\n-0BF28D   Flags               01 (1) 'Modification'\n-0BF28E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BF292 LOCAL HEADER #323     04034B50 (67324752)\n-0BF296 Extract Zip Spec      14 (20) '2.0'\n-0BF297 Extract OS            00 (0) 'MS-DOS'\n-0BF298 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BF29A Compression Method    0000 (0) 'Stored'\n-0BF29C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BF2A0 CRC                   00000000 (0)\n-0BF2A4 Compressed Size       00000000 (0)\n-0BF2A8 Uncompressed Size     00000000 (0)\n-0BF2AC Filename Length       0076 (118)\n-0BF2AE Extra Length          0009 (9)\n-0BF2B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBF2B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BF326 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BF328   Length              0005 (5)\n-0BF32A   Flags               01 (1) 'Modification'\n-0BF32B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BF32F PAYLOAD\n-\n-0C0209 DATA DESCRIPTOR       08074B50 (134695760)\n-0C020D CRC                   99929518 (2576520472)\n-0C0211 Compressed Size       00000EDA (3802)\n-0C0215 Uncompressed Size     00000EDA (3802)\n-\n-0C0219 LOCAL HEADER #324     04034B50 (67324752)\n-0C021D Extract Zip Spec      14 (20) '2.0'\n-0C021E Extract OS            00 (0) 'MS-DOS'\n-0C021F General Purpose Flag  0000 (0)\n-0C0221 Compression Method    0000 (0) 'Stored'\n-0C0223 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0227 CRC                   00000000 (0)\n-0C022B Compressed Size       00000000 (0)\n-0C022F Uncompressed Size     00000000 (0)\n-0C0233 Filename Length       005E (94)\n-0C0235 Extra Length          0009 (9)\n-0C0237 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0237: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0295 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0297   Length              0005 (5)\n-0C0299   Flags               01 (1) 'Modification'\n-0C029A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C029E LOCAL HEADER #325     04034B50 (67324752)\n-0C02A2 Extract Zip Spec      14 (20) '2.0'\n-0C02A3 Extract OS            00 (0) 'MS-DOS'\n-0C02A4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C02A6 Compression Method    0000 (0) 'Stored'\n-0C02A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C02AC CRC                   00000000 (0)\n-0C02B0 Compressed Size       00000000 (0)\n-0C02B4 Uncompressed Size     00000000 (0)\n-0C02B8 Filename Length       0074 (116)\n-0C02BA Extra Length          0009 (9)\n-0C02BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC02BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0330 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0332   Length              0005 (5)\n-0C0334   Flags               01 (1) 'Modification'\n-0C0335   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C0339 PAYLOAD\n-\n-0C0C31 DATA DESCRIPTOR       08074B50 (134695760)\n-0C0C35 CRC                   E6BF62E0 (3871302368)\n-0C0C39 Compressed Size       000008F8 (2296)\n-0C0C3D Uncompressed Size     000008F8 (2296)\n-\n-0C0C41 LOCAL HEADER #326     04034B50 (67324752)\n-0C0C45 Extract Zip Spec      14 (20) '2.0'\n-0C0C46 Extract OS            00 (0) 'MS-DOS'\n-0C0C47 General Purpose Flag  0000 (0)\n-0C0C49 Compression Method    0000 (0) 'Stored'\n-0C0C4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0C4F CRC                   00000000 (0)\n-0C0C53 Compressed Size       00000000 (0)\n-0C0C57 Uncompressed Size     00000000 (0)\n-0C0C5B Filename Length       0065 (101)\n-0C0C5D Extra Length          0009 (9)\n-0C0C5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0C5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0CC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0CC6   Length              0005 (5)\n-0C0CC8   Flags               01 (1) 'Modification'\n-0C0CC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C0CCD LOCAL HEADER #327     04034B50 (67324752)\n-0C0CD1 Extract Zip Spec      14 (20) '2.0'\n-0C0CD2 Extract OS            00 (0) 'MS-DOS'\n-0C0CD3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C0CD5 Compression Method    0000 (0) 'Stored'\n-0C0CD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0CDB CRC                   00000000 (0)\n-0C0CDF Compressed Size       00000000 (0)\n-0C0CE3 Uncompressed Size     00000000 (0)\n-0C0CE7 Filename Length       007B (123)\n-0C0CE9 Extra Length          0009 (9)\n-0C0CEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0CEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0D66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0D68   Length              0005 (5)\n-0C0D6A   Flags               01 (1) 'Modification'\n-0C0D6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C0D6F PAYLOAD\n-\n-0C15A0 DATA DESCRIPTOR       08074B50 (134695760)\n-0C15A4 CRC                   F05E2331 (4032701233)\n-0C15A8 Compressed Size       00000831 (2097)\n-0C15AC Uncompressed Size     00000831 (2097)\n-\n-0C15B0 LOCAL HEADER #328     04034B50 (67324752)\n-0C15B4 Extract Zip Spec      14 (20) '2.0'\n-0C15B5 Extract OS            00 (0) 'MS-DOS'\n-0C15B6 General Purpose Flag  0000 (0)\n-0C15B8 Compression Method    0000 (0) 'Stored'\n-0C15BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C15BE CRC                   00000000 (0)\n-0C15C2 Compressed Size       00000000 (0)\n-0C15C6 Uncompressed Size     00000000 (0)\n-0C15CA Filename Length       0063 (99)\n-0C15CC Extra Length          0009 (9)\n-0C15CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC15CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1631 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1633   Length              0005 (5)\n-0C1635   Flags               01 (1) 'Modification'\n-0C1636   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C163A LOCAL HEADER #329     04034B50 (67324752)\n-0C163E Extract Zip Spec      14 (20) '2.0'\n-0C163F Extract OS            00 (0) 'MS-DOS'\n-0C1640 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C1642 Compression Method    0000 (0) 'Stored'\n-0C1644 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C1648 CRC                   00000000 (0)\n-0C164C Compressed Size       00000000 (0)\n-0C1650 Uncompressed Size     00000000 (0)\n-0C1654 Filename Length       0079 (121)\n-0C1656 Extra Length          0009 (9)\n-0C1658 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1658: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C16D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C16D3   Length              0005 (5)\n-0C16D5   Flags               01 (1) 'Modification'\n-0C16D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C16DA PAYLOAD\n-\n-0C2CAA DATA DESCRIPTOR       08074B50 (134695760)\n-0C2CAE CRC                   80ED3BA4 (2163030948)\n-0C2CB2 Compressed Size       000015D0 (5584)\n-0C2CB6 Uncompressed Size     000015D0 (5584)\n-\n-0C2CBA LOCAL HEADER #330     04034B50 (67324752)\n-0C2CBE Extract Zip Spec      14 (20) '2.0'\n-0C2CBF Extract OS            00 (0) 'MS-DOS'\n-0C2CC0 General Purpose Flag  0000 (0)\n-0C2CC2 Compression Method    0000 (0) 'Stored'\n-0C2CC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C2CC8 CRC                   00000000 (0)\n-0C2CCC Compressed Size       00000000 (0)\n-0C2CD0 Uncompressed Size     00000000 (0)\n-0C2CD4 Filename Length       0069 (105)\n-0C2CD6 Extra Length          0009 (9)\n-0C2CD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC2CD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2D41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2D43   Length              0005 (5)\n-0C2D45   Flags               01 (1) 'Modification'\n-0C2D46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C2D4A LOCAL HEADER #331     04034B50 (67324752)\n-0C2D4E Extract Zip Spec      14 (20) '2.0'\n-0C2D4F Extract OS            00 (0) 'MS-DOS'\n-0C2D50 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C2D52 Compression Method    0000 (0) 'Stored'\n-0C2D54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C2D58 CRC                   00000000 (0)\n-0C2D5C Compressed Size       00000000 (0)\n-0C2D60 Uncompressed Size     00000000 (0)\n-0C2D64 Filename Length       007F (127)\n-0C2D66 Extra Length          0009 (9)\n-0C2D68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC2D68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2DE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2DE9   Length              0005 (5)\n-0C2DEB   Flags               01 (1) 'Modification'\n-0C2DEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C2DF0 PAYLOAD\n-\n-0C4D9E DATA DESCRIPTOR       08074B50 (134695760)\n-0C4DA2 CRC                   7018E446 (1880679494)\n-0C4DA6 Compressed Size       00001FAE (8110)\n-0C4DAA Uncompressed Size     00001FAE (8110)\n-\n-0C4DAE LOCAL HEADER #332     04034B50 (67324752)\n-0C4DB2 Extract Zip Spec      14 (20) '2.0'\n-0C4DB3 Extract OS            00 (0) 'MS-DOS'\n-0C4DB4 General Purpose Flag  0000 (0)\n-0C4DB6 Compression Method    0000 (0) 'Stored'\n-0C4DB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C4DBC CRC                   00000000 (0)\n-0C4DC0 Compressed Size       00000000 (0)\n-0C4DC4 Uncompressed Size     00000000 (0)\n-0C4DC8 Filename Length       0060 (96)\n-0C4DCA Extra Length          0009 (9)\n-0C4DCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC4DCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C4E2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C4E2E   Length              0005 (5)\n-0C4E30   Flags               01 (1) 'Modification'\n-0C4E31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C4E35 LOCAL HEADER #333     04034B50 (67324752)\n-0C4E39 Extract Zip Spec      14 (20) '2.0'\n-0C4E3A Extract OS            00 (0) 'MS-DOS'\n-0C4E3B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C4E3D Compression Method    0000 (0) 'Stored'\n-0C4E3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C4E43 CRC                   00000000 (0)\n-0C4E47 Compressed Size       00000000 (0)\n-0C4E4B Uncompressed Size     00000000 (0)\n-0C4E4F Filename Length       0076 (118)\n-0C4E51 Extra Length          0009 (9)\n-0C4E53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC4E53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C4EC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C4ECB   Length              0005 (5)\n-0C4ECD   Flags               01 (1) 'Modification'\n-0C4ECE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C4ED2 PAYLOAD\n-\n-0C61CC DATA DESCRIPTOR       08074B50 (134695760)\n-0C61D0 CRC                   61A0CE5A (1637928538)\n-0C61D4 Compressed Size       000012FA (4858)\n-0C61D8 Uncompressed Size     000012FA (4858)\n-\n-0C61DC LOCAL HEADER #334     04034B50 (67324752)\n-0C61E0 Extract Zip Spec      14 (20) '2.0'\n-0C61E1 Extract OS            00 (0) 'MS-DOS'\n-0C61E2 General Purpose Flag  0000 (0)\n-0C61E4 Compression Method    0000 (0) 'Stored'\n-0C61E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C61EA CRC                   00000000 (0)\n-0C61EE Compressed Size       00000000 (0)\n-0C61F2 Uncompressed Size     00000000 (0)\n-0C61F6 Filename Length       0063 (99)\n-0C61F8 Extra Length          0009 (9)\n-0C61FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC61FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C625D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C625F   Length              0005 (5)\n-0C6261   Flags               01 (1) 'Modification'\n-0C6262   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C6266 LOCAL HEADER #335     04034B50 (67324752)\n-0C626A Extract Zip Spec      14 (20) '2.0'\n-0C626B Extract OS            00 (0) 'MS-DOS'\n-0C626C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C626E Compression Method    0000 (0) 'Stored'\n-0C6270 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C6274 CRC                   00000000 (0)\n-0C6278 Compressed Size       00000000 (0)\n-0C627C Uncompressed Size     00000000 (0)\n-0C6280 Filename Length       0079 (121)\n-0C6282 Extra Length          0009 (9)\n-0C6284 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC6284: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C62FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C62FF   Length              0005 (5)\n-0C6301   Flags               01 (1) 'Modification'\n-0C6302   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C6306 PAYLOAD\n-\n-0C7617 DATA DESCRIPTOR       08074B50 (134695760)\n-0C761B CRC                   5A804AEF (1518357231)\n-0C761F Compressed Size       00001311 (4881)\n-0C7623 Uncompressed Size     00001311 (4881)\n-\n-0C7627 LOCAL HEADER #336     04034B50 (67324752)\n-0C762B Extract Zip Spec      14 (20) '2.0'\n-0C762C Extract OS            00 (0) 'MS-DOS'\n-0C762D General Purpose Flag  0000 (0)\n-0C762F Compression Method    0000 (0) 'Stored'\n-0C7631 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C7635 CRC                   00000000 (0)\n-0C7639 Compressed Size       00000000 (0)\n-0C763D Uncompressed Size     00000000 (0)\n-0C7641 Filename Length       005F (95)\n-0C7643 Extra Length          0009 (9)\n-0C7645 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC7645: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C76A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C76A6   Length              0005 (5)\n-0C76A8   Flags               01 (1) 'Modification'\n-0C76A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C76AD LOCAL HEADER #337     04034B50 (67324752)\n-0C76B1 Extract Zip Spec      14 (20) '2.0'\n-0C76B2 Extract OS            00 (0) 'MS-DOS'\n-0C76B3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C76B5 Compression Method    0000 (0) 'Stored'\n-0C76B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C76BB CRC                   00000000 (0)\n-0C76BF Compressed Size       00000000 (0)\n-0C76C3 Uncompressed Size     00000000 (0)\n-0C76C7 Filename Length       0075 (117)\n-0C76C9 Extra Length          0009 (9)\n-0C76CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC76CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C7740 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C7742   Length              0005 (5)\n-0C7744   Flags               01 (1) 'Modification'\n-0C7745   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C7749 PAYLOAD\n-\n-0C9F2D DATA DESCRIPTOR       08074B50 (134695760)\n-0C9F31 CRC                   F4A07CA3 (4104158371)\n-0C9F35 Compressed Size       000027E4 (10212)\n-0C9F39 Uncompressed Size     000027E4 (10212)\n-\n-0C9F3D LOCAL HEADER #338     04034B50 (67324752)\n-0C9F41 Extract Zip Spec      14 (20) '2.0'\n-0C9F42 Extract OS            00 (0) 'MS-DOS'\n-0C9F43 General Purpose Flag  0000 (0)\n-0C9F45 Compression Method    0000 (0) 'Stored'\n-0C9F47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C9F4B CRC                   00000000 (0)\n-0C9F4F Compressed Size       00000000 (0)\n-0C9F53 Uncompressed Size     00000000 (0)\n-0C9F57 Filename Length       0067 (103)\n-0C9F59 Extra Length          0009 (9)\n-0C9F5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC9F5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C9FC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C9FC4   Length              0005 (5)\n-0C9FC6   Flags               01 (1) 'Modification'\n-0C9FC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C9FCB LOCAL HEADER #339     04034B50 (67324752)\n-0C9FCF Extract Zip Spec      14 (20) '2.0'\n-0C9FD0 Extract OS            00 (0) 'MS-DOS'\n-0C9FD1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C9FD3 Compression Method    0000 (0) 'Stored'\n-0C9FD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C9FD9 CRC                   00000000 (0)\n-0C9FDD Compressed Size       00000000 (0)\n-0C9FE1 Uncompressed Size     00000000 (0)\n-0C9FE5 Filename Length       007D (125)\n-0C9FE7 Extra Length          0009 (9)\n-0C9FE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC9FE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CA066 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CA068   Length              0005 (5)\n-0CA06A   Flags               01 (1) 'Modification'\n-0CA06B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CA06F PAYLOAD\n-\n-0CB2E5 DATA DESCRIPTOR       08074B50 (134695760)\n-0CB2E9 CRC                   6E031E40 (1845698112)\n-0CB2ED Compressed Size       00001276 (4726)\n-0CB2F1 Uncompressed Size     00001276 (4726)\n-\n-0CB2F5 LOCAL HEADER #340     04034B50 (67324752)\n-0CB2F9 Extract Zip Spec      14 (20) '2.0'\n-0CB2FA Extract OS            00 (0) 'MS-DOS'\n-0CB2FB General Purpose Flag  0000 (0)\n-0CB2FD Compression Method    0000 (0) 'Stored'\n-0CB2FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CB303 CRC                   00000000 (0)\n-0CB307 Compressed Size       00000000 (0)\n-0CB30B Uncompressed Size     00000000 (0)\n-0CB30F Filename Length       0066 (102)\n-0CB311 Extra Length          0009 (9)\n-0CB313 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCB313: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CB379 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CB37B   Length              0005 (5)\n-0CB37D   Flags               01 (1) 'Modification'\n-0CB37E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CB382 LOCAL HEADER #341     04034B50 (67324752)\n-0CB386 Extract Zip Spec      14 (20) '2.0'\n-0CB387 Extract OS            00 (0) 'MS-DOS'\n-0CB388 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CB38A Compression Method    0000 (0) 'Stored'\n-0CB38C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CB390 CRC                   00000000 (0)\n-0CB394 Compressed Size       00000000 (0)\n-0CB398 Uncompressed Size     00000000 (0)\n-0CB39C Filename Length       007C (124)\n-0CB39E Extra Length          0009 (9)\n-0CB3A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCB3A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CB41C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CB41E   Length              0005 (5)\n-0CB420   Flags               01 (1) 'Modification'\n-0CB421   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CB425 PAYLOAD\n-\n-0CC003 DATA DESCRIPTOR       08074B50 (134695760)\n-0CC007 CRC                   5987930A (1502057226)\n-0CC00B Compressed Size       00000BDE (3038)\n-0CC00F Uncompressed Size     00000BDE (3038)\n-\n-0CC013 LOCAL HEADER #342     04034B50 (67324752)\n-0CC017 Extract Zip Spec      14 (20) '2.0'\n-0CC018 Extract OS            00 (0) 'MS-DOS'\n-0CC019 General Purpose Flag  0000 (0)\n-0CC01B Compression Method    0000 (0) 'Stored'\n-0CC01D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC021 CRC                   00000000 (0)\n-0CC025 Compressed Size       00000000 (0)\n-0CC029 Uncompressed Size     00000000 (0)\n-0CC02D Filename Length       0067 (103)\n-0CC02F Extra Length          0009 (9)\n-0CC031 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC031: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC098 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC09A   Length              0005 (5)\n-0CC09C   Flags               01 (1) 'Modification'\n-0CC09D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CC0A1 LOCAL HEADER #343     04034B50 (67324752)\n-0CC0A5 Extract Zip Spec      14 (20) '2.0'\n-0CC0A6 Extract OS            00 (0) 'MS-DOS'\n-0CC0A7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CC0A9 Compression Method    0000 (0) 'Stored'\n-0CC0AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC0AF CRC                   00000000 (0)\n-0CC0B3 Compressed Size       00000000 (0)\n-0CC0B7 Uncompressed Size     00000000 (0)\n-0CC0BB Filename Length       007D (125)\n-0CC0BD Extra Length          0009 (9)\n-0CC0BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC0BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC13C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC13E   Length              0005 (5)\n-0CC140   Flags               01 (1) 'Modification'\n-0CC141   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CC145 PAYLOAD\n-\n-0CCA14 DATA DESCRIPTOR       08074B50 (134695760)\n-0CCA18 CRC                   CA93F7B9 (3398694841)\n-0CCA1C Compressed Size       000008CF (2255)\n-0CCA20 Uncompressed Size     000008CF (2255)\n-\n-0CCA24 LOCAL HEADER #344     04034B50 (67324752)\n-0CCA28 Extract Zip Spec      14 (20) '2.0'\n-0CCA29 Extract OS            00 (0) 'MS-DOS'\n-0CCA2A General Purpose Flag  0000 (0)\n-0CCA2C Compression Method    0000 (0) 'Stored'\n-0CCA2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CCA32 CRC                   00000000 (0)\n-0CCA36 Compressed Size       00000000 (0)\n-0CCA3A Uncompressed Size     00000000 (0)\n-0CCA3E Filename Length       0065 (101)\n-0CCA40 Extra Length          0009 (9)\n-0CCA42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCCA42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CCAA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CCAA9   Length              0005 (5)\n-0CCAAB   Flags               01 (1) 'Modification'\n-0CCAAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CCAB0 LOCAL HEADER #345     04034B50 (67324752)\n-0CCAB4 Extract Zip Spec      14 (20) '2.0'\n-0CCAB5 Extract OS            00 (0) 'MS-DOS'\n-0CCAB6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CCAB8 Compression Method    0000 (0) 'Stored'\n-0CCABA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CCABE CRC                   00000000 (0)\n-0CCAC2 Compressed Size       00000000 (0)\n-0CCAC6 Uncompressed Size     00000000 (0)\n-0CCACA Filename Length       007B (123)\n-0CCACC Extra Length          0009 (9)\n-0CCACE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCCACE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CCB49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CCB4B   Length              0005 (5)\n-0CCB4D   Flags               01 (1) 'Modification'\n-0CCB4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CCB52 PAYLOAD\n-\n-0CD7FB DATA DESCRIPTOR       08074B50 (134695760)\n-0CD7FF CRC                   673E5975 (1732139381)\n-0CD803 Compressed Size       00000CA9 (3241)\n-0CD807 Uncompressed Size     00000CA9 (3241)\n-\n-0CD80B LOCAL HEADER #346     04034B50 (67324752)\n-0CD80F Extract Zip Spec      14 (20) '2.0'\n-0CD810 Extract OS            00 (0) 'MS-DOS'\n-0CD811 General Purpose Flag  0000 (0)\n-0CD813 Compression Method    0000 (0) 'Stored'\n-0CD815 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CD819 CRC                   00000000 (0)\n-0CD81D Compressed Size       00000000 (0)\n-0CD821 Uncompressed Size     00000000 (0)\n-0CD825 Filename Length       0063 (99)\n-0CD827 Extra Length          0009 (9)\n-0CD829 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCD829: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CD88C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CD88E   Length              0005 (5)\n-0CD890   Flags               01 (1) 'Modification'\n-0CD891   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CD895 LOCAL HEADER #347     04034B50 (67324752)\n-0CD899 Extract Zip Spec      14 (20) '2.0'\n-0CD89A Extract OS            00 (0) 'MS-DOS'\n-0CD89B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CD89D Compression Method    0000 (0) 'Stored'\n-0CD89F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CD8A3 CRC                   00000000 (0)\n-0CD8A7 Compressed Size       00000000 (0)\n-0CD8AB Uncompressed Size     00000000 (0)\n-0CD8AF Filename Length       0079 (121)\n-0CD8B1 Extra Length          0009 (9)\n-0CD8B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCD8B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CD92C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CD92E   Length              0005 (5)\n-0CD930   Flags               01 (1) 'Modification'\n-0CD931   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CD935 PAYLOAD\n-\n-0D296D DATA DESCRIPTOR       08074B50 (134695760)\n-0D2971 CRC                   2D1E752C (756970796)\n-0D2975 Compressed Size       00005038 (20536)\n-0D2979 Uncompressed Size     00005038 (20536)\n-\n-0D297D LOCAL HEADER #348     04034B50 (67324752)\n-0D2981 Extract Zip Spec      14 (20) '2.0'\n-0D2982 Extract OS            00 (0) 'MS-DOS'\n-0D2983 General Purpose Flag  0000 (0)\n-0D2985 Compression Method    0000 (0) 'Stored'\n-0D2987 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D298B CRC                   00000000 (0)\n-0D298F Compressed Size       00000000 (0)\n-0D2993 Uncompressed Size     00000000 (0)\n-0D2997 Filename Length       005C (92)\n-0D2999 Extra Length          0009 (9)\n-0D299B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD299B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D29F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D29F9   Length              0005 (5)\n-0D29FB   Flags               01 (1) 'Modification'\n-0D29FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D2A00 LOCAL HEADER #349     04034B50 (67324752)\n-0D2A04 Extract Zip Spec      14 (20) '2.0'\n-0D2A05 Extract OS            00 (0) 'MS-DOS'\n-0D2A06 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D2A08 Compression Method    0000 (0) 'Stored'\n-0D2A0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D2A0E CRC                   00000000 (0)\n-0D2A12 Compressed Size       00000000 (0)\n-0D2A16 Uncompressed Size     00000000 (0)\n-0D2A1A Filename Length       0072 (114)\n-0D2A1C Extra Length          0009 (9)\n-0D2A1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD2A1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D2A90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D2A92   Length              0005 (5)\n-0D2A94   Flags               01 (1) 'Modification'\n-0D2A95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D2A99 PAYLOAD\n-\n-0D451E DATA DESCRIPTOR       08074B50 (134695760)\n-0D4522 CRC                   DB187B38 (3675814712)\n-0D4526 Compressed Size       00001A85 (6789)\n-0D452A Uncompressed Size     00001A85 (6789)\n-\n-0D452E LOCAL HEADER #350     04034B50 (67324752)\n-0D4532 Extract Zip Spec      14 (20) '2.0'\n-0D4533 Extract OS            00 (0) 'MS-DOS'\n-0D4534 General Purpose Flag  0000 (0)\n-0D4536 Compression Method    0000 (0) 'Stored'\n-0D4538 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D453C CRC                   00000000 (0)\n-0D4540 Compressed Size       00000000 (0)\n-0D4544 Uncompressed Size     00000000 (0)\n-0D4548 Filename Length       005D (93)\n-0D454A Extra Length          0009 (9)\n-0D454C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD454C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D45A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D45AB   Length              0005 (5)\n-0D45AD   Flags               01 (1) 'Modification'\n-0D45AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D45B2 LOCAL HEADER #351     04034B50 (67324752)\n-0D45B6 Extract Zip Spec      14 (20) '2.0'\n-0D45B7 Extract OS            00 (0) 'MS-DOS'\n-0D45B8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D45BA Compression Method    0000 (0) 'Stored'\n-0D45BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D45C0 CRC                   00000000 (0)\n-0D45C4 Compressed Size       00000000 (0)\n-0D45C8 Uncompressed Size     00000000 (0)\n-0D45CC Filename Length       0073 (115)\n-0D45CE Extra Length          0009 (9)\n-0D45D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD45D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D4643 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D4645   Length              0005 (5)\n-0D4647   Flags               01 (1) 'Modification'\n-0D4648   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D464C PAYLOAD\n-\n-0D60BA DATA DESCRIPTOR       08074B50 (134695760)\n-0D60BE CRC                   CD183667 (3440916071)\n-0D60C2 Compressed Size       00001A6E (6766)\n-0D60C6 Uncompressed Size     00001A6E (6766)\n-\n-0D60CA LOCAL HEADER #352     04034B50 (67324752)\n-0D60CE Extract Zip Spec      14 (20) '2.0'\n-0D60CF Extract OS            00 (0) 'MS-DOS'\n-0D60D0 General Purpose Flag  0000 (0)\n-0D60D2 Compression Method    0000 (0) 'Stored'\n-0D60D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D60D8 CRC                   00000000 (0)\n-0D60DC Compressed Size       00000000 (0)\n-0D60E0 Uncompressed Size     00000000 (0)\n-0D60E4 Filename Length       005D (93)\n-0D60E6 Extra Length          0009 (9)\n-0D60E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD60E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D6145 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D6147   Length              0005 (5)\n-0D6149   Flags               01 (1) 'Modification'\n-0D614A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D614E LOCAL HEADER #353     04034B50 (67324752)\n-0D6152 Extract Zip Spec      14 (20) '2.0'\n-0D6153 Extract OS            00 (0) 'MS-DOS'\n-0D6154 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D6156 Compression Method    0000 (0) 'Stored'\n-0D6158 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D615C CRC                   00000000 (0)\n-0D6160 Compressed Size       00000000 (0)\n-0D6164 Uncompressed Size     00000000 (0)\n-0D6168 Filename Length       0073 (115)\n-0D616A Extra Length          0009 (9)\n-0D616C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD616C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D61DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D61E1   Length              0005 (5)\n-0D61E3   Flags               01 (1) 'Modification'\n-0D61E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D61E8 PAYLOAD\n-\n-0D7C7A DATA DESCRIPTOR       08074B50 (134695760)\n-0D7C7E CRC                   0C7DD276 (209572470)\n-0D7C82 Compressed Size       00001A92 (6802)\n-0D7C86 Uncompressed Size     00001A92 (6802)\n-\n-0D7C8A LOCAL HEADER #354     04034B50 (67324752)\n-0D7C8E Extract Zip Spec      14 (20) '2.0'\n-0D7C8F Extract OS            00 (0) 'MS-DOS'\n-0D7C90 General Purpose Flag  0000 (0)\n-0D7C92 Compression Method    0000 (0) 'Stored'\n-0D7C94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D7C98 CRC                   00000000 (0)\n-0D7C9C Compressed Size       00000000 (0)\n-0D7CA0 Uncompressed Size     00000000 (0)\n-0D7CA4 Filename Length       005E (94)\n-0D7CA6 Extra Length          0009 (9)\n-0D7CA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD7CA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D7D06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D7D08   Length              0005 (5)\n-0D7D0A   Flags               01 (1) 'Modification'\n-0D7D0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D7D0F LOCAL HEADER #355     04034B50 (67324752)\n-0D7D13 Extract Zip Spec      14 (20) '2.0'\n-0D7D14 Extract OS            00 (0) 'MS-DOS'\n-0D7D15 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D7D17 Compression Method    0000 (0) 'Stored'\n-0D7D19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D7D1D CRC                   00000000 (0)\n-0D7D21 Compressed Size       00000000 (0)\n-0D7D25 Uncompressed Size     00000000 (0)\n-0D7D29 Filename Length       0074 (116)\n-0D7D2B Extra Length          0009 (9)\n-0D7D2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD7D2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D7DA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D7DA3   Length              0005 (5)\n-0D7DA5   Flags               01 (1) 'Modification'\n-0D7DA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D7DAA PAYLOAD\n-\n-0D94DD DATA DESCRIPTOR       08074B50 (134695760)\n-0D94E1 CRC                   60EA12C2 (1625952962)\n-0D94E5 Compressed Size       00001733 (5939)\n-0D94E9 Uncompressed Size     00001733 (5939)\n-\n-0D94ED LOCAL HEADER #356     04034B50 (67324752)\n-0D94F1 Extract Zip Spec      14 (20) '2.0'\n-0D94F2 Extract OS            00 (0) 'MS-DOS'\n-0D94F3 General Purpose Flag  0000 (0)\n-0D94F5 Compression Method    0000 (0) 'Stored'\n-0D94F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D94FB CRC                   00000000 (0)\n-0D94FF Compressed Size       00000000 (0)\n-0D9503 Uncompressed Size     00000000 (0)\n-0D9507 Filename Length       0061 (97)\n-0D9509 Extra Length          0009 (9)\n-0D950B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD950B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D956C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D956E   Length              0005 (5)\n-0D9570   Flags               01 (1) 'Modification'\n-0D9571   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D9575 LOCAL HEADER #357     04034B50 (67324752)\n-0D9579 Extract Zip Spec      14 (20) '2.0'\n-0D957A Extract OS            00 (0) 'MS-DOS'\n-0D957B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D957D Compression Method    0000 (0) 'Stored'\n-0D957F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D9583 CRC                   00000000 (0)\n-0D9587 Compressed Size       00000000 (0)\n-0D958B Uncompressed Size     00000000 (0)\n-0D958F Filename Length       0077 (119)\n-0D9591 Extra Length          0009 (9)\n-0D9593 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD9593: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D960A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D960C   Length              0005 (5)\n-0D960E   Flags               01 (1) 'Modification'\n-0D960F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D9613 PAYLOAD\n-\n-0DAC90 DATA DESCRIPTOR       08074B50 (134695760)\n-0DAC94 CRC                   4BB1EABD (1269951165)\n-0DAC98 Compressed Size       0000167D (5757)\n-0DAC9C Uncompressed Size     0000167D (5757)\n-\n-0DACA0 LOCAL HEADER #358     04034B50 (67324752)\n-0DACA4 Extract Zip Spec      14 (20) '2.0'\n-0DACA5 Extract OS            00 (0) 'MS-DOS'\n-0DACA6 General Purpose Flag  0000 (0)\n-0DACA8 Compression Method    0000 (0) 'Stored'\n-0DACAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DACAE CRC                   00000000 (0)\n-0DACB2 Compressed Size       00000000 (0)\n-0DACB6 Uncompressed Size     00000000 (0)\n-0DACBA Filename Length       0061 (97)\n-0DACBC Extra Length          0009 (9)\n-0DACBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDACBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DAD1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DAD21   Length              0005 (5)\n-0DAD23   Flags               01 (1) 'Modification'\n-0DAD24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DAD28 LOCAL HEADER #359     04034B50 (67324752)\n-0DAD2C Extract Zip Spec      14 (20) '2.0'\n-0DAD2D Extract OS            00 (0) 'MS-DOS'\n-0DAD2E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DAD30 Compression Method    0000 (0) 'Stored'\n-0DAD32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DAD36 CRC                   00000000 (0)\n-0DAD3A Compressed Size       00000000 (0)\n-0DAD3E Uncompressed Size     00000000 (0)\n-0DAD42 Filename Length       0077 (119)\n-0DAD44 Extra Length          0009 (9)\n-0DAD46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDAD46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DADBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DADBF   Length              0005 (5)\n-0DADC1   Flags               01 (1) 'Modification'\n-0DADC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DADC6 PAYLOAD\n-\n-0DE050 DATA DESCRIPTOR       08074B50 (134695760)\n-0DE054 CRC                   A18A8EB9 (2710212281)\n-0DE058 Compressed Size       0000328A (12938)\n-0DE05C Uncompressed Size     0000328A (12938)\n-\n-0DE060 LOCAL HEADER #360     04034B50 (67324752)\n-0DE064 Extract Zip Spec      14 (20) '2.0'\n-0DE065 Extract OS            00 (0) 'MS-DOS'\n-0DE066 General Purpose Flag  0000 (0)\n-0DE068 Compression Method    0000 (0) 'Stored'\n-0DE06A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DE06E CRC                   00000000 (0)\n-0DE072 Compressed Size       00000000 (0)\n-0DE076 Uncompressed Size     00000000 (0)\n-0DE07A Filename Length       0060 (96)\n-0DE07C Extra Length          0009 (9)\n-0DE07E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDE07E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DE0DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DE0E0   Length              0005 (5)\n-0DE0E2   Flags               01 (1) 'Modification'\n-0DE0E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DE0E7 LOCAL HEADER #361     04034B50 (67324752)\n-0DE0EB Extract Zip Spec      14 (20) '2.0'\n-0DE0EC Extract OS            00 (0) 'MS-DOS'\n-0DE0ED General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DE0EF Compression Method    0000 (0) 'Stored'\n-0DE0F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DE0F5 CRC                   00000000 (0)\n-0DE0F9 Compressed Size       00000000 (0)\n-0DE0FD Uncompressed Size     00000000 (0)\n-0DE101 Filename Length       0076 (118)\n-0DE103 Extra Length          0009 (9)\n-0DE105 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDE105: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DE17B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DE17D   Length              0005 (5)\n-0DE17F   Flags               01 (1) 'Modification'\n-0DE180   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DE184 PAYLOAD\n-\n-0E19FD DATA DESCRIPTOR       08074B50 (134695760)\n-0E1A01 CRC                   B7B762D6 (3082248918)\n-0E1A05 Compressed Size       00003879 (14457)\n-0E1A09 Uncompressed Size     00003879 (14457)\n-\n-0E1A0D LOCAL HEADER #362     04034B50 (67324752)\n-0E1A11 Extract Zip Spec      14 (20) '2.0'\n-0E1A12 Extract OS            00 (0) 'MS-DOS'\n-0E1A13 General Purpose Flag  0000 (0)\n-0E1A15 Compression Method    0000 (0) 'Stored'\n-0E1A17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E1A1B CRC                   00000000 (0)\n-0E1A1F Compressed Size       00000000 (0)\n-0E1A23 Uncompressed Size     00000000 (0)\n-0E1A27 Filename Length       0064 (100)\n-0E1A29 Extra Length          0009 (9)\n-0E1A2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE1A2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E1A8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E1A91   Length              0005 (5)\n-0E1A93   Flags               01 (1) 'Modification'\n-0E1A94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E1A98 LOCAL HEADER #363     04034B50 (67324752)\n-0E1A9C Extract Zip Spec      14 (20) '2.0'\n-0E1A9D Extract OS            00 (0) 'MS-DOS'\n-0E1A9E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E1AA0 Compression Method    0000 (0) 'Stored'\n-0E1AA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E1AA6 CRC                   00000000 (0)\n-0E1AAA Compressed Size       00000000 (0)\n-0E1AAE Uncompressed Size     00000000 (0)\n-0E1AB2 Filename Length       007A (122)\n-0E1AB4 Extra Length          0009 (9)\n-0E1AB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE1AB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E1B30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E1B32   Length              0005 (5)\n-0E1B34   Flags               01 (1) 'Modification'\n-0E1B35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E1B39 PAYLOAD\n-\n-0E3C89 DATA DESCRIPTOR       08074B50 (134695760)\n-0E3C8D CRC                   A2B9D29A (2730087066)\n-0E3C91 Compressed Size       00002150 (8528)\n-0E3C95 Uncompressed Size     00002150 (8528)\n-\n-0E3C99 LOCAL HEADER #364     04034B50 (67324752)\n-0E3C9D Extract Zip Spec      14 (20) '2.0'\n-0E3C9E Extract OS            00 (0) 'MS-DOS'\n-0E3C9F General Purpose Flag  0000 (0)\n-0E3CA1 Compression Method    0000 (0) 'Stored'\n-0E3CA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E3CA7 CRC                   00000000 (0)\n-0E3CAB Compressed Size       00000000 (0)\n-0E3CAF Uncompressed Size     00000000 (0)\n-0E3CB3 Filename Length       005D (93)\n-0E3CB5 Extra Length          0009 (9)\n-0E3CB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE3CB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E3D14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E3D16   Length              0005 (5)\n-0E3D18   Flags               01 (1) 'Modification'\n-0E3D19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E3D1D LOCAL HEADER #365     04034B50 (67324752)\n-0E3D21 Extract Zip Spec      14 (20) '2.0'\n-0E3D22 Extract OS            00 (0) 'MS-DOS'\n-0E3D23 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E3D25 Compression Method    0000 (0) 'Stored'\n-0E3D27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E3D2B CRC                   00000000 (0)\n-0E3D2F Compressed Size       00000000 (0)\n-0E3D33 Uncompressed Size     00000000 (0)\n-0E3D37 Filename Length       0073 (115)\n-0E3D39 Extra Length          0009 (9)\n-0E3D3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE3D3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E3DAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E3DB0   Length              0005 (5)\n-0E3DB2   Flags               01 (1) 'Modification'\n-0E3DB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E3DB7 PAYLOAD\n-\n-0E4F93 DATA DESCRIPTOR       08074B50 (134695760)\n-0E4F97 CRC                   C4FC7EA2 (3304881826)\n-0E4F9B Compressed Size       000011DC (4572)\n-0E4F9F Uncompressed Size     000011DC (4572)\n-\n-0E4FA3 LOCAL HEADER #366     04034B50 (67324752)\n-0E4FA7 Extract Zip Spec      14 (20) '2.0'\n-0E4FA8 Extract OS            00 (0) 'MS-DOS'\n-0E4FA9 General Purpose Flag  0000 (0)\n-0E4FAB Compression Method    0000 (0) 'Stored'\n-0E4FAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E4FB1 CRC                   00000000 (0)\n-0E4FB5 Compressed Size       00000000 (0)\n-0E4FB9 Uncompressed Size     00000000 (0)\n-0E4FBD Filename Length       0060 (96)\n-0E4FBF Extra Length          0009 (9)\n-0E4FC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE4FC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E5021 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E5023   Length              0005 (5)\n-0E5025   Flags               01 (1) 'Modification'\n-0E5026   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E502A LOCAL HEADER #367     04034B50 (67324752)\n-0E502E Extract Zip Spec      14 (20) '2.0'\n-0E502F Extract OS            00 (0) 'MS-DOS'\n-0E5030 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E5032 Compression Method    0000 (0) 'Stored'\n-0E5034 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E5038 CRC                   00000000 (0)\n-0E503C Compressed Size       00000000 (0)\n-0E5040 Uncompressed Size     00000000 (0)\n-0E5044 Filename Length       0076 (118)\n-0E5046 Extra Length          0009 (9)\n-0E5048 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE5048: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E50BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E50C0   Length              0005 (5)\n-0E50C2   Flags               01 (1) 'Modification'\n-0E50C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E50C7 PAYLOAD\n-\n-0EC3C2 DATA DESCRIPTOR       08074B50 (134695760)\n-0EC3C6 CRC                   EE30A8D8 (3996166360)\n-0EC3CA Compressed Size       000072FB (29435)\n-0EC3CE Uncompressed Size     000072FB (29435)\n-\n-0EC3D2 LOCAL HEADER #368     04034B50 (67324752)\n-0EC3D6 Extract Zip Spec      14 (20) '2.0'\n-0EC3D7 Extract OS            00 (0) 'MS-DOS'\n-0EC3D8 General Purpose Flag  0000 (0)\n-0EC3DA Compression Method    0000 (0) 'Stored'\n-0EC3DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EC3E0 CRC                   00000000 (0)\n-0EC3E4 Compressed Size       00000000 (0)\n-0EC3E8 Uncompressed Size     00000000 (0)\n-0EC3EC Filename Length       0066 (102)\n-0EC3EE Extra Length          0009 (9)\n-0EC3F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEC3F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EC456 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EC458   Length              0005 (5)\n-0EC45A   Flags               01 (1) 'Modification'\n-0EC45B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EC45F LOCAL HEADER #369     04034B50 (67324752)\n-0EC463 Extract Zip Spec      14 (20) '2.0'\n-0EC464 Extract OS            00 (0) 'MS-DOS'\n-0EC465 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EC467 Compression Method    0000 (0) 'Stored'\n-0EC469 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EC46D CRC                   00000000 (0)\n-0EC471 Compressed Size       00000000 (0)\n-0EC475 Uncompressed Size     00000000 (0)\n-0EC479 Filename Length       007C (124)\n-0EC47B Extra Length          0009 (9)\n-0EC47D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEC47D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EC4F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EC4FB   Length              0005 (5)\n-0EC4FD   Flags               01 (1) 'Modification'\n-0EC4FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EC502 PAYLOAD\n-\n-0F0D10 DATA DESCRIPTOR       08074B50 (134695760)\n-0F0D14 CRC                   EA36353C (3929421116)\n-0F0D18 Compressed Size       0000480E (18446)\n-0F0D1C Uncompressed Size     0000480E (18446)\n-\n-0F0D20 LOCAL HEADER #370     04034B50 (67324752)\n-0F0D24 Extract Zip Spec      14 (20) '2.0'\n-0F0D25 Extract OS            00 (0) 'MS-DOS'\n-0F0D26 General Purpose Flag  0000 (0)\n-0F0D28 Compression Method    0000 (0) 'Stored'\n-0F0D2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F0D2E CRC                   00000000 (0)\n-0F0D32 Compressed Size       00000000 (0)\n-0F0D36 Uncompressed Size     00000000 (0)\n-0F0D3A Filename Length       0065 (101)\n-0F0D3C Extra Length          0009 (9)\n-0F0D3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF0D3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F0DA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F0DA5   Length              0005 (5)\n-0F0DA7   Flags               01 (1) 'Modification'\n-0F0DA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F0DAC LOCAL HEADER #371     04034B50 (67324752)\n-0F0DB0 Extract Zip Spec      14 (20) '2.0'\n-0F0DB1 Extract OS            00 (0) 'MS-DOS'\n-0F0DB2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F0DB4 Compression Method    0000 (0) 'Stored'\n-0F0DB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F0DBA CRC                   00000000 (0)\n-0F0DBE Compressed Size       00000000 (0)\n-0F0DC2 Uncompressed Size     00000000 (0)\n-0F0DC6 Filename Length       007B (123)\n-0F0DC8 Extra Length          0009 (9)\n-0F0DCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF0DCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F0E45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F0E47   Length              0005 (5)\n-0F0E49   Flags               01 (1) 'Modification'\n-0F0E4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F0E4E PAYLOAD\n-\n-0F1604 DATA DESCRIPTOR       08074B50 (134695760)\n-0F1608 CRC                   CA474DE0 (3393670624)\n-0F160C Compressed Size       000007B6 (1974)\n-0F1610 Uncompressed Size     000007B6 (1974)\n-\n-0F1614 LOCAL HEADER #372     04034B50 (67324752)\n-0F1618 Extract Zip Spec      14 (20) '2.0'\n-0F1619 Extract OS            00 (0) 'MS-DOS'\n-0F161A General Purpose Flag  0000 (0)\n-0F161C Compression Method    0000 (0) 'Stored'\n-0F161E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F1622 CRC                   00000000 (0)\n-0F1626 Compressed Size       00000000 (0)\n-0F162A Uncompressed Size     00000000 (0)\n-0F162E Filename Length       0061 (97)\n-0F1630 Extra Length          0009 (9)\n-0F1632 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF1632: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F1693 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F1695   Length              0005 (5)\n-0F1697   Flags               01 (1) 'Modification'\n-0F1698   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F169C LOCAL HEADER #373     04034B50 (67324752)\n-0F16A0 Extract Zip Spec      14 (20) '2.0'\n-0F16A1 Extract OS            00 (0) 'MS-DOS'\n-0F16A2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F16A4 Compression Method    0000 (0) 'Stored'\n-0F16A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F16AA CRC                   00000000 (0)\n-0F16AE Compressed Size       00000000 (0)\n-0F16B2 Uncompressed Size     00000000 (0)\n-0F16B6 Filename Length       0077 (119)\n-0F16B8 Extra Length          0009 (9)\n-0F16BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF16BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F1731 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F1733   Length              0005 (5)\n-0F1735   Flags               01 (1) 'Modification'\n-0F1736   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F173A PAYLOAD\n-\n-0F2905 DATA DESCRIPTOR       08074B50 (134695760)\n-0F2909 CRC                   A19F99D4 (2711591380)\n-0F290D Compressed Size       000011CB (4555)\n-0F2911 Uncompressed Size     000011CB (4555)\n-\n-0F2915 LOCAL HEADER #374     04034B50 (67324752)\n-0F2919 Extract Zip Spec      14 (20) '2.0'\n-0F291A Extract OS            00 (0) 'MS-DOS'\n-0F291B General Purpose Flag  0000 (0)\n-0F291D Compression Method    0000 (0) 'Stored'\n-0F291F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F2923 CRC                   00000000 (0)\n-0F2927 Compressed Size       00000000 (0)\n-0F292B Uncompressed Size     00000000 (0)\n-0F292F Filename Length       005D (93)\n-0F2931 Extra Length          0009 (9)\n-0F2933 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF2933: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F2990 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F2992   Length              0005 (5)\n-0F2994   Flags               01 (1) 'Modification'\n-0F2995   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F2999 LOCAL HEADER #375     04034B50 (67324752)\n-0F299D Extract Zip Spec      14 (20) '2.0'\n-0F299E Extract OS            00 (0) 'MS-DOS'\n-0F299F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F29A1 Compression Method    0000 (0) 'Stored'\n-0F29A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F29A7 CRC                   00000000 (0)\n-0F29AB Compressed Size       00000000 (0)\n-0F29AF Uncompressed Size     00000000 (0)\n-0F29B3 Filename Length       0073 (115)\n-0F29B5 Extra Length          0009 (9)\n-0F29B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF29B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F2A2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F2A2C   Length              0005 (5)\n-0F2A2E   Flags               01 (1) 'Modification'\n-0F2A2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F2A33 PAYLOAD\n-\n-0F5282 DATA DESCRIPTOR       08074B50 (134695760)\n-0F5286 CRC                   7573E84B (1970530379)\n-0F528A Compressed Size       0000284F (10319)\n-0F528E Uncompressed Size     0000284F (10319)\n-\n-0F5292 LOCAL HEADER #376     04034B50 (67324752)\n-0F5296 Extract Zip Spec      14 (20) '2.0'\n-0F5297 Extract OS            00 (0) 'MS-DOS'\n-0F5298 General Purpose Flag  0000 (0)\n-0F529A Compression Method    0000 (0) 'Stored'\n-0F529C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F52A0 CRC                   00000000 (0)\n-0F52A4 Compressed Size       00000000 (0)\n-0F52A8 Uncompressed Size     00000000 (0)\n-0F52AC Filename Length       0061 (97)\n-0F52AE Extra Length          0009 (9)\n-0F52B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF52B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F5311 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F5313   Length              0005 (5)\n-0F5315   Flags               01 (1) 'Modification'\n-0F5316   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F531A LOCAL HEADER #377     04034B50 (67324752)\n-0F531E Extract Zip Spec      14 (20) '2.0'\n-0F531F Extract OS            00 (0) 'MS-DOS'\n-0F5320 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F5322 Compression Method    0000 (0) 'Stored'\n-0F5324 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5328 CRC                   00000000 (0)\n-0F532C Compressed Size       00000000 (0)\n-0F5330 Uncompressed Size     00000000 (0)\n-0F5334 Filename Length       0077 (119)\n-0F5336 Extra Length          0009 (9)\n-0F5338 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5338: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F53AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F53B1   Length              0005 (5)\n-0F53B3   Flags               01 (1) 'Modification'\n-0F53B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F53B8 PAYLOAD\n-\n-0F7B2F DATA DESCRIPTOR       08074B50 (134695760)\n-0F7B33 CRC                   131CB9D8 (320649688)\n-0F7B37 Compressed Size       00002777 (10103)\n-0F7B3B Uncompressed Size     00002777 (10103)\n-\n-0F7B3F LOCAL HEADER #378     04034B50 (67324752)\n-0F7B43 Extract Zip Spec      14 (20) '2.0'\n-0F7B44 Extract OS            00 (0) 'MS-DOS'\n-0F7B45 General Purpose Flag  0000 (0)\n-0F7B47 Compression Method    0000 (0) 'Stored'\n-0F7B49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F7B4D CRC                   00000000 (0)\n-0F7B51 Compressed Size       00000000 (0)\n-0F7B55 Uncompressed Size     00000000 (0)\n-0F7B59 Filename Length       0060 (96)\n-0F7B5B Extra Length          0009 (9)\n-0F7B5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF7B5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F7BBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F7BBF   Length              0005 (5)\n-0F7BC1   Flags               01 (1) 'Modification'\n-0F7BC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F7BC6 LOCAL HEADER #379     04034B50 (67324752)\n-0F7BCA Extract Zip Spec      14 (20) '2.0'\n-0F7BCB Extract OS            00 (0) 'MS-DOS'\n-0F7BCC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F7BCE Compression Method    0000 (0) 'Stored'\n-0F7BD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F7BD4 CRC                   00000000 (0)\n-0F7BD8 Compressed Size       00000000 (0)\n-0F7BDC Uncompressed Size     00000000 (0)\n-0F7BE0 Filename Length       0076 (118)\n-0F7BE2 Extra Length          0009 (9)\n-0F7BE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF7BE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F7C5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F7C5C   Length              0005 (5)\n-0F7C5E   Flags               01 (1) 'Modification'\n-0F7C5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F7C63 PAYLOAD\n-\n-0F8D70 DATA DESCRIPTOR       08074B50 (134695760)\n-0F8D74 CRC                   95FAB1DA (2516234714)\n-0F8D78 Compressed Size       0000110D (4365)\n-0F8D7C Uncompressed Size     0000110D (4365)\n-\n-0F8D80 LOCAL HEADER #380     04034B50 (67324752)\n-0F8D84 Extract Zip Spec      14 (20) '2.0'\n-0F8D85 Extract OS            00 (0) 'MS-DOS'\n-0F8D86 General Purpose Flag  0000 (0)\n-0F8D88 Compression Method    0000 (0) 'Stored'\n-0F8D8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F8D8E CRC                   00000000 (0)\n-0F8D92 Compressed Size       00000000 (0)\n-0F8D96 Uncompressed Size     00000000 (0)\n-0F8D9A Filename Length       0063 (99)\n-0F8D9C Extra Length          0009 (9)\n-0F8D9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF8D9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F8E01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F8E03   Length              0005 (5)\n-0F8E05   Flags               01 (1) 'Modification'\n-0F8E06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F8E0A LOCAL HEADER #381     04034B50 (67324752)\n-0F8E0E Extract Zip Spec      14 (20) '2.0'\n-0F8E0F Extract OS            00 (0) 'MS-DOS'\n-0F8E10 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F8E12 Compression Method    0000 (0) 'Stored'\n-0F8E14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F8E18 CRC                   00000000 (0)\n-0F8E1C Compressed Size       00000000 (0)\n-0F8E20 Uncompressed Size     00000000 (0)\n-0F8E24 Filename Length       0079 (121)\n-0F8E26 Extra Length          0009 (9)\n-0F8E28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF8E28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F8EA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F8EA3   Length              0005 (5)\n-0F8EA5   Flags               01 (1) 'Modification'\n-0F8EA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F8EAA PAYLOAD\n-\n-0FA880 DATA DESCRIPTOR       08074B50 (134695760)\n-0FA884 CRC                   B1E82858 (2984781912)\n-0FA888 Compressed Size       000019D6 (6614)\n-0FA88C Uncompressed Size     000019D6 (6614)\n-\n-0FA890 LOCAL HEADER #382     04034B50 (67324752)\n-0FA894 Extract Zip Spec      14 (20) '2.0'\n-0FA895 Extract OS            00 (0) 'MS-DOS'\n-0FA896 General Purpose Flag  0000 (0)\n-0FA898 Compression Method    0000 (0) 'Stored'\n-0FA89A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FA89E CRC                   00000000 (0)\n-0FA8A2 Compressed Size       00000000 (0)\n-0FA8A6 Uncompressed Size     00000000 (0)\n-0FA8AA Filename Length       0060 (96)\n-0FA8AC Extra Length          0009 (9)\n-0FA8AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFA8AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FA90E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FA910   Length              0005 (5)\n-0FA912   Flags               01 (1) 'Modification'\n-0FA913   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FA917 LOCAL HEADER #383     04034B50 (67324752)\n-0FA91B Extract Zip Spec      14 (20) '2.0'\n-0FA91C Extract OS            00 (0) 'MS-DOS'\n-0FA91D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FA91F Compression Method    0000 (0) 'Stored'\n-0FA921 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FA925 CRC                   00000000 (0)\n-0FA929 Compressed Size       00000000 (0)\n-0FA92D Uncompressed Size     00000000 (0)\n-0FA931 Filename Length       0076 (118)\n-0FA933 Extra Length          0009 (9)\n-0FA935 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFA935: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FA9AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FA9AD   Length              0005 (5)\n-0FA9AF   Flags               01 (1) 'Modification'\n-0FA9B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FA9B4 PAYLOAD\n-\n-0FB932 DATA DESCRIPTOR       08074B50 (134695760)\n-0FB936 CRC                   EA13965E (3927152222)\n-0FB93A Compressed Size       00000F7E (3966)\n-0FB93E Uncompressed Size     00000F7E (3966)\n-\n-0FB942 LOCAL HEADER #384     04034B50 (67324752)\n-0FB946 Extract Zip Spec      14 (20) '2.0'\n-0FB947 Extract OS            00 (0) 'MS-DOS'\n-0FB948 General Purpose Flag  0000 (0)\n-0FB94A Compression Method    0000 (0) 'Stored'\n-0FB94C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FB950 CRC                   00000000 (0)\n-0FB954 Compressed Size       00000000 (0)\n-0FB958 Uncompressed Size     00000000 (0)\n-0FB95C Filename Length       0059 (89)\n-0FB95E Extra Length          0009 (9)\n-0FB960 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFB960: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FB9B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FB9BB   Length              0005 (5)\n-0FB9BD   Flags               01 (1) 'Modification'\n-0FB9BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FB9C2 LOCAL HEADER #385     04034B50 (67324752)\n-0FB9C6 Extract Zip Spec      14 (20) '2.0'\n-0FB9C7 Extract OS            00 (0) 'MS-DOS'\n-0FB9C8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FB9CA Compression Method    0000 (0) 'Stored'\n-0FB9CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FB9D0 CRC                   00000000 (0)\n-0FB9D4 Compressed Size       00000000 (0)\n-0FB9D8 Uncompressed Size     00000000 (0)\n-0FB9DC Filename Length       006F (111)\n-0FB9DE Extra Length          0009 (9)\n-0FB9E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFB9E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FBA4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FBA51   Length              0005 (5)\n-0FBA53   Flags               01 (1) 'Modification'\n-0FBA54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FBA58 PAYLOAD\n-\n-0FE72E DATA DESCRIPTOR       08074B50 (134695760)\n-0FE732 CRC                   C8903588 (3364894088)\n-0FE736 Compressed Size       00002CD6 (11478)\n-0FE73A Uncompressed Size     00002CD6 (11478)\n-\n-0FE73E LOCAL HEADER #386     04034B50 (67324752)\n-0FE742 Extract Zip Spec      14 (20) '2.0'\n-0FE743 Extract OS            00 (0) 'MS-DOS'\n-0FE744 General Purpose Flag  0000 (0)\n-0FE746 Compression Method    0000 (0) 'Stored'\n-0FE748 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE74C CRC                   00000000 (0)\n-0FE750 Compressed Size       00000000 (0)\n-0FE754 Uncompressed Size     00000000 (0)\n-0FE758 Filename Length       006A (106)\n-0FE75A Extra Length          0009 (9)\n-0FE75C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE75C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE7C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE7C8   Length              0005 (5)\n-0FE7CA   Flags               01 (1) 'Modification'\n-0FE7CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FE7CF LOCAL HEADER #387     04034B50 (67324752)\n-0FE7D3 Extract Zip Spec      14 (20) '2.0'\n-0FE7D4 Extract OS            00 (0) 'MS-DOS'\n-0FE7D5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FE7D7 Compression Method    0000 (0) 'Stored'\n-0FE7D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE7DD CRC                   00000000 (0)\n-0FE7E1 Compressed Size       00000000 (0)\n-0FE7E5 Uncompressed Size     00000000 (0)\n-0FE7E9 Filename Length       0080 (128)\n-0FE7EB Extra Length          0009 (9)\n-0FE7ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE7ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE86D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE86F   Length              0005 (5)\n-0FE871   Flags               01 (1) 'Modification'\n-0FE872   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FE876 PAYLOAD\n-\n-0FF2A5 DATA DESCRIPTOR       08074B50 (134695760)\n-0FF2A9 CRC                   D19560D0 (3516227792)\n-0FF2AD Compressed Size       00000A2F (2607)\n-0FF2B1 Uncompressed Size     00000A2F (2607)\n-\n-0FF2B5 LOCAL HEADER #388     04034B50 (67324752)\n-0FF2B9 Extract Zip Spec      14 (20) '2.0'\n-0FF2BA Extract OS            00 (0) 'MS-DOS'\n-0FF2BB General Purpose Flag  0000 (0)\n-0FF2BD Compression Method    0000 (0) 'Stored'\n-0FF2BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FF2C3 CRC                   00000000 (0)\n-0FF2C7 Compressed Size       00000000 (0)\n-0FF2CB Uncompressed Size     00000000 (0)\n-0FF2CF Filename Length       002F (47)\n-0FF2D1 Extra Length          0009 (9)\n-0FF2D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFF2D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FF302 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FF304   Length              0005 (5)\n-0FF306   Flags               01 (1) 'Modification'\n-0FF307   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FF30B LOCAL HEADER #389     04034B50 (67324752)\n-0FF30F Extract Zip Spec      14 (20) '2.0'\n-0FF310 Extract OS            00 (0) 'MS-DOS'\n-0FF311 General Purpose Flag  0000 (0)\n-0FF313 Compression Method    0000 (0) 'Stored'\n-0FF315 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FF319 CRC                   00000000 (0)\n-0FF31D Compressed Size       00000000 (0)\n-0FF321 Uncompressed Size     00000000 (0)\n-0FF325 Filename Length       0038 (56)\n-0FF327 Extra Length          0009 (9)\n-0FF329 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFF329: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FF361 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FF363   Length              0005 (5)\n-0FF365   Flags               01 (1) 'Modification'\n-0FF366   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FF36A LOCAL HEADER #390     04034B50 (67324752)\n-0FF36E Extract Zip Spec      14 (20) '2.0'\n-0FF36F Extract OS            00 (0) 'MS-DOS'\n-0FF370 General Purpose Flag  0000 (0)\n-0FF372 Compression Method    0000 (0) 'Stored'\n-0FF374 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FF378 CRC                   00000000 (0)\n-0FF37C Compressed Size       00000000 (0)\n-0FF380 Uncompressed Size     00000000 (0)\n-0FF384 Filename Length       006E (110)\n-0FF386 Extra Length          0009 (9)\n-0FF388 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFF388: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FF3F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FF3F8   Length              0005 (5)\n-0FF3FA   Flags               01 (1) 'Modification'\n-0FF3FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FF3FF LOCAL HEADER #391     04034B50 (67324752)\n-0FF403 Extract Zip Spec      14 (20) '2.0'\n-0FF404 Extract OS            00 (0) 'MS-DOS'\n-0FF405 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FF407 Compression Method    0000 (0) 'Stored'\n-0FF409 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FF40D CRC                   00000000 (0)\n-0FF411 Compressed Size       00000000 (0)\n-0FF415 Uncompressed Size     00000000 (0)\n-0FF419 Filename Length       0084 (132)\n-0FF41B Extra Length          0009 (9)\n-0FF41D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B03D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B03D9   Length              0005 (5)\n+0B03DB   Flags               01 (1) 'Modification'\n+0B03DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B03E0 PAYLOAD\n+\n+0B1A8A DATA DESCRIPTOR       08074B50 (134695760)\n+0B1A8E CRC                   3DE98548 (1038714184)\n+0B1A92 Compressed Size       000016AA (5802)\n+0B1A96 Uncompressed Size     000016AA (5802)\n+\n+0B1A9A LOCAL HEADER #288     04034B50 (67324752)\n+0B1A9E Extract Zip Spec      14 (20) '2.0'\n+0B1A9F Extract OS            00 (0) 'MS-DOS'\n+0B1AA0 General Purpose Flag  0000 (0)\n+0B1AA2 Compression Method    0000 (0) 'Stored'\n+0B1AA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1AA8 CRC                   00000000 (0)\n+0B1AAC Compressed Size       00000000 (0)\n+0B1AB0 Uncompressed Size     00000000 (0)\n+0B1AB4 Filename Length       0024 (36)\n+0B1AB6 Extra Length          0009 (9)\n+0B1AB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1AB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1ADC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1ADE   Length              0005 (5)\n+0B1AE0   Flags               01 (1) 'Modification'\n+0B1AE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1AE5 LOCAL HEADER #289     04034B50 (67324752)\n+0B1AE9 Extract Zip Spec      14 (20) '2.0'\n+0B1AEA Extract OS            00 (0) 'MS-DOS'\n+0B1AEB General Purpose Flag  0000 (0)\n+0B1AED Compression Method    0000 (0) 'Stored'\n+0B1AEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1AF3 CRC                   00000000 (0)\n+0B1AF7 Compressed Size       00000000 (0)\n+0B1AFB Uncompressed Size     00000000 (0)\n+0B1AFF Filename Length       002D (45)\n+0B1B01 Extra Length          0009 (9)\n+0B1B03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1B03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1B30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1B32   Length              0005 (5)\n+0B1B34   Flags               01 (1) 'Modification'\n+0B1B35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1B39 LOCAL HEADER #290     04034B50 (67324752)\n+0B1B3D Extract Zip Spec      14 (20) '2.0'\n+0B1B3E Extract OS            00 (0) 'MS-DOS'\n+0B1B3F General Purpose Flag  0000 (0)\n+0B1B41 Compression Method    0000 (0) 'Stored'\n+0B1B43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1B47 CRC                   00000000 (0)\n+0B1B4B Compressed Size       00000000 (0)\n+0B1B4F Uncompressed Size     00000000 (0)\n+0B1B53 Filename Length       005B (91)\n+0B1B55 Extra Length          0009 (9)\n+0B1B57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1B57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1BB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1BB4   Length              0005 (5)\n+0B1BB6   Flags               01 (1) 'Modification'\n+0B1BB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1BBB LOCAL HEADER #291     04034B50 (67324752)\n+0B1BBF Extract Zip Spec      14 (20) '2.0'\n+0B1BC0 Extract OS            00 (0) 'MS-DOS'\n+0B1BC1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B1BC3 Compression Method    0000 (0) 'Stored'\n+0B1BC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1BC9 CRC                   00000000 (0)\n+0B1BCD Compressed Size       00000000 (0)\n+0B1BD1 Uncompressed Size     00000000 (0)\n+0B1BD5 Filename Length       0071 (113)\n+0B1BD7 Extra Length          0009 (9)\n+0B1BD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1BD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1C4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1C4C   Length              0005 (5)\n+0B1C4E   Flags               01 (1) 'Modification'\n+0B1C4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B1C53 PAYLOAD\n+\n+0B34FB DATA DESCRIPTOR       08074B50 (134695760)\n+0B34FF CRC                   561A3BB2 (1444559794)\n+0B3503 Compressed Size       000018A8 (6312)\n+0B3507 Uncompressed Size     000018A8 (6312)\n+\n+0B350B LOCAL HEADER #292     04034B50 (67324752)\n+0B350F Extract Zip Spec      14 (20) '2.0'\n+0B3510 Extract OS            00 (0) 'MS-DOS'\n+0B3511 General Purpose Flag  0000 (0)\n+0B3513 Compression Method    0000 (0) 'Stored'\n+0B3515 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B3519 CRC                   00000000 (0)\n+0B351D Compressed Size       00000000 (0)\n+0B3521 Uncompressed Size     00000000 (0)\n+0B3525 Filename Length       005A (90)\n+0B3527 Extra Length          0009 (9)\n+0B3529 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB3529: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B3583 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B3585   Length              0005 (5)\n+0B3587   Flags               01 (1) 'Modification'\n+0B3588   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B358C LOCAL HEADER #293     04034B50 (67324752)\n+0B3590 Extract Zip Spec      14 (20) '2.0'\n+0B3591 Extract OS            00 (0) 'MS-DOS'\n+0B3592 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B3594 Compression Method    0000 (0) 'Stored'\n+0B3596 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B359A CRC                   00000000 (0)\n+0B359E Compressed Size       00000000 (0)\n+0B35A2 Uncompressed Size     00000000 (0)\n+0B35A6 Filename Length       0070 (112)\n+0B35A8 Extra Length          0009 (9)\n+0B35AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB35AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B361A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B361C   Length              0005 (5)\n+0B361E   Flags               01 (1) 'Modification'\n+0B361F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B3623 PAYLOAD\n+\n+0B50E5 DATA DESCRIPTOR       08074B50 (134695760)\n+0B50E9 CRC                   A1D18B9C (2714864540)\n+0B50ED Compressed Size       00001AC2 (6850)\n+0B50F1 Uncompressed Size     00001AC2 (6850)\n+\n+0B50F5 LOCAL HEADER #294     04034B50 (67324752)\n+0B50F9 Extract Zip Spec      14 (20) '2.0'\n+0B50FA Extract OS            00 (0) 'MS-DOS'\n+0B50FB General Purpose Flag  0000 (0)\n+0B50FD Compression Method    0000 (0) 'Stored'\n+0B50FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5103 CRC                   00000000 (0)\n+0B5107 Compressed Size       00000000 (0)\n+0B510B Uncompressed Size     00000000 (0)\n+0B510F Filename Length       005B (91)\n+0B5111 Extra Length          0009 (9)\n+0B5113 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB5113: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B516E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B5170   Length              0005 (5)\n+0B5172   Flags               01 (1) 'Modification'\n+0B5173   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B5177 LOCAL HEADER #295     04034B50 (67324752)\n+0B517B Extract Zip Spec      14 (20) '2.0'\n+0B517C Extract OS            00 (0) 'MS-DOS'\n+0B517D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B517F Compression Method    0000 (0) 'Stored'\n+0B5181 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5185 CRC                   00000000 (0)\n+0B5189 Compressed Size       00000000 (0)\n+0B518D Uncompressed Size     00000000 (0)\n+0B5191 Filename Length       0071 (113)\n+0B5193 Extra Length          0009 (9)\n+0B5195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB5195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B5206 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B5208   Length              0005 (5)\n+0B520A   Flags               01 (1) 'Modification'\n+0B520B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B520F PAYLOAD\n+\n+0B65A8 DATA DESCRIPTOR       08074B50 (134695760)\n+0B65AC CRC                   33231FD5 (857939925)\n+0B65B0 Compressed Size       00001399 (5017)\n+0B65B4 Uncompressed Size     00001399 (5017)\n+\n+0B65B8 LOCAL HEADER #296     04034B50 (67324752)\n+0B65BC Extract Zip Spec      14 (20) '2.0'\n+0B65BD Extract OS            00 (0) 'MS-DOS'\n+0B65BE General Purpose Flag  0000 (0)\n+0B65C0 Compression Method    0000 (0) 'Stored'\n+0B65C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B65C6 CRC                   00000000 (0)\n+0B65CA Compressed Size       00000000 (0)\n+0B65CE Uncompressed Size     00000000 (0)\n+0B65D2 Filename Length       0023 (35)\n+0B65D4 Extra Length          0009 (9)\n+0B65D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB65D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B65F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B65FB   Length              0005 (5)\n+0B65FD   Flags               01 (1) 'Modification'\n+0B65FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B6602 LOCAL HEADER #297     04034B50 (67324752)\n+0B6606 Extract Zip Spec      14 (20) '2.0'\n+0B6607 Extract OS            00 (0) 'MS-DOS'\n+0B6608 General Purpose Flag  0000 (0)\n+0B660A Compression Method    0000 (0) 'Stored'\n+0B660C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6610 CRC                   00000000 (0)\n+0B6614 Compressed Size       00000000 (0)\n+0B6618 Uncompressed Size     00000000 (0)\n+0B661C Filename Length       002C (44)\n+0B661E Extra Length          0009 (9)\n+0B6620 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6620: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B664C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B664E   Length              0005 (5)\n+0B6650   Flags               01 (1) 'Modification'\n+0B6651   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B6655 LOCAL HEADER #298     04034B50 (67324752)\n+0B6659 Extract Zip Spec      14 (20) '2.0'\n+0B665A Extract OS            00 (0) 'MS-DOS'\n+0B665B General Purpose Flag  0000 (0)\n+0B665D Compression Method    0000 (0) 'Stored'\n+0B665F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6663 CRC                   00000000 (0)\n+0B6667 Compressed Size       00000000 (0)\n+0B666B Uncompressed Size     00000000 (0)\n+0B666F Filename Length       0054 (84)\n+0B6671 Extra Length          0009 (9)\n+0B6673 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6673: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B66C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B66C9   Length              0005 (5)\n+0B66CB   Flags               01 (1) 'Modification'\n+0B66CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B66D0 LOCAL HEADER #299     04034B50 (67324752)\n+0B66D4 Extract Zip Spec      14 (20) '2.0'\n+0B66D5 Extract OS            00 (0) 'MS-DOS'\n+0B66D6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B66D8 Compression Method    0000 (0) 'Stored'\n+0B66DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B66DE CRC                   00000000 (0)\n+0B66E2 Compressed Size       00000000 (0)\n+0B66E6 Uncompressed Size     00000000 (0)\n+0B66EA Filename Length       006A (106)\n+0B66EC Extra Length          0009 (9)\n+0B66EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB66EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6758 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B675A   Length              0005 (5)\n+0B675C   Flags               01 (1) 'Modification'\n+0B675D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B6761 PAYLOAD\n+\n+0B7459 DATA DESCRIPTOR       08074B50 (134695760)\n+0B745D CRC                   63C353AF (1673745327)\n+0B7461 Compressed Size       00000CF8 (3320)\n+0B7465 Uncompressed Size     00000CF8 (3320)\n+\n+0B7469 LOCAL HEADER #300     04034B50 (67324752)\n+0B746D Extract Zip Spec      14 (20) '2.0'\n+0B746E Extract OS            00 (0) 'MS-DOS'\n+0B746F General Purpose Flag  0000 (0)\n+0B7471 Compression Method    0000 (0) 'Stored'\n+0B7473 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7477 CRC                   00000000 (0)\n+0B747B Compressed Size       00000000 (0)\n+0B747F Uncompressed Size     00000000 (0)\n+0B7483 Filename Length       005B (91)\n+0B7485 Extra Length          0009 (9)\n+0B7487 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7487: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B74E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B74E4   Length              0005 (5)\n+0B74E6   Flags               01 (1) 'Modification'\n+0B74E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B74EB LOCAL HEADER #301     04034B50 (67324752)\n+0B74EF Extract Zip Spec      14 (20) '2.0'\n+0B74F0 Extract OS            00 (0) 'MS-DOS'\n+0B74F1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B74F3 Compression Method    0000 (0) 'Stored'\n+0B74F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B74F9 CRC                   00000000 (0)\n+0B74FD Compressed Size       00000000 (0)\n+0B7501 Uncompressed Size     00000000 (0)\n+0B7505 Filename Length       0071 (113)\n+0B7507 Extra Length          0009 (9)\n+0B7509 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7509: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B757A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B757C   Length              0005 (5)\n+0B757E   Flags               01 (1) 'Modification'\n+0B757F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B7583 PAYLOAD\n+\n+0B7CA6 DATA DESCRIPTOR       08074B50 (134695760)\n+0B7CAA CRC                   C64481A5 (3326378405)\n+0B7CAE Compressed Size       00000723 (1827)\n+0B7CB2 Uncompressed Size     00000723 (1827)\n+\n+0B7CB6 LOCAL HEADER #302     04034B50 (67324752)\n+0B7CBA Extract Zip Spec      14 (20) '2.0'\n+0B7CBB Extract OS            00 (0) 'MS-DOS'\n+0B7CBC General Purpose Flag  0000 (0)\n+0B7CBE Compression Method    0000 (0) 'Stored'\n+0B7CC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7CC4 CRC                   00000000 (0)\n+0B7CC8 Compressed Size       00000000 (0)\n+0B7CCC Uncompressed Size     00000000 (0)\n+0B7CD0 Filename Length       0059 (89)\n+0B7CD2 Extra Length          0009 (9)\n+0B7CD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7CD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B7D2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B7D2F   Length              0005 (5)\n+0B7D31   Flags               01 (1) 'Modification'\n+0B7D32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B7D36 LOCAL HEADER #303     04034B50 (67324752)\n+0B7D3A Extract Zip Spec      14 (20) '2.0'\n+0B7D3B Extract OS            00 (0) 'MS-DOS'\n+0B7D3C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B7D3E Compression Method    0000 (0) 'Stored'\n+0B7D40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7D44 CRC                   00000000 (0)\n+0B7D48 Compressed Size       00000000 (0)\n+0B7D4C Uncompressed Size     00000000 (0)\n+0B7D50 Filename Length       006F (111)\n+0B7D52 Extra Length          0009 (9)\n+0B7D54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7D54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B7DC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B7DC5   Length              0005 (5)\n+0B7DC7   Flags               01 (1) 'Modification'\n+0B7DC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B7DCC PAYLOAD\n+\n+0B84AE DATA DESCRIPTOR       08074B50 (134695760)\n+0B84B2 CRC                   39649106 (962892038)\n+0B84B6 Compressed Size       000006E2 (1762)\n+0B84BA Uncompressed Size     000006E2 (1762)\n+\n+0B84BE LOCAL HEADER #304     04034B50 (67324752)\n+0B84C2 Extract Zip Spec      14 (20) '2.0'\n+0B84C3 Extract OS            00 (0) 'MS-DOS'\n+0B84C4 General Purpose Flag  0000 (0)\n+0B84C6 Compression Method    0000 (0) 'Stored'\n+0B84C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B84CC CRC                   00000000 (0)\n+0B84D0 Compressed Size       00000000 (0)\n+0B84D4 Uncompressed Size     00000000 (0)\n+0B84D8 Filename Length       0054 (84)\n+0B84DA Extra Length          0009 (9)\n+0B84DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB84DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B8530 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8532   Length              0005 (5)\n+0B8534   Flags               01 (1) 'Modification'\n+0B8535   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B8539 LOCAL HEADER #305     04034B50 (67324752)\n+0B853D Extract Zip Spec      14 (20) '2.0'\n+0B853E Extract OS            00 (0) 'MS-DOS'\n+0B853F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B8541 Compression Method    0000 (0) 'Stored'\n+0B8543 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8547 CRC                   00000000 (0)\n+0B854B Compressed Size       00000000 (0)\n+0B854F Uncompressed Size     00000000 (0)\n+0B8553 Filename Length       006A (106)\n+0B8555 Extra Length          0009 (9)\n+0B8557 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8557: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B85C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B85C3   Length              0005 (5)\n+0B85C5   Flags               01 (1) 'Modification'\n+0B85C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B85CA PAYLOAD\n+\n+0B8D4C DATA DESCRIPTOR       08074B50 (134695760)\n+0B8D50 CRC                   8DC8B44C (2378740812)\n+0B8D54 Compressed Size       00000782 (1922)\n+0B8D58 Uncompressed Size     00000782 (1922)\n+\n+0B8D5C LOCAL HEADER #306     04034B50 (67324752)\n+0B8D60 Extract Zip Spec      14 (20) '2.0'\n+0B8D61 Extract OS            00 (0) 'MS-DOS'\n+0B8D62 General Purpose Flag  0000 (0)\n+0B8D64 Compression Method    0000 (0) 'Stored'\n+0B8D66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8D6A CRC                   00000000 (0)\n+0B8D6E Compressed Size       00000000 (0)\n+0B8D72 Uncompressed Size     00000000 (0)\n+0B8D76 Filename Length       0025 (37)\n+0B8D78 Extra Length          0009 (9)\n+0B8D7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8D7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B8D9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8DA1   Length              0005 (5)\n+0B8DA3   Flags               01 (1) 'Modification'\n+0B8DA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B8DA8 LOCAL HEADER #307     04034B50 (67324752)\n+0B8DAC Extract Zip Spec      14 (20) '2.0'\n+0B8DAD Extract OS            00 (0) 'MS-DOS'\n+0B8DAE General Purpose Flag  0000 (0)\n+0B8DB0 Compression Method    0000 (0) 'Stored'\n+0B8DB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8DB6 CRC                   00000000 (0)\n+0B8DBA Compressed Size       00000000 (0)\n+0B8DBE Uncompressed Size     00000000 (0)\n+0B8DC2 Filename Length       002E (46)\n+0B8DC4 Extra Length          0009 (9)\n+0B8DC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8DC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B8DF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8DF6   Length              0005 (5)\n+0B8DF8   Flags               01 (1) 'Modification'\n+0B8DF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B8DFD LOCAL HEADER #308     04034B50 (67324752)\n+0B8E01 Extract Zip Spec      14 (20) '2.0'\n+0B8E02 Extract OS            00 (0) 'MS-DOS'\n+0B8E03 General Purpose Flag  0000 (0)\n+0B8E05 Compression Method    0000 (0) 'Stored'\n+0B8E07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8E0B CRC                   00000000 (0)\n+0B8E0F Compressed Size       00000000 (0)\n+0B8E13 Uncompressed Size     00000000 (0)\n+0B8E17 Filename Length       005E (94)\n+0B8E19 Extra Length          0009 (9)\n+0B8E1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8E1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B8E79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8E7B   Length              0005 (5)\n+0B8E7D   Flags               01 (1) 'Modification'\n+0B8E7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B8E82 LOCAL HEADER #309     04034B50 (67324752)\n+0B8E86 Extract Zip Spec      14 (20) '2.0'\n+0B8E87 Extract OS            00 (0) 'MS-DOS'\n+0B8E88 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B8E8A Compression Method    0000 (0) 'Stored'\n+0B8E8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8E90 CRC                   00000000 (0)\n+0B8E94 Compressed Size       00000000 (0)\n+0B8E98 Uncompressed Size     00000000 (0)\n+0B8E9C Filename Length       0074 (116)\n+0B8E9E Extra Length          0009 (9)\n+0B8EA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8EA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B8F14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8F16   Length              0005 (5)\n+0B8F18   Flags               01 (1) 'Modification'\n+0B8F19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B8F1D PAYLOAD\n+\n+0B9DB7 DATA DESCRIPTOR       08074B50 (134695760)\n+0B9DBB CRC                   335CA1CD (861708749)\n+0B9DBF Compressed Size       00000E9A (3738)\n+0B9DC3 Uncompressed Size     00000E9A (3738)\n+\n+0B9DC7 LOCAL HEADER #310     04034B50 (67324752)\n+0B9DCB Extract Zip Spec      14 (20) '2.0'\n+0B9DCC Extract OS            00 (0) 'MS-DOS'\n+0B9DCD General Purpose Flag  0000 (0)\n+0B9DCF Compression Method    0000 (0) 'Stored'\n+0B9DD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B9DD5 CRC                   00000000 (0)\n+0B9DD9 Compressed Size       00000000 (0)\n+0B9DDD Uncompressed Size     00000000 (0)\n+0B9DE1 Filename Length       006A (106)\n+0B9DE3 Extra Length          0009 (9)\n+0B9DE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB9DE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B9E4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B9E51   Length              0005 (5)\n+0B9E53   Flags               01 (1) 'Modification'\n+0B9E54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B9E58 LOCAL HEADER #311     04034B50 (67324752)\n+0B9E5C Extract Zip Spec      14 (20) '2.0'\n+0B9E5D Extract OS            00 (0) 'MS-DOS'\n+0B9E5E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B9E60 Compression Method    0000 (0) 'Stored'\n+0B9E62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B9E66 CRC                   00000000 (0)\n+0B9E6A Compressed Size       00000000 (0)\n+0B9E6E Uncompressed Size     00000000 (0)\n+0B9E72 Filename Length       0080 (128)\n+0B9E74 Extra Length          0009 (9)\n+0B9E76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB9E76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B9EF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B9EF8   Length              0005 (5)\n+0B9EFA   Flags               01 (1) 'Modification'\n+0B9EFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B9EFF PAYLOAD\n+\n+0BAF58 DATA DESCRIPTOR       08074B50 (134695760)\n+0BAF5C CRC                   3EE7FDDD (1055391197)\n+0BAF60 Compressed Size       00001059 (4185)\n+0BAF64 Uncompressed Size     00001059 (4185)\n+\n+0BAF68 LOCAL HEADER #312     04034B50 (67324752)\n+0BAF6C Extract Zip Spec      14 (20) '2.0'\n+0BAF6D Extract OS            00 (0) 'MS-DOS'\n+0BAF6E General Purpose Flag  0000 (0)\n+0BAF70 Compression Method    0000 (0) 'Stored'\n+0BAF72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BAF76 CRC                   00000000 (0)\n+0BAF7A Compressed Size       00000000 (0)\n+0BAF7E Uncompressed Size     00000000 (0)\n+0BAF82 Filename Length       0027 (39)\n+0BAF84 Extra Length          0009 (9)\n+0BAF86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBAF86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BAFAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BAFAF   Length              0005 (5)\n+0BAFB1   Flags               01 (1) 'Modification'\n+0BAFB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BAFB6 LOCAL HEADER #313     04034B50 (67324752)\n+0BAFBA Extract Zip Spec      14 (20) '2.0'\n+0BAFBB Extract OS            00 (0) 'MS-DOS'\n+0BAFBC General Purpose Flag  0000 (0)\n+0BAFBE Compression Method    0000 (0) 'Stored'\n+0BAFC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BAFC4 CRC                   00000000 (0)\n+0BAFC8 Compressed Size       00000000 (0)\n+0BAFCC Uncompressed Size     00000000 (0)\n+0BAFD0 Filename Length       0030 (48)\n+0BAFD2 Extra Length          0009 (9)\n+0BAFD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBAFD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BB004 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BB006   Length              0005 (5)\n+0BB008   Flags               01 (1) 'Modification'\n+0BB009   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BB00D LOCAL HEADER #314     04034B50 (67324752)\n+0BB011 Extract Zip Spec      14 (20) '2.0'\n+0BB012 Extract OS            00 (0) 'MS-DOS'\n+0BB013 General Purpose Flag  0000 (0)\n+0BB015 Compression Method    0000 (0) 'Stored'\n+0BB017 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BB01B CRC                   00000000 (0)\n+0BB01F Compressed Size       00000000 (0)\n+0BB023 Uncompressed Size     00000000 (0)\n+0BB027 Filename Length       0069 (105)\n+0BB029 Extra Length          0009 (9)\n+0BB02B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBB02B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BB094 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BB096   Length              0005 (5)\n+0BB098   Flags               01 (1) 'Modification'\n+0BB099   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BB09D LOCAL HEADER #315     04034B50 (67324752)\n+0BB0A1 Extract Zip Spec      14 (20) '2.0'\n+0BB0A2 Extract OS            00 (0) 'MS-DOS'\n+0BB0A3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BB0A5 Compression Method    0000 (0) 'Stored'\n+0BB0A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BB0AB CRC                   00000000 (0)\n+0BB0AF Compressed Size       00000000 (0)\n+0BB0B3 Uncompressed Size     00000000 (0)\n+0BB0B7 Filename Length       007F (127)\n+0BB0B9 Extra Length          0009 (9)\n+0BB0BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBB0BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BB13A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BB13C   Length              0005 (5)\n+0BB13E   Flags               01 (1) 'Modification'\n+0BB13F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BB143 PAYLOAD\n+\n+0BBD9E DATA DESCRIPTOR       08074B50 (134695760)\n+0BBDA2 CRC                   67FA3A91 (1744452241)\n+0BBDA6 Compressed Size       00000C5B (3163)\n+0BBDAA Uncompressed Size     00000C5B (3163)\n+\n+0BBDAE LOCAL HEADER #316     04034B50 (67324752)\n+0BBDB2 Extract Zip Spec      14 (20) '2.0'\n+0BBDB3 Extract OS            00 (0) 'MS-DOS'\n+0BBDB4 General Purpose Flag  0000 (0)\n+0BBDB6 Compression Method    0000 (0) 'Stored'\n+0BBDB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BBDBC CRC                   00000000 (0)\n+0BBDC0 Compressed Size       00000000 (0)\n+0BBDC4 Uncompressed Size     00000000 (0)\n+0BBDC8 Filename Length       0064 (100)\n+0BBDCA Extra Length          0009 (9)\n+0BBDCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBBDCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BBE30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BBE32   Length              0005 (5)\n+0BBE34   Flags               01 (1) 'Modification'\n+0BBE35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BBE39 LOCAL HEADER #317     04034B50 (67324752)\n+0BBE3D Extract Zip Spec      14 (20) '2.0'\n+0BBE3E Extract OS            00 (0) 'MS-DOS'\n+0BBE3F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BBE41 Compression Method    0000 (0) 'Stored'\n+0BBE43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BBE47 CRC                   00000000 (0)\n+0BBE4B Compressed Size       00000000 (0)\n+0BBE4F Uncompressed Size     00000000 (0)\n+0BBE53 Filename Length       007A (122)\n+0BBE55 Extra Length          0009 (9)\n+0BBE57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBBE57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BBED1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BBED3   Length              0005 (5)\n+0BBED5   Flags               01 (1) 'Modification'\n+0BBED6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BBEDA PAYLOAD\n+\n+0BD97E DATA DESCRIPTOR       08074B50 (134695760)\n+0BD982 CRC                   984F1B9C (2555321244)\n+0BD986 Compressed Size       00001AA4 (6820)\n+0BD98A Uncompressed Size     00001AA4 (6820)\n+\n+0BD98E LOCAL HEADER #318     04034B50 (67324752)\n+0BD992 Extract Zip Spec      14 (20) '2.0'\n+0BD993 Extract OS            00 (0) 'MS-DOS'\n+0BD994 General Purpose Flag  0000 (0)\n+0BD996 Compression Method    0000 (0) 'Stored'\n+0BD998 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BD99C CRC                   00000000 (0)\n+0BD9A0 Compressed Size       00000000 (0)\n+0BD9A4 Uncompressed Size     00000000 (0)\n+0BD9A8 Filename Length       006C (108)\n+0BD9AA Extra Length          0009 (9)\n+0BD9AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBD9AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BDA18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BDA1A   Length              0005 (5)\n+0BDA1C   Flags               01 (1) 'Modification'\n+0BDA1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BDA21 LOCAL HEADER #319     04034B50 (67324752)\n+0BDA25 Extract Zip Spec      14 (20) '2.0'\n+0BDA26 Extract OS            00 (0) 'MS-DOS'\n+0BDA27 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BDA29 Compression Method    0000 (0) 'Stored'\n+0BDA2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BDA2F CRC                   00000000 (0)\n+0BDA33 Compressed Size       00000000 (0)\n+0BDA37 Uncompressed Size     00000000 (0)\n+0BDA3B Filename Length       0082 (130)\n+0BDA3D Extra Length          0009 (9)\n+0BDA3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBDA3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BDAC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BDAC3   Length              0005 (5)\n+0BDAC5   Flags               01 (1) 'Modification'\n+0BDAC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BDACA PAYLOAD\n+\n+0BE88C DATA DESCRIPTOR       08074B50 (134695760)\n+0BE890 CRC                   0FF19131 (267489585)\n+0BE894 Compressed Size       00000DC2 (3522)\n+0BE898 Uncompressed Size     00000DC2 (3522)\n+\n+0BE89C LOCAL HEADER #320     04034B50 (67324752)\n+0BE8A0 Extract Zip Spec      14 (20) '2.0'\n+0BE8A1 Extract OS            00 (0) 'MS-DOS'\n+0BE8A2 General Purpose Flag  0000 (0)\n+0BE8A4 Compression Method    0000 (0) 'Stored'\n+0BE8A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BE8AA CRC                   00000000 (0)\n+0BE8AE Compressed Size       00000000 (0)\n+0BE8B2 Uncompressed Size     00000000 (0)\n+0BE8B6 Filename Length       0069 (105)\n+0BE8B8 Extra Length          0009 (9)\n+0BE8BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBE8BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE923 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE925   Length              0005 (5)\n+0BE927   Flags               01 (1) 'Modification'\n+0BE928   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BE92C LOCAL HEADER #321     04034B50 (67324752)\n+0BE930 Extract Zip Spec      14 (20) '2.0'\n+0BE931 Extract OS            00 (0) 'MS-DOS'\n+0BE932 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BE934 Compression Method    0000 (0) 'Stored'\n+0BE936 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BE93A CRC                   00000000 (0)\n+0BE93E Compressed Size       00000000 (0)\n+0BE942 Uncompressed Size     00000000 (0)\n+0BE946 Filename Length       007F (127)\n+0BE948 Extra Length          0009 (9)\n+0BE94A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBE94A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE9C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE9CB   Length              0005 (5)\n+0BE9CD   Flags               01 (1) 'Modification'\n+0BE9CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BE9D2 PAYLOAD\n+\n+0BF192 DATA DESCRIPTOR       08074B50 (134695760)\n+0BF196 CRC                   63513D5C (1666268508)\n+0BF19A Compressed Size       000007C0 (1984)\n+0BF19E Uncompressed Size     000007C0 (1984)\n+\n+0BF1A2 LOCAL HEADER #322     04034B50 (67324752)\n+0BF1A6 Extract Zip Spec      14 (20) '2.0'\n+0BF1A7 Extract OS            00 (0) 'MS-DOS'\n+0BF1A8 General Purpose Flag  0000 (0)\n+0BF1AA Compression Method    0000 (0) 'Stored'\n+0BF1AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BF1B0 CRC                   00000000 (0)\n+0BF1B4 Compressed Size       00000000 (0)\n+0BF1B8 Uncompressed Size     00000000 (0)\n+0BF1BC Filename Length       0060 (96)\n+0BF1BE Extra Length          0009 (9)\n+0BF1C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBF1C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BF220 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BF222   Length              0005 (5)\n+0BF224   Flags               01 (1) 'Modification'\n+0BF225   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BF229 LOCAL HEADER #323     04034B50 (67324752)\n+0BF22D Extract Zip Spec      14 (20) '2.0'\n+0BF22E Extract OS            00 (0) 'MS-DOS'\n+0BF22F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BF231 Compression Method    0000 (0) 'Stored'\n+0BF233 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BF237 CRC                   00000000 (0)\n+0BF23B Compressed Size       00000000 (0)\n+0BF23F Uncompressed Size     00000000 (0)\n+0BF243 Filename Length       0076 (118)\n+0BF245 Extra Length          0009 (9)\n+0BF247 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBF247: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BF2BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BF2BF   Length              0005 (5)\n+0BF2C1   Flags               01 (1) 'Modification'\n+0BF2C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BF2C6 PAYLOAD\n+\n+0C01A0 DATA DESCRIPTOR       08074B50 (134695760)\n+0C01A4 CRC                   99929518 (2576520472)\n+0C01A8 Compressed Size       00000EDA (3802)\n+0C01AC Uncompressed Size     00000EDA (3802)\n+\n+0C01B0 LOCAL HEADER #324     04034B50 (67324752)\n+0C01B4 Extract Zip Spec      14 (20) '2.0'\n+0C01B5 Extract OS            00 (0) 'MS-DOS'\n+0C01B6 General Purpose Flag  0000 (0)\n+0C01B8 Compression Method    0000 (0) 'Stored'\n+0C01BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C01BE CRC                   00000000 (0)\n+0C01C2 Compressed Size       00000000 (0)\n+0C01C6 Uncompressed Size     00000000 (0)\n+0C01CA Filename Length       005E (94)\n+0C01CC Extra Length          0009 (9)\n+0C01CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC01CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C022C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C022E   Length              0005 (5)\n+0C0230   Flags               01 (1) 'Modification'\n+0C0231   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C0235 LOCAL HEADER #325     04034B50 (67324752)\n+0C0239 Extract Zip Spec      14 (20) '2.0'\n+0C023A Extract OS            00 (0) 'MS-DOS'\n+0C023B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C023D Compression Method    0000 (0) 'Stored'\n+0C023F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0243 CRC                   00000000 (0)\n+0C0247 Compressed Size       00000000 (0)\n+0C024B Uncompressed Size     00000000 (0)\n+0C024F Filename Length       0074 (116)\n+0C0251 Extra Length          0009 (9)\n+0C0253 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0253: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C02C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C02C9   Length              0005 (5)\n+0C02CB   Flags               01 (1) 'Modification'\n+0C02CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C02D0 PAYLOAD\n+\n+0C0BC8 DATA DESCRIPTOR       08074B50 (134695760)\n+0C0BCC CRC                   E6BF62E0 (3871302368)\n+0C0BD0 Compressed Size       000008F8 (2296)\n+0C0BD4 Uncompressed Size     000008F8 (2296)\n+\n+0C0BD8 LOCAL HEADER #326     04034B50 (67324752)\n+0C0BDC Extract Zip Spec      14 (20) '2.0'\n+0C0BDD Extract OS            00 (0) 'MS-DOS'\n+0C0BDE General Purpose Flag  0000 (0)\n+0C0BE0 Compression Method    0000 (0) 'Stored'\n+0C0BE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0BE6 CRC                   00000000 (0)\n+0C0BEA Compressed Size       00000000 (0)\n+0C0BEE Uncompressed Size     00000000 (0)\n+0C0BF2 Filename Length       0065 (101)\n+0C0BF4 Extra Length          0009 (9)\n+0C0BF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0BF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C0C5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C0C5D   Length              0005 (5)\n+0C0C5F   Flags               01 (1) 'Modification'\n+0C0C60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C0C64 LOCAL HEADER #327     04034B50 (67324752)\n+0C0C68 Extract Zip Spec      14 (20) '2.0'\n+0C0C69 Extract OS            00 (0) 'MS-DOS'\n+0C0C6A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C0C6C Compression Method    0000 (0) 'Stored'\n+0C0C6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0C72 CRC                   00000000 (0)\n+0C0C76 Compressed Size       00000000 (0)\n+0C0C7A Uncompressed Size     00000000 (0)\n+0C0C7E Filename Length       007B (123)\n+0C0C80 Extra Length          0009 (9)\n+0C0C82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0C82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C0CFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C0CFF   Length              0005 (5)\n+0C0D01   Flags               01 (1) 'Modification'\n+0C0D02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C0D06 PAYLOAD\n+\n+0C1537 DATA DESCRIPTOR       08074B50 (134695760)\n+0C153B CRC                   F05E2331 (4032701233)\n+0C153F Compressed Size       00000831 (2097)\n+0C1543 Uncompressed Size     00000831 (2097)\n+\n+0C1547 LOCAL HEADER #328     04034B50 (67324752)\n+0C154B Extract Zip Spec      14 (20) '2.0'\n+0C154C Extract OS            00 (0) 'MS-DOS'\n+0C154D General Purpose Flag  0000 (0)\n+0C154F Compression Method    0000 (0) 'Stored'\n+0C1551 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C1555 CRC                   00000000 (0)\n+0C1559 Compressed Size       00000000 (0)\n+0C155D Uncompressed Size     00000000 (0)\n+0C1561 Filename Length       0063 (99)\n+0C1563 Extra Length          0009 (9)\n+0C1565 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC1565: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C15C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C15CA   Length              0005 (5)\n+0C15CC   Flags               01 (1) 'Modification'\n+0C15CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C15D1 LOCAL HEADER #329     04034B50 (67324752)\n+0C15D5 Extract Zip Spec      14 (20) '2.0'\n+0C15D6 Extract OS            00 (0) 'MS-DOS'\n+0C15D7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C15D9 Compression Method    0000 (0) 'Stored'\n+0C15DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C15DF CRC                   00000000 (0)\n+0C15E3 Compressed Size       00000000 (0)\n+0C15E7 Uncompressed Size     00000000 (0)\n+0C15EB Filename Length       0079 (121)\n+0C15ED Extra Length          0009 (9)\n+0C15EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC15EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C1668 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C166A   Length              0005 (5)\n+0C166C   Flags               01 (1) 'Modification'\n+0C166D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C1671 PAYLOAD\n+\n+0C2C41 DATA DESCRIPTOR       08074B50 (134695760)\n+0C2C45 CRC                   80ED3BA4 (2163030948)\n+0C2C49 Compressed Size       000015D0 (5584)\n+0C2C4D Uncompressed Size     000015D0 (5584)\n+\n+0C2C51 LOCAL HEADER #330     04034B50 (67324752)\n+0C2C55 Extract Zip Spec      14 (20) '2.0'\n+0C2C56 Extract OS            00 (0) 'MS-DOS'\n+0C2C57 General Purpose Flag  0000 (0)\n+0C2C59 Compression Method    0000 (0) 'Stored'\n+0C2C5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C2C5F CRC                   00000000 (0)\n+0C2C63 Compressed Size       00000000 (0)\n+0C2C67 Uncompressed Size     00000000 (0)\n+0C2C6B Filename Length       0069 (105)\n+0C2C6D Extra Length          0009 (9)\n+0C2C6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC2C6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C2CD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C2CDA   Length              0005 (5)\n+0C2CDC   Flags               01 (1) 'Modification'\n+0C2CDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C2CE1 LOCAL HEADER #331     04034B50 (67324752)\n+0C2CE5 Extract Zip Spec      14 (20) '2.0'\n+0C2CE6 Extract OS            00 (0) 'MS-DOS'\n+0C2CE7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C2CE9 Compression Method    0000 (0) 'Stored'\n+0C2CEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C2CEF CRC                   00000000 (0)\n+0C2CF3 Compressed Size       00000000 (0)\n+0C2CF7 Uncompressed Size     00000000 (0)\n+0C2CFB Filename Length       007F (127)\n+0C2CFD Extra Length          0009 (9)\n+0C2CFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC2CFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C2D7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C2D80   Length              0005 (5)\n+0C2D82   Flags               01 (1) 'Modification'\n+0C2D83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C2D87 PAYLOAD\n+\n+0C4D35 DATA DESCRIPTOR       08074B50 (134695760)\n+0C4D39 CRC                   7018E446 (1880679494)\n+0C4D3D Compressed Size       00001FAE (8110)\n+0C4D41 Uncompressed Size     00001FAE (8110)\n+\n+0C4D45 LOCAL HEADER #332     04034B50 (67324752)\n+0C4D49 Extract Zip Spec      14 (20) '2.0'\n+0C4D4A Extract OS            00 (0) 'MS-DOS'\n+0C4D4B General Purpose Flag  0000 (0)\n+0C4D4D Compression Method    0000 (0) 'Stored'\n+0C4D4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4D53 CRC                   00000000 (0)\n+0C4D57 Compressed Size       00000000 (0)\n+0C4D5B Uncompressed Size     00000000 (0)\n+0C4D5F Filename Length       0060 (96)\n+0C4D61 Extra Length          0009 (9)\n+0C4D63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4D63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4DC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4DC5   Length              0005 (5)\n+0C4DC7   Flags               01 (1) 'Modification'\n+0C4DC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C4DCC LOCAL HEADER #333     04034B50 (67324752)\n+0C4DD0 Extract Zip Spec      14 (20) '2.0'\n+0C4DD1 Extract OS            00 (0) 'MS-DOS'\n+0C4DD2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C4DD4 Compression Method    0000 (0) 'Stored'\n+0C4DD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4DDA CRC                   00000000 (0)\n+0C4DDE Compressed Size       00000000 (0)\n+0C4DE2 Uncompressed Size     00000000 (0)\n+0C4DE6 Filename Length       0076 (118)\n+0C4DE8 Extra Length          0009 (9)\n+0C4DEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4DEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4E60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4E62   Length              0005 (5)\n+0C4E64   Flags               01 (1) 'Modification'\n+0C4E65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C4E69 PAYLOAD\n+\n+0C6163 DATA DESCRIPTOR       08074B50 (134695760)\n+0C6167 CRC                   61A0CE5A (1637928538)\n+0C616B Compressed Size       000012FA (4858)\n+0C616F Uncompressed Size     000012FA (4858)\n+\n+0C6173 LOCAL HEADER #334     04034B50 (67324752)\n+0C6177 Extract Zip Spec      14 (20) '2.0'\n+0C6178 Extract OS            00 (0) 'MS-DOS'\n+0C6179 General Purpose Flag  0000 (0)\n+0C617B Compression Method    0000 (0) 'Stored'\n+0C617D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C6181 CRC                   00000000 (0)\n+0C6185 Compressed Size       00000000 (0)\n+0C6189 Uncompressed Size     00000000 (0)\n+0C618D Filename Length       0063 (99)\n+0C618F Extra Length          0009 (9)\n+0C6191 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC6191: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C61F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C61F6   Length              0005 (5)\n+0C61F8   Flags               01 (1) 'Modification'\n+0C61F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C61FD LOCAL HEADER #335     04034B50 (67324752)\n+0C6201 Extract Zip Spec      14 (20) '2.0'\n+0C6202 Extract OS            00 (0) 'MS-DOS'\n+0C6203 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C6205 Compression Method    0000 (0) 'Stored'\n+0C6207 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C620B CRC                   00000000 (0)\n+0C620F Compressed Size       00000000 (0)\n+0C6213 Uncompressed Size     00000000 (0)\n+0C6217 Filename Length       0079 (121)\n+0C6219 Extra Length          0009 (9)\n+0C621B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC621B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6294 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6296   Length              0005 (5)\n+0C6298   Flags               01 (1) 'Modification'\n+0C6299   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C629D PAYLOAD\n+\n+0C75AE DATA DESCRIPTOR       08074B50 (134695760)\n+0C75B2 CRC                   5A804AEF (1518357231)\n+0C75B6 Compressed Size       00001311 (4881)\n+0C75BA Uncompressed Size     00001311 (4881)\n+\n+0C75BE LOCAL HEADER #336     04034B50 (67324752)\n+0C75C2 Extract Zip Spec      14 (20) '2.0'\n+0C75C3 Extract OS            00 (0) 'MS-DOS'\n+0C75C4 General Purpose Flag  0000 (0)\n+0C75C6 Compression Method    0000 (0) 'Stored'\n+0C75C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C75CC CRC                   00000000 (0)\n+0C75D0 Compressed Size       00000000 (0)\n+0C75D4 Uncompressed Size     00000000 (0)\n+0C75D8 Filename Length       005F (95)\n+0C75DA Extra Length          0009 (9)\n+0C75DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC75DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C763B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C763D   Length              0005 (5)\n+0C763F   Flags               01 (1) 'Modification'\n+0C7640   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C7644 LOCAL HEADER #337     04034B50 (67324752)\n+0C7648 Extract Zip Spec      14 (20) '2.0'\n+0C7649 Extract OS            00 (0) 'MS-DOS'\n+0C764A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C764C Compression Method    0000 (0) 'Stored'\n+0C764E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C7652 CRC                   00000000 (0)\n+0C7656 Compressed Size       00000000 (0)\n+0C765A Uncompressed Size     00000000 (0)\n+0C765E Filename Length       0075 (117)\n+0C7660 Extra Length          0009 (9)\n+0C7662 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC7662: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C76D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C76D9   Length              0005 (5)\n+0C76DB   Flags               01 (1) 'Modification'\n+0C76DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C76E0 PAYLOAD\n+\n+0C9EC4 DATA DESCRIPTOR       08074B50 (134695760)\n+0C9EC8 CRC                   F4A07CA3 (4104158371)\n+0C9ECC Compressed Size       000027E4 (10212)\n+0C9ED0 Uncompressed Size     000027E4 (10212)\n+\n+0C9ED4 LOCAL HEADER #338     04034B50 (67324752)\n+0C9ED8 Extract Zip Spec      14 (20) '2.0'\n+0C9ED9 Extract OS            00 (0) 'MS-DOS'\n+0C9EDA General Purpose Flag  0000 (0)\n+0C9EDC Compression Method    0000 (0) 'Stored'\n+0C9EDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9EE2 CRC                   00000000 (0)\n+0C9EE6 Compressed Size       00000000 (0)\n+0C9EEA Uncompressed Size     00000000 (0)\n+0C9EEE Filename Length       0067 (103)\n+0C9EF0 Extra Length          0009 (9)\n+0C9EF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9EF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9F59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9F5B   Length              0005 (5)\n+0C9F5D   Flags               01 (1) 'Modification'\n+0C9F5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C9F62 LOCAL HEADER #339     04034B50 (67324752)\n+0C9F66 Extract Zip Spec      14 (20) '2.0'\n+0C9F67 Extract OS            00 (0) 'MS-DOS'\n+0C9F68 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C9F6A Compression Method    0000 (0) 'Stored'\n+0C9F6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9F70 CRC                   00000000 (0)\n+0C9F74 Compressed Size       00000000 (0)\n+0C9F78 Uncompressed Size     00000000 (0)\n+0C9F7C Filename Length       007D (125)\n+0C9F7E Extra Length          0009 (9)\n+0C9F80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9F80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9FFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9FFF   Length              0005 (5)\n+0CA001   Flags               01 (1) 'Modification'\n+0CA002   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CA006 PAYLOAD\n+\n+0CB27C DATA DESCRIPTOR       08074B50 (134695760)\n+0CB280 CRC                   6E031E40 (1845698112)\n+0CB284 Compressed Size       00001276 (4726)\n+0CB288 Uncompressed Size     00001276 (4726)\n+\n+0CB28C LOCAL HEADER #340     04034B50 (67324752)\n+0CB290 Extract Zip Spec      14 (20) '2.0'\n+0CB291 Extract OS            00 (0) 'MS-DOS'\n+0CB292 General Purpose Flag  0000 (0)\n+0CB294 Compression Method    0000 (0) 'Stored'\n+0CB296 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CB29A CRC                   00000000 (0)\n+0CB29E Compressed Size       00000000 (0)\n+0CB2A2 Uncompressed Size     00000000 (0)\n+0CB2A6 Filename Length       0066 (102)\n+0CB2A8 Extra Length          0009 (9)\n+0CB2AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCB2AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CB310 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CB312   Length              0005 (5)\n+0CB314   Flags               01 (1) 'Modification'\n+0CB315   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CB319 LOCAL HEADER #341     04034B50 (67324752)\n+0CB31D Extract Zip Spec      14 (20) '2.0'\n+0CB31E Extract OS            00 (0) 'MS-DOS'\n+0CB31F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CB321 Compression Method    0000 (0) 'Stored'\n+0CB323 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CB327 CRC                   00000000 (0)\n+0CB32B Compressed Size       00000000 (0)\n+0CB32F Uncompressed Size     00000000 (0)\n+0CB333 Filename Length       007C (124)\n+0CB335 Extra Length          0009 (9)\n+0CB337 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCB337: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CB3B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CB3B5   Length              0005 (5)\n+0CB3B7   Flags               01 (1) 'Modification'\n+0CB3B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CB3BC PAYLOAD\n+\n+0CBF9A DATA DESCRIPTOR       08074B50 (134695760)\n+0CBF9E CRC                   5987930A (1502057226)\n+0CBFA2 Compressed Size       00000BDE (3038)\n+0CBFA6 Uncompressed Size     00000BDE (3038)\n+\n+0CBFAA LOCAL HEADER #342     04034B50 (67324752)\n+0CBFAE Extract Zip Spec      14 (20) '2.0'\n+0CBFAF Extract OS            00 (0) 'MS-DOS'\n+0CBFB0 General Purpose Flag  0000 (0)\n+0CBFB2 Compression Method    0000 (0) 'Stored'\n+0CBFB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CBFB8 CRC                   00000000 (0)\n+0CBFBC Compressed Size       00000000 (0)\n+0CBFC0 Uncompressed Size     00000000 (0)\n+0CBFC4 Filename Length       0067 (103)\n+0CBFC6 Extra Length          0009 (9)\n+0CBFC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCBFC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CC02F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CC031   Length              0005 (5)\n+0CC033   Flags               01 (1) 'Modification'\n+0CC034   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CC038 LOCAL HEADER #343     04034B50 (67324752)\n+0CC03C Extract Zip Spec      14 (20) '2.0'\n+0CC03D Extract OS            00 (0) 'MS-DOS'\n+0CC03E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CC040 Compression Method    0000 (0) 'Stored'\n+0CC042 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CC046 CRC                   00000000 (0)\n+0CC04A Compressed Size       00000000 (0)\n+0CC04E Uncompressed Size     00000000 (0)\n+0CC052 Filename Length       007D (125)\n+0CC054 Extra Length          0009 (9)\n+0CC056 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCC056: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CC0D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CC0D5   Length              0005 (5)\n+0CC0D7   Flags               01 (1) 'Modification'\n+0CC0D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CC0DC PAYLOAD\n+\n+0CC9AB DATA DESCRIPTOR       08074B50 (134695760)\n+0CC9AF CRC                   CA93F7B9 (3398694841)\n+0CC9B3 Compressed Size       000008CF (2255)\n+0CC9B7 Uncompressed Size     000008CF (2255)\n+\n+0CC9BB LOCAL HEADER #344     04034B50 (67324752)\n+0CC9BF Extract Zip Spec      14 (20) '2.0'\n+0CC9C0 Extract OS            00 (0) 'MS-DOS'\n+0CC9C1 General Purpose Flag  0000 (0)\n+0CC9C3 Compression Method    0000 (0) 'Stored'\n+0CC9C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CC9C9 CRC                   00000000 (0)\n+0CC9CD Compressed Size       00000000 (0)\n+0CC9D1 Uncompressed Size     00000000 (0)\n+0CC9D5 Filename Length       0065 (101)\n+0CC9D7 Extra Length          0009 (9)\n+0CC9D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCC9D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CCA3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CCA40   Length              0005 (5)\n+0CCA42   Flags               01 (1) 'Modification'\n+0CCA43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CCA47 LOCAL HEADER #345     04034B50 (67324752)\n+0CCA4B Extract Zip Spec      14 (20) '2.0'\n+0CCA4C Extract OS            00 (0) 'MS-DOS'\n+0CCA4D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CCA4F Compression Method    0000 (0) 'Stored'\n+0CCA51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CCA55 CRC                   00000000 (0)\n+0CCA59 Compressed Size       00000000 (0)\n+0CCA5D Uncompressed Size     00000000 (0)\n+0CCA61 Filename Length       007B (123)\n+0CCA63 Extra Length          0009 (9)\n+0CCA65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCCA65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CCAE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CCAE2   Length              0005 (5)\n+0CCAE4   Flags               01 (1) 'Modification'\n+0CCAE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CCAE9 PAYLOAD\n+\n+0CD792 DATA DESCRIPTOR       08074B50 (134695760)\n+0CD796 CRC                   673E5975 (1732139381)\n+0CD79A Compressed Size       00000CA9 (3241)\n+0CD79E Uncompressed Size     00000CA9 (3241)\n+\n+0CD7A2 LOCAL HEADER #346     04034B50 (67324752)\n+0CD7A6 Extract Zip Spec      14 (20) '2.0'\n+0CD7A7 Extract OS            00 (0) 'MS-DOS'\n+0CD7A8 General Purpose Flag  0000 (0)\n+0CD7AA Compression Method    0000 (0) 'Stored'\n+0CD7AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CD7B0 CRC                   00000000 (0)\n+0CD7B4 Compressed Size       00000000 (0)\n+0CD7B8 Uncompressed Size     00000000 (0)\n+0CD7BC Filename Length       0063 (99)\n+0CD7BE Extra Length          0009 (9)\n+0CD7C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCD7C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CD823 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CD825   Length              0005 (5)\n+0CD827   Flags               01 (1) 'Modification'\n+0CD828   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CD82C LOCAL HEADER #347     04034B50 (67324752)\n+0CD830 Extract Zip Spec      14 (20) '2.0'\n+0CD831 Extract OS            00 (0) 'MS-DOS'\n+0CD832 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CD834 Compression Method    0000 (0) 'Stored'\n+0CD836 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CD83A CRC                   00000000 (0)\n+0CD83E Compressed Size       00000000 (0)\n+0CD842 Uncompressed Size     00000000 (0)\n+0CD846 Filename Length       0079 (121)\n+0CD848 Extra Length          0009 (9)\n+0CD84A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCD84A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CD8C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CD8C5   Length              0005 (5)\n+0CD8C7   Flags               01 (1) 'Modification'\n+0CD8C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CD8CC PAYLOAD\n+\n+0D2904 DATA DESCRIPTOR       08074B50 (134695760)\n+0D2908 CRC                   2D1E752C (756970796)\n+0D290C Compressed Size       00005038 (20536)\n+0D2910 Uncompressed Size     00005038 (20536)\n+\n+0D2914 LOCAL HEADER #348     04034B50 (67324752)\n+0D2918 Extract Zip Spec      14 (20) '2.0'\n+0D2919 Extract OS            00 (0) 'MS-DOS'\n+0D291A General Purpose Flag  0000 (0)\n+0D291C Compression Method    0000 (0) 'Stored'\n+0D291E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D2922 CRC                   00000000 (0)\n+0D2926 Compressed Size       00000000 (0)\n+0D292A Uncompressed Size     00000000 (0)\n+0D292E Filename Length       005C (92)\n+0D2930 Extra Length          0009 (9)\n+0D2932 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2932: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D298E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2990   Length              0005 (5)\n+0D2992   Flags               01 (1) 'Modification'\n+0D2993   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D2997 LOCAL HEADER #349     04034B50 (67324752)\n+0D299B Extract Zip Spec      14 (20) '2.0'\n+0D299C Extract OS            00 (0) 'MS-DOS'\n+0D299D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D299F Compression Method    0000 (0) 'Stored'\n+0D29A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D29A5 CRC                   00000000 (0)\n+0D29A9 Compressed Size       00000000 (0)\n+0D29AD Uncompressed Size     00000000 (0)\n+0D29B1 Filename Length       0072 (114)\n+0D29B3 Extra Length          0009 (9)\n+0D29B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD29B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D2A27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2A29   Length              0005 (5)\n+0D2A2B   Flags               01 (1) 'Modification'\n+0D2A2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D2A30 PAYLOAD\n+\n+0D44B5 DATA DESCRIPTOR       08074B50 (134695760)\n+0D44B9 CRC                   DB187B38 (3675814712)\n+0D44BD Compressed Size       00001A85 (6789)\n+0D44C1 Uncompressed Size     00001A85 (6789)\n+\n+0D44C5 LOCAL HEADER #350     04034B50 (67324752)\n+0D44C9 Extract Zip Spec      14 (20) '2.0'\n+0D44CA Extract OS            00 (0) 'MS-DOS'\n+0D44CB General Purpose Flag  0000 (0)\n+0D44CD Compression Method    0000 (0) 'Stored'\n+0D44CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D44D3 CRC                   00000000 (0)\n+0D44D7 Compressed Size       00000000 (0)\n+0D44DB Uncompressed Size     00000000 (0)\n+0D44DF Filename Length       005D (93)\n+0D44E1 Extra Length          0009 (9)\n+0D44E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD44E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D4540 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D4542   Length              0005 (5)\n+0D4544   Flags               01 (1) 'Modification'\n+0D4545   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D4549 LOCAL HEADER #351     04034B50 (67324752)\n+0D454D Extract Zip Spec      14 (20) '2.0'\n+0D454E Extract OS            00 (0) 'MS-DOS'\n+0D454F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D4551 Compression Method    0000 (0) 'Stored'\n+0D4553 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D4557 CRC                   00000000 (0)\n+0D455B Compressed Size       00000000 (0)\n+0D455F Uncompressed Size     00000000 (0)\n+0D4563 Filename Length       0073 (115)\n+0D4565 Extra Length          0009 (9)\n+0D4567 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD4567: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D45DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D45DC   Length              0005 (5)\n+0D45DE   Flags               01 (1) 'Modification'\n+0D45DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D45E3 PAYLOAD\n+\n+0D6051 DATA DESCRIPTOR       08074B50 (134695760)\n+0D6055 CRC                   CD183667 (3440916071)\n+0D6059 Compressed Size       00001A6E (6766)\n+0D605D Uncompressed Size     00001A6E (6766)\n+\n+0D6061 LOCAL HEADER #352     04034B50 (67324752)\n+0D6065 Extract Zip Spec      14 (20) '2.0'\n+0D6066 Extract OS            00 (0) 'MS-DOS'\n+0D6067 General Purpose Flag  0000 (0)\n+0D6069 Compression Method    0000 (0) 'Stored'\n+0D606B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D606F CRC                   00000000 (0)\n+0D6073 Compressed Size       00000000 (0)\n+0D6077 Uncompressed Size     00000000 (0)\n+0D607B Filename Length       005D (93)\n+0D607D Extra Length          0009 (9)\n+0D607F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD607F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D60DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D60DE   Length              0005 (5)\n+0D60E0   Flags               01 (1) 'Modification'\n+0D60E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D60E5 LOCAL HEADER #353     04034B50 (67324752)\n+0D60E9 Extract Zip Spec      14 (20) '2.0'\n+0D60EA Extract OS            00 (0) 'MS-DOS'\n+0D60EB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D60ED Compression Method    0000 (0) 'Stored'\n+0D60EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D60F3 CRC                   00000000 (0)\n+0D60F7 Compressed Size       00000000 (0)\n+0D60FB Uncompressed Size     00000000 (0)\n+0D60FF Filename Length       0073 (115)\n+0D6101 Extra Length          0009 (9)\n+0D6103 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6103: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6176 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6178   Length              0005 (5)\n+0D617A   Flags               01 (1) 'Modification'\n+0D617B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D617F PAYLOAD\n+\n+0D7C11 DATA DESCRIPTOR       08074B50 (134695760)\n+0D7C15 CRC                   0C7DD276 (209572470)\n+0D7C19 Compressed Size       00001A92 (6802)\n+0D7C1D Uncompressed Size     00001A92 (6802)\n+\n+0D7C21 LOCAL HEADER #354     04034B50 (67324752)\n+0D7C25 Extract Zip Spec      14 (20) '2.0'\n+0D7C26 Extract OS            00 (0) 'MS-DOS'\n+0D7C27 General Purpose Flag  0000 (0)\n+0D7C29 Compression Method    0000 (0) 'Stored'\n+0D7C2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D7C2F CRC                   00000000 (0)\n+0D7C33 Compressed Size       00000000 (0)\n+0D7C37 Uncompressed Size     00000000 (0)\n+0D7C3B Filename Length       005E (94)\n+0D7C3D Extra Length          0009 (9)\n+0D7C3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD7C3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D7C9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D7C9F   Length              0005 (5)\n+0D7CA1   Flags               01 (1) 'Modification'\n+0D7CA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D7CA6 LOCAL HEADER #355     04034B50 (67324752)\n+0D7CAA Extract Zip Spec      14 (20) '2.0'\n+0D7CAB Extract OS            00 (0) 'MS-DOS'\n+0D7CAC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D7CAE Compression Method    0000 (0) 'Stored'\n+0D7CB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D7CB4 CRC                   00000000 (0)\n+0D7CB8 Compressed Size       00000000 (0)\n+0D7CBC Uncompressed Size     00000000 (0)\n+0D7CC0 Filename Length       0074 (116)\n+0D7CC2 Extra Length          0009 (9)\n+0D7CC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD7CC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D7D38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D7D3A   Length              0005 (5)\n+0D7D3C   Flags               01 (1) 'Modification'\n+0D7D3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D7D41 PAYLOAD\n+\n+0D9474 DATA DESCRIPTOR       08074B50 (134695760)\n+0D9478 CRC                   60EA12C2 (1625952962)\n+0D947C Compressed Size       00001733 (5939)\n+0D9480 Uncompressed Size     00001733 (5939)\n+\n+0D9484 LOCAL HEADER #356     04034B50 (67324752)\n+0D9488 Extract Zip Spec      14 (20) '2.0'\n+0D9489 Extract OS            00 (0) 'MS-DOS'\n+0D948A General Purpose Flag  0000 (0)\n+0D948C Compression Method    0000 (0) 'Stored'\n+0D948E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D9492 CRC                   00000000 (0)\n+0D9496 Compressed Size       00000000 (0)\n+0D949A Uncompressed Size     00000000 (0)\n+0D949E Filename Length       0061 (97)\n+0D94A0 Extra Length          0009 (9)\n+0D94A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD94A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D9503 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D9505   Length              0005 (5)\n+0D9507   Flags               01 (1) 'Modification'\n+0D9508   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D950C LOCAL HEADER #357     04034B50 (67324752)\n+0D9510 Extract Zip Spec      14 (20) '2.0'\n+0D9511 Extract OS            00 (0) 'MS-DOS'\n+0D9512 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D9514 Compression Method    0000 (0) 'Stored'\n+0D9516 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D951A CRC                   00000000 (0)\n+0D951E Compressed Size       00000000 (0)\n+0D9522 Uncompressed Size     00000000 (0)\n+0D9526 Filename Length       0077 (119)\n+0D9528 Extra Length          0009 (9)\n+0D952A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD952A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D95A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D95A3   Length              0005 (5)\n+0D95A5   Flags               01 (1) 'Modification'\n+0D95A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D95AA PAYLOAD\n+\n+0DAC27 DATA DESCRIPTOR       08074B50 (134695760)\n+0DAC2B CRC                   4BB1EABD (1269951165)\n+0DAC2F Compressed Size       0000167D (5757)\n+0DAC33 Uncompressed Size     0000167D (5757)\n+\n+0DAC37 LOCAL HEADER #358     04034B50 (67324752)\n+0DAC3B Extract Zip Spec      14 (20) '2.0'\n+0DAC3C Extract OS            00 (0) 'MS-DOS'\n+0DAC3D General Purpose Flag  0000 (0)\n+0DAC3F Compression Method    0000 (0) 'Stored'\n+0DAC41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DAC45 CRC                   00000000 (0)\n+0DAC49 Compressed Size       00000000 (0)\n+0DAC4D Uncompressed Size     00000000 (0)\n+0DAC51 Filename Length       0061 (97)\n+0DAC53 Extra Length          0009 (9)\n+0DAC55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDAC55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DACB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DACB8   Length              0005 (5)\n+0DACBA   Flags               01 (1) 'Modification'\n+0DACBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DACBF LOCAL HEADER #359     04034B50 (67324752)\n+0DACC3 Extract Zip Spec      14 (20) '2.0'\n+0DACC4 Extract OS            00 (0) 'MS-DOS'\n+0DACC5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DACC7 Compression Method    0000 (0) 'Stored'\n+0DACC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DACCD CRC                   00000000 (0)\n+0DACD1 Compressed Size       00000000 (0)\n+0DACD5 Uncompressed Size     00000000 (0)\n+0DACD9 Filename Length       0077 (119)\n+0DACDB Extra Length          0009 (9)\n+0DACDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDACDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DAD54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DAD56   Length              0005 (5)\n+0DAD58   Flags               01 (1) 'Modification'\n+0DAD59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DAD5D PAYLOAD\n+\n+0DDFE7 DATA DESCRIPTOR       08074B50 (134695760)\n+0DDFEB CRC                   A18A8EB9 (2710212281)\n+0DDFEF Compressed Size       0000328A (12938)\n+0DDFF3 Uncompressed Size     0000328A (12938)\n+\n+0DDFF7 LOCAL HEADER #360     04034B50 (67324752)\n+0DDFFB Extract Zip Spec      14 (20) '2.0'\n+0DDFFC Extract OS            00 (0) 'MS-DOS'\n+0DDFFD General Purpose Flag  0000 (0)\n+0DDFFF Compression Method    0000 (0) 'Stored'\n+0DE001 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE005 CRC                   00000000 (0)\n+0DE009 Compressed Size       00000000 (0)\n+0DE00D Uncompressed Size     00000000 (0)\n+0DE011 Filename Length       0060 (96)\n+0DE013 Extra Length          0009 (9)\n+0DE015 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE015: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE075 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE077   Length              0005 (5)\n+0DE079   Flags               01 (1) 'Modification'\n+0DE07A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DE07E LOCAL HEADER #361     04034B50 (67324752)\n+0DE082 Extract Zip Spec      14 (20) '2.0'\n+0DE083 Extract OS            00 (0) 'MS-DOS'\n+0DE084 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DE086 Compression Method    0000 (0) 'Stored'\n+0DE088 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DE08C CRC                   00000000 (0)\n+0DE090 Compressed Size       00000000 (0)\n+0DE094 Uncompressed Size     00000000 (0)\n+0DE098 Filename Length       0076 (118)\n+0DE09A Extra Length          0009 (9)\n+0DE09C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDE09C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DE112 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DE114   Length              0005 (5)\n+0DE116   Flags               01 (1) 'Modification'\n+0DE117   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DE11B PAYLOAD\n+\n+0E1994 DATA DESCRIPTOR       08074B50 (134695760)\n+0E1998 CRC                   B7B762D6 (3082248918)\n+0E199C Compressed Size       00003879 (14457)\n+0E19A0 Uncompressed Size     00003879 (14457)\n+\n+0E19A4 LOCAL HEADER #362     04034B50 (67324752)\n+0E19A8 Extract Zip Spec      14 (20) '2.0'\n+0E19A9 Extract OS            00 (0) 'MS-DOS'\n+0E19AA General Purpose Flag  0000 (0)\n+0E19AC Compression Method    0000 (0) 'Stored'\n+0E19AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E19B2 CRC                   00000000 (0)\n+0E19B6 Compressed Size       00000000 (0)\n+0E19BA Uncompressed Size     00000000 (0)\n+0E19BE Filename Length       0064 (100)\n+0E19C0 Extra Length          0009 (9)\n+0E19C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE19C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E1A26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E1A28   Length              0005 (5)\n+0E1A2A   Flags               01 (1) 'Modification'\n+0E1A2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E1A2F LOCAL HEADER #363     04034B50 (67324752)\n+0E1A33 Extract Zip Spec      14 (20) '2.0'\n+0E1A34 Extract OS            00 (0) 'MS-DOS'\n+0E1A35 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E1A37 Compression Method    0000 (0) 'Stored'\n+0E1A39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E1A3D CRC                   00000000 (0)\n+0E1A41 Compressed Size       00000000 (0)\n+0E1A45 Uncompressed Size     00000000 (0)\n+0E1A49 Filename Length       007A (122)\n+0E1A4B Extra Length          0009 (9)\n+0E1A4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE1A4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E1AC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E1AC9   Length              0005 (5)\n+0E1ACB   Flags               01 (1) 'Modification'\n+0E1ACC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E1AD0 PAYLOAD\n+\n+0E3C20 DATA DESCRIPTOR       08074B50 (134695760)\n+0E3C24 CRC                   A2B9D29A (2730087066)\n+0E3C28 Compressed Size       00002150 (8528)\n+0E3C2C Uncompressed Size     00002150 (8528)\n+\n+0E3C30 LOCAL HEADER #364     04034B50 (67324752)\n+0E3C34 Extract Zip Spec      14 (20) '2.0'\n+0E3C35 Extract OS            00 (0) 'MS-DOS'\n+0E3C36 General Purpose Flag  0000 (0)\n+0E3C38 Compression Method    0000 (0) 'Stored'\n+0E3C3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E3C3E CRC                   00000000 (0)\n+0E3C42 Compressed Size       00000000 (0)\n+0E3C46 Uncompressed Size     00000000 (0)\n+0E3C4A Filename Length       005D (93)\n+0E3C4C Extra Length          0009 (9)\n+0E3C4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE3C4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E3CAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E3CAD   Length              0005 (5)\n+0E3CAF   Flags               01 (1) 'Modification'\n+0E3CB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E3CB4 LOCAL HEADER #365     04034B50 (67324752)\n+0E3CB8 Extract Zip Spec      14 (20) '2.0'\n+0E3CB9 Extract OS            00 (0) 'MS-DOS'\n+0E3CBA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E3CBC Compression Method    0000 (0) 'Stored'\n+0E3CBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E3CC2 CRC                   00000000 (0)\n+0E3CC6 Compressed Size       00000000 (0)\n+0E3CCA Uncompressed Size     00000000 (0)\n+0E3CCE Filename Length       0073 (115)\n+0E3CD0 Extra Length          0009 (9)\n+0E3CD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE3CD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E3D45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E3D47   Length              0005 (5)\n+0E3D49   Flags               01 (1) 'Modification'\n+0E3D4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E3D4E PAYLOAD\n+\n+0E4F2A DATA DESCRIPTOR       08074B50 (134695760)\n+0E4F2E CRC                   C4FC7EA2 (3304881826)\n+0E4F32 Compressed Size       000011DC (4572)\n+0E4F36 Uncompressed Size     000011DC (4572)\n+\n+0E4F3A LOCAL HEADER #366     04034B50 (67324752)\n+0E4F3E Extract Zip Spec      14 (20) '2.0'\n+0E4F3F Extract OS            00 (0) 'MS-DOS'\n+0E4F40 General Purpose Flag  0000 (0)\n+0E4F42 Compression Method    0000 (0) 'Stored'\n+0E4F44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E4F48 CRC                   00000000 (0)\n+0E4F4C Compressed Size       00000000 (0)\n+0E4F50 Uncompressed Size     00000000 (0)\n+0E4F54 Filename Length       0060 (96)\n+0E4F56 Extra Length          0009 (9)\n+0E4F58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE4F58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E4FB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E4FBA   Length              0005 (5)\n+0E4FBC   Flags               01 (1) 'Modification'\n+0E4FBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E4FC1 LOCAL HEADER #367     04034B50 (67324752)\n+0E4FC5 Extract Zip Spec      14 (20) '2.0'\n+0E4FC6 Extract OS            00 (0) 'MS-DOS'\n+0E4FC7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E4FC9 Compression Method    0000 (0) 'Stored'\n+0E4FCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E4FCF CRC                   00000000 (0)\n+0E4FD3 Compressed Size       00000000 (0)\n+0E4FD7 Uncompressed Size     00000000 (0)\n+0E4FDB Filename Length       0076 (118)\n+0E4FDD Extra Length          0009 (9)\n+0E4FDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE4FDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E5055 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E5057   Length              0005 (5)\n+0E5059   Flags               01 (1) 'Modification'\n+0E505A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E505E PAYLOAD\n+\n+0EC359 DATA DESCRIPTOR       08074B50 (134695760)\n+0EC35D CRC                   EE30A8D8 (3996166360)\n+0EC361 Compressed Size       000072FB (29435)\n+0EC365 Uncompressed Size     000072FB (29435)\n+\n+0EC369 LOCAL HEADER #368     04034B50 (67324752)\n+0EC36D Extract Zip Spec      14 (20) '2.0'\n+0EC36E Extract OS            00 (0) 'MS-DOS'\n+0EC36F General Purpose Flag  0000 (0)\n+0EC371 Compression Method    0000 (0) 'Stored'\n+0EC373 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EC377 CRC                   00000000 (0)\n+0EC37B Compressed Size       00000000 (0)\n+0EC37F Uncompressed Size     00000000 (0)\n+0EC383 Filename Length       0066 (102)\n+0EC385 Extra Length          0009 (9)\n+0EC387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEC387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EC3ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EC3EF   Length              0005 (5)\n+0EC3F1   Flags               01 (1) 'Modification'\n+0EC3F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EC3F6 LOCAL HEADER #369     04034B50 (67324752)\n+0EC3FA Extract Zip Spec      14 (20) '2.0'\n+0EC3FB Extract OS            00 (0) 'MS-DOS'\n+0EC3FC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EC3FE Compression Method    0000 (0) 'Stored'\n+0EC400 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EC404 CRC                   00000000 (0)\n+0EC408 Compressed Size       00000000 (0)\n+0EC40C Uncompressed Size     00000000 (0)\n+0EC410 Filename Length       007C (124)\n+0EC412 Extra Length          0009 (9)\n+0EC414 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEC414: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EC490 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EC492   Length              0005 (5)\n+0EC494   Flags               01 (1) 'Modification'\n+0EC495   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EC499 PAYLOAD\n+\n+0F0CA7 DATA DESCRIPTOR       08074B50 (134695760)\n+0F0CAB CRC                   EA36353C (3929421116)\n+0F0CAF Compressed Size       0000480E (18446)\n+0F0CB3 Uncompressed Size     0000480E (18446)\n+\n+0F0CB7 LOCAL HEADER #370     04034B50 (67324752)\n+0F0CBB Extract Zip Spec      14 (20) '2.0'\n+0F0CBC Extract OS            00 (0) 'MS-DOS'\n+0F0CBD General Purpose Flag  0000 (0)\n+0F0CBF Compression Method    0000 (0) 'Stored'\n+0F0CC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F0CC5 CRC                   00000000 (0)\n+0F0CC9 Compressed Size       00000000 (0)\n+0F0CCD Uncompressed Size     00000000 (0)\n+0F0CD1 Filename Length       0065 (101)\n+0F0CD3 Extra Length          0009 (9)\n+0F0CD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF0CD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F0D3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F0D3C   Length              0005 (5)\n+0F0D3E   Flags               01 (1) 'Modification'\n+0F0D3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F0D43 LOCAL HEADER #371     04034B50 (67324752)\n+0F0D47 Extract Zip Spec      14 (20) '2.0'\n+0F0D48 Extract OS            00 (0) 'MS-DOS'\n+0F0D49 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F0D4B Compression Method    0000 (0) 'Stored'\n+0F0D4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F0D51 CRC                   00000000 (0)\n+0F0D55 Compressed Size       00000000 (0)\n+0F0D59 Uncompressed Size     00000000 (0)\n+0F0D5D Filename Length       007B (123)\n+0F0D5F Extra Length          0009 (9)\n+0F0D61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF0D61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F0DDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F0DDE   Length              0005 (5)\n+0F0DE0   Flags               01 (1) 'Modification'\n+0F0DE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F0DE5 PAYLOAD\n+\n+0F159B DATA DESCRIPTOR       08074B50 (134695760)\n+0F159F CRC                   CA474DE0 (3393670624)\n+0F15A3 Compressed Size       000007B6 (1974)\n+0F15A7 Uncompressed Size     000007B6 (1974)\n+\n+0F15AB LOCAL HEADER #372     04034B50 (67324752)\n+0F15AF Extract Zip Spec      14 (20) '2.0'\n+0F15B0 Extract OS            00 (0) 'MS-DOS'\n+0F15B1 General Purpose Flag  0000 (0)\n+0F15B3 Compression Method    0000 (0) 'Stored'\n+0F15B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F15B9 CRC                   00000000 (0)\n+0F15BD Compressed Size       00000000 (0)\n+0F15C1 Uncompressed Size     00000000 (0)\n+0F15C5 Filename Length       0061 (97)\n+0F15C7 Extra Length          0009 (9)\n+0F15C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF15C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F162A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F162C   Length              0005 (5)\n+0F162E   Flags               01 (1) 'Modification'\n+0F162F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F1633 LOCAL HEADER #373     04034B50 (67324752)\n+0F1637 Extract Zip Spec      14 (20) '2.0'\n+0F1638 Extract OS            00 (0) 'MS-DOS'\n+0F1639 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F163B Compression Method    0000 (0) 'Stored'\n+0F163D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F1641 CRC                   00000000 (0)\n+0F1645 Compressed Size       00000000 (0)\n+0F1649 Uncompressed Size     00000000 (0)\n+0F164D Filename Length       0077 (119)\n+0F164F Extra Length          0009 (9)\n+0F1651 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF1651: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F16C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F16CA   Length              0005 (5)\n+0F16CC   Flags               01 (1) 'Modification'\n+0F16CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F16D1 PAYLOAD\n+\n+0F289C DATA DESCRIPTOR       08074B50 (134695760)\n+0F28A0 CRC                   A19F99D4 (2711591380)\n+0F28A4 Compressed Size       000011CB (4555)\n+0F28A8 Uncompressed Size     000011CB (4555)\n+\n+0F28AC LOCAL HEADER #374     04034B50 (67324752)\n+0F28B0 Extract Zip Spec      14 (20) '2.0'\n+0F28B1 Extract OS            00 (0) 'MS-DOS'\n+0F28B2 General Purpose Flag  0000 (0)\n+0F28B4 Compression Method    0000 (0) 'Stored'\n+0F28B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F28BA CRC                   00000000 (0)\n+0F28BE Compressed Size       00000000 (0)\n+0F28C2 Uncompressed Size     00000000 (0)\n+0F28C6 Filename Length       005D (93)\n+0F28C8 Extra Length          0009 (9)\n+0F28CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF28CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F2927 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F2929   Length              0005 (5)\n+0F292B   Flags               01 (1) 'Modification'\n+0F292C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F2930 LOCAL HEADER #375     04034B50 (67324752)\n+0F2934 Extract Zip Spec      14 (20) '2.0'\n+0F2935 Extract OS            00 (0) 'MS-DOS'\n+0F2936 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F2938 Compression Method    0000 (0) 'Stored'\n+0F293A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F293E CRC                   00000000 (0)\n+0F2942 Compressed Size       00000000 (0)\n+0F2946 Uncompressed Size     00000000 (0)\n+0F294A Filename Length       0073 (115)\n+0F294C Extra Length          0009 (9)\n+0F294E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF294E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F29C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F29C3   Length              0005 (5)\n+0F29C5   Flags               01 (1) 'Modification'\n+0F29C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F29CA PAYLOAD\n+\n+0F5219 DATA DESCRIPTOR       08074B50 (134695760)\n+0F521D CRC                   7573E84B (1970530379)\n+0F5221 Compressed Size       0000284F (10319)\n+0F5225 Uncompressed Size     0000284F (10319)\n+\n+0F5229 LOCAL HEADER #376     04034B50 (67324752)\n+0F522D Extract Zip Spec      14 (20) '2.0'\n+0F522E Extract OS            00 (0) 'MS-DOS'\n+0F522F General Purpose Flag  0000 (0)\n+0F5231 Compression Method    0000 (0) 'Stored'\n+0F5233 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F5237 CRC                   00000000 (0)\n+0F523B Compressed Size       00000000 (0)\n+0F523F Uncompressed Size     00000000 (0)\n+0F5243 Filename Length       0061 (97)\n+0F5245 Extra Length          0009 (9)\n+0F5247 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF5247: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F52A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F52AA   Length              0005 (5)\n+0F52AC   Flags               01 (1) 'Modification'\n+0F52AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F52B1 LOCAL HEADER #377     04034B50 (67324752)\n+0F52B5 Extract Zip Spec      14 (20) '2.0'\n+0F52B6 Extract OS            00 (0) 'MS-DOS'\n+0F52B7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F52B9 Compression Method    0000 (0) 'Stored'\n+0F52BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F52BF CRC                   00000000 (0)\n+0F52C3 Compressed Size       00000000 (0)\n+0F52C7 Uncompressed Size     00000000 (0)\n+0F52CB Filename Length       0077 (119)\n+0F52CD Extra Length          0009 (9)\n+0F52CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF52CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F5346 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F5348   Length              0005 (5)\n+0F534A   Flags               01 (1) 'Modification'\n+0F534B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F534F PAYLOAD\n+\n+0F7AC6 DATA DESCRIPTOR       08074B50 (134695760)\n+0F7ACA CRC                   131CB9D8 (320649688)\n+0F7ACE Compressed Size       00002777 (10103)\n+0F7AD2 Uncompressed Size     00002777 (10103)\n+\n+0F7AD6 LOCAL HEADER #378     04034B50 (67324752)\n+0F7ADA Extract Zip Spec      14 (20) '2.0'\n+0F7ADB Extract OS            00 (0) 'MS-DOS'\n+0F7ADC General Purpose Flag  0000 (0)\n+0F7ADE Compression Method    0000 (0) 'Stored'\n+0F7AE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F7AE4 CRC                   00000000 (0)\n+0F7AE8 Compressed Size       00000000 (0)\n+0F7AEC Uncompressed Size     00000000 (0)\n+0F7AF0 Filename Length       0060 (96)\n+0F7AF2 Extra Length          0009 (9)\n+0F7AF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF7AF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F7B54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F7B56   Length              0005 (5)\n+0F7B58   Flags               01 (1) 'Modification'\n+0F7B59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F7B5D LOCAL HEADER #379     04034B50 (67324752)\n+0F7B61 Extract Zip Spec      14 (20) '2.0'\n+0F7B62 Extract OS            00 (0) 'MS-DOS'\n+0F7B63 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F7B65 Compression Method    0000 (0) 'Stored'\n+0F7B67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F7B6B CRC                   00000000 (0)\n+0F7B6F Compressed Size       00000000 (0)\n+0F7B73 Uncompressed Size     00000000 (0)\n+0F7B77 Filename Length       0076 (118)\n+0F7B79 Extra Length          0009 (9)\n+0F7B7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF7B7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F7BF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F7BF3   Length              0005 (5)\n+0F7BF5   Flags               01 (1) 'Modification'\n+0F7BF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F7BFA PAYLOAD\n+\n+0F8D07 DATA DESCRIPTOR       08074B50 (134695760)\n+0F8D0B CRC                   95FAB1DA (2516234714)\n+0F8D0F Compressed Size       0000110D (4365)\n+0F8D13 Uncompressed Size     0000110D (4365)\n+\n+0F8D17 LOCAL HEADER #380     04034B50 (67324752)\n+0F8D1B Extract Zip Spec      14 (20) '2.0'\n+0F8D1C Extract OS            00 (0) 'MS-DOS'\n+0F8D1D General Purpose Flag  0000 (0)\n+0F8D1F Compression Method    0000 (0) 'Stored'\n+0F8D21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F8D25 CRC                   00000000 (0)\n+0F8D29 Compressed Size       00000000 (0)\n+0F8D2D Uncompressed Size     00000000 (0)\n+0F8D31 Filename Length       0063 (99)\n+0F8D33 Extra Length          0009 (9)\n+0F8D35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF8D35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F8D98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F8D9A   Length              0005 (5)\n+0F8D9C   Flags               01 (1) 'Modification'\n+0F8D9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F8DA1 LOCAL HEADER #381     04034B50 (67324752)\n+0F8DA5 Extract Zip Spec      14 (20) '2.0'\n+0F8DA6 Extract OS            00 (0) 'MS-DOS'\n+0F8DA7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F8DA9 Compression Method    0000 (0) 'Stored'\n+0F8DAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F8DAF CRC                   00000000 (0)\n+0F8DB3 Compressed Size       00000000 (0)\n+0F8DB7 Uncompressed Size     00000000 (0)\n+0F8DBB Filename Length       0079 (121)\n+0F8DBD Extra Length          0009 (9)\n+0F8DBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF8DBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F8E38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F8E3A   Length              0005 (5)\n+0F8E3C   Flags               01 (1) 'Modification'\n+0F8E3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F8E41 PAYLOAD\n+\n+0FA817 DATA DESCRIPTOR       08074B50 (134695760)\n+0FA81B CRC                   B1E82858 (2984781912)\n+0FA81F Compressed Size       000019D6 (6614)\n+0FA823 Uncompressed Size     000019D6 (6614)\n+\n+0FA827 LOCAL HEADER #382     04034B50 (67324752)\n+0FA82B Extract Zip Spec      14 (20) '2.0'\n+0FA82C Extract OS            00 (0) 'MS-DOS'\n+0FA82D General Purpose Flag  0000 (0)\n+0FA82F Compression Method    0000 (0) 'Stored'\n+0FA831 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FA835 CRC                   00000000 (0)\n+0FA839 Compressed Size       00000000 (0)\n+0FA83D Uncompressed Size     00000000 (0)\n+0FA841 Filename Length       0060 (96)\n+0FA843 Extra Length          0009 (9)\n+0FA845 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFA845: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FA8A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FA8A7   Length              0005 (5)\n+0FA8A9   Flags               01 (1) 'Modification'\n+0FA8AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FA8AE LOCAL HEADER #383     04034B50 (67324752)\n+0FA8B2 Extract Zip Spec      14 (20) '2.0'\n+0FA8B3 Extract OS            00 (0) 'MS-DOS'\n+0FA8B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FA8B6 Compression Method    0000 (0) 'Stored'\n+0FA8B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FA8BC CRC                   00000000 (0)\n+0FA8C0 Compressed Size       00000000 (0)\n+0FA8C4 Uncompressed Size     00000000 (0)\n+0FA8C8 Filename Length       0076 (118)\n+0FA8CA Extra Length          0009 (9)\n+0FA8CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFA8CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FA942 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FA944   Length              0005 (5)\n+0FA946   Flags               01 (1) 'Modification'\n+0FA947   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FA94B PAYLOAD\n+\n+0FB8C9 DATA DESCRIPTOR       08074B50 (134695760)\n+0FB8CD CRC                   EA13965E (3927152222)\n+0FB8D1 Compressed Size       00000F7E (3966)\n+0FB8D5 Uncompressed Size     00000F7E (3966)\n+\n+0FB8D9 LOCAL HEADER #384     04034B50 (67324752)\n+0FB8DD Extract Zip Spec      14 (20) '2.0'\n+0FB8DE Extract OS            00 (0) 'MS-DOS'\n+0FB8DF General Purpose Flag  0000 (0)\n+0FB8E1 Compression Method    0000 (0) 'Stored'\n+0FB8E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB8E7 CRC                   00000000 (0)\n+0FB8EB Compressed Size       00000000 (0)\n+0FB8EF Uncompressed Size     00000000 (0)\n+0FB8F3 Filename Length       0059 (89)\n+0FB8F5 Extra Length          0009 (9)\n+0FB8F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB8F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FB950 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FB952   Length              0005 (5)\n+0FB954   Flags               01 (1) 'Modification'\n+0FB955   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FB959 LOCAL HEADER #385     04034B50 (67324752)\n+0FB95D Extract Zip Spec      14 (20) '2.0'\n+0FB95E Extract OS            00 (0) 'MS-DOS'\n+0FB95F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FB961 Compression Method    0000 (0) 'Stored'\n+0FB963 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB967 CRC                   00000000 (0)\n+0FB96B Compressed Size       00000000 (0)\n+0FB96F Uncompressed Size     00000000 (0)\n+0FB973 Filename Length       006F (111)\n+0FB975 Extra Length          0009 (9)\n+0FB977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FB9E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FB9E8   Length              0005 (5)\n+0FB9EA   Flags               01 (1) 'Modification'\n+0FB9EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FB9EF PAYLOAD\n+\n+0FE6C5 DATA DESCRIPTOR       08074B50 (134695760)\n+0FE6C9 CRC                   C8903588 (3364894088)\n+0FE6CD Compressed Size       00002CD6 (11478)\n+0FE6D1 Uncompressed Size     00002CD6 (11478)\n+\n+0FE6D5 LOCAL HEADER #386     04034B50 (67324752)\n+0FE6D9 Extract Zip Spec      14 (20) '2.0'\n+0FE6DA Extract OS            00 (0) 'MS-DOS'\n+0FE6DB General Purpose Flag  0000 (0)\n+0FE6DD Compression Method    0000 (0) 'Stored'\n+0FE6DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FE6E3 CRC                   00000000 (0)\n+0FE6E7 Compressed Size       00000000 (0)\n+0FE6EB Uncompressed Size     00000000 (0)\n+0FE6EF Filename Length       006A (106)\n+0FE6F1 Extra Length          0009 (9)\n+0FE6F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFE6F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FE75D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FE75F   Length              0005 (5)\n+0FE761   Flags               01 (1) 'Modification'\n+0FE762   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FE766 LOCAL HEADER #387     04034B50 (67324752)\n+0FE76A Extract Zip Spec      14 (20) '2.0'\n+0FE76B Extract OS            00 (0) 'MS-DOS'\n+0FE76C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FE76E Compression Method    0000 (0) 'Stored'\n+0FE770 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FE774 CRC                   00000000 (0)\n+0FE778 Compressed Size       00000000 (0)\n+0FE77C Uncompressed Size     00000000 (0)\n+0FE780 Filename Length       0080 (128)\n+0FE782 Extra Length          0009 (9)\n+0FE784 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFE784: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FE804 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FE806   Length              0005 (5)\n+0FE808   Flags               01 (1) 'Modification'\n+0FE809   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FE80D PAYLOAD\n+\n+0FF23C DATA DESCRIPTOR       08074B50 (134695760)\n+0FF240 CRC                   D19560D0 (3516227792)\n+0FF244 Compressed Size       00000A2F (2607)\n+0FF248 Uncompressed Size     00000A2F (2607)\n+\n+0FF24C LOCAL HEADER #388     04034B50 (67324752)\n+0FF250 Extract Zip Spec      14 (20) '2.0'\n+0FF251 Extract OS            00 (0) 'MS-DOS'\n+0FF252 General Purpose Flag  0000 (0)\n+0FF254 Compression Method    0000 (0) 'Stored'\n+0FF256 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF25A CRC                   00000000 (0)\n+0FF25E Compressed Size       00000000 (0)\n+0FF262 Uncompressed Size     00000000 (0)\n+0FF266 Filename Length       002F (47)\n+0FF268 Extra Length          0009 (9)\n+0FF26A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFF26A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FF299 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FF29B   Length              0005 (5)\n+0FF29D   Flags               01 (1) 'Modification'\n+0FF29E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FF2A2 LOCAL HEADER #389     04034B50 (67324752)\n+0FF2A6 Extract Zip Spec      14 (20) '2.0'\n+0FF2A7 Extract OS            00 (0) 'MS-DOS'\n+0FF2A8 General Purpose Flag  0000 (0)\n+0FF2AA Compression Method    0000 (0) 'Stored'\n+0FF2AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF2B0 CRC                   00000000 (0)\n+0FF2B4 Compressed Size       00000000 (0)\n+0FF2B8 Uncompressed Size     00000000 (0)\n+0FF2BC Filename Length       0038 (56)\n+0FF2BE Extra Length          0009 (9)\n+0FF2C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFF2C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FF2F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FF2FA   Length              0005 (5)\n+0FF2FC   Flags               01 (1) 'Modification'\n+0FF2FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FF301 LOCAL HEADER #390     04034B50 (67324752)\n+0FF305 Extract Zip Spec      14 (20) '2.0'\n+0FF306 Extract OS            00 (0) 'MS-DOS'\n+0FF307 General Purpose Flag  0000 (0)\n+0FF309 Compression Method    0000 (0) 'Stored'\n+0FF30B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF30F CRC                   00000000 (0)\n+0FF313 Compressed Size       00000000 (0)\n+0FF317 Uncompressed Size     00000000 (0)\n+0FF31B Filename Length       006E (110)\n+0FF31D Extra Length          0009 (9)\n+0FF31F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFF31F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FF38D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FF38F   Length              0005 (5)\n+0FF391   Flags               01 (1) 'Modification'\n+0FF392   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FF396 LOCAL HEADER #391     04034B50 (67324752)\n+0FF39A Extract Zip Spec      14 (20) '2.0'\n+0FF39B Extract OS            00 (0) 'MS-DOS'\n+0FF39C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FF39E Compression Method    0000 (0) 'Stored'\n+0FF3A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF3A4 CRC                   00000000 (0)\n+0FF3A8 Compressed Size       00000000 (0)\n+0FF3AC Uncompressed Size     00000000 (0)\n+0FF3B0 Filename Length       0084 (132)\n+0FF3B2 Extra Length          0009 (9)\n+0FF3B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0xFF41D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFF3B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0FF4A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FF4A3   Length              0005 (5)\n-0FF4A5   Flags               01 (1) 'Modification'\n-0FF4A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FF4AA PAYLOAD\n-\n-1046DA DATA DESCRIPTOR       08074B50 (134695760)\n-1046DE CRC                   CB05D09B (3406155931)\n-1046E2 Compressed Size       00005230 (21040)\n-1046E6 Uncompressed Size     00005230 (21040)\n-\n-1046EA LOCAL HEADER #392     04034B50 (67324752)\n-1046EE Extract Zip Spec      14 (20) '2.0'\n-1046EF Extract OS            00 (0) 'MS-DOS'\n-1046F0 General Purpose Flag  0000 (0)\n-1046F2 Compression Method    0000 (0) 'Stored'\n-1046F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1046F8 CRC                   00000000 (0)\n-1046FC Compressed Size       00000000 (0)\n-104700 Uncompressed Size     00000000 (0)\n-104704 Filename Length       0033 (51)\n-104706 Extra Length          0009 (9)\n-104708 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x104708: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10473B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10473D   Length              0005 (5)\n-10473F   Flags               01 (1) 'Modification'\n-104740   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-104744 LOCAL HEADER #393     04034B50 (67324752)\n-104748 Extract Zip Spec      14 (20) '2.0'\n-104749 Extract OS            00 (0) 'MS-DOS'\n-10474A General Purpose Flag  0000 (0)\n-10474C Compression Method    0000 (0) 'Stored'\n-10474E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-104752 CRC                   00000000 (0)\n-104756 Compressed Size       00000000 (0)\n-10475A Uncompressed Size     00000000 (0)\n-10475E Filename Length       003C (60)\n-104760 Extra Length          0009 (9)\n-104762 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x104762: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10479E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1047A0   Length              0005 (5)\n-1047A2   Flags               01 (1) 'Modification'\n-1047A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1047A7 LOCAL HEADER #394     04034B50 (67324752)\n-1047AB Extract Zip Spec      14 (20) '2.0'\n-1047AC Extract OS            00 (0) 'MS-DOS'\n-1047AD General Purpose Flag  0000 (0)\n-1047AF Compression Method    0000 (0) 'Stored'\n-1047B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1047B5 CRC                   00000000 (0)\n-1047B9 Compressed Size       00000000 (0)\n-1047BD Uncompressed Size     00000000 (0)\n-1047C1 Filename Length       0072 (114)\n-1047C3 Extra Length          0009 (9)\n-1047C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1047C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-104837 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-104839   Length              0005 (5)\n-10483B   Flags               01 (1) 'Modification'\n-10483C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-104840 LOCAL HEADER #395     04034B50 (67324752)\n-104844 Extract Zip Spec      14 (20) '2.0'\n-104845 Extract OS            00 (0) 'MS-DOS'\n-104846 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-104848 Compression Method    0000 (0) 'Stored'\n-10484A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10484E CRC                   00000000 (0)\n-104852 Compressed Size       00000000 (0)\n-104856 Uncompressed Size     00000000 (0)\n-10485A Filename Length       0088 (136)\n-10485C Extra Length          0009 (9)\n-10485E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0FF438 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FF43A   Length              0005 (5)\n+0FF43C   Flags               01 (1) 'Modification'\n+0FF43D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FF441 PAYLOAD\n+\n+104671 DATA DESCRIPTOR       08074B50 (134695760)\n+104675 CRC                   CB05D09B (3406155931)\n+104679 Compressed Size       00005230 (21040)\n+10467D Uncompressed Size     00005230 (21040)\n+\n+104681 LOCAL HEADER #392     04034B50 (67324752)\n+104685 Extract Zip Spec      14 (20) '2.0'\n+104686 Extract OS            00 (0) 'MS-DOS'\n+104687 General Purpose Flag  0000 (0)\n+104689 Compression Method    0000 (0) 'Stored'\n+10468B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10468F CRC                   00000000 (0)\n+104693 Compressed Size       00000000 (0)\n+104697 Uncompressed Size     00000000 (0)\n+10469B Filename Length       0033 (51)\n+10469D Extra Length          0009 (9)\n+10469F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10469F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1046D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1046D4   Length              0005 (5)\n+1046D6   Flags               01 (1) 'Modification'\n+1046D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1046DB LOCAL HEADER #393     04034B50 (67324752)\n+1046DF Extract Zip Spec      14 (20) '2.0'\n+1046E0 Extract OS            00 (0) 'MS-DOS'\n+1046E1 General Purpose Flag  0000 (0)\n+1046E3 Compression Method    0000 (0) 'Stored'\n+1046E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1046E9 CRC                   00000000 (0)\n+1046ED Compressed Size       00000000 (0)\n+1046F1 Uncompressed Size     00000000 (0)\n+1046F5 Filename Length       003C (60)\n+1046F7 Extra Length          0009 (9)\n+1046F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1046F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+104735 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+104737   Length              0005 (5)\n+104739   Flags               01 (1) 'Modification'\n+10473A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10473E LOCAL HEADER #394     04034B50 (67324752)\n+104742 Extract Zip Spec      14 (20) '2.0'\n+104743 Extract OS            00 (0) 'MS-DOS'\n+104744 General Purpose Flag  0000 (0)\n+104746 Compression Method    0000 (0) 'Stored'\n+104748 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10474C CRC                   00000000 (0)\n+104750 Compressed Size       00000000 (0)\n+104754 Uncompressed Size     00000000 (0)\n+104758 Filename Length       0072 (114)\n+10475A Extra Length          0009 (9)\n+10475C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10475C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1047CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1047D0   Length              0005 (5)\n+1047D2   Flags               01 (1) 'Modification'\n+1047D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1047D7 LOCAL HEADER #395     04034B50 (67324752)\n+1047DB Extract Zip Spec      14 (20) '2.0'\n+1047DC Extract OS            00 (0) 'MS-DOS'\n+1047DD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1047DF Compression Method    0000 (0) 'Stored'\n+1047E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1047E5 CRC                   00000000 (0)\n+1047E9 Compressed Size       00000000 (0)\n+1047ED Uncompressed Size     00000000 (0)\n+1047F1 Filename Length       0088 (136)\n+1047F3 Extra Length          0009 (9)\n+1047F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x10485E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1047F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1048E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1048E8   Length              0005 (5)\n-1048EA   Flags               01 (1) 'Modification'\n-1048EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1048EF PAYLOAD\n-\n-1051F3 DATA DESCRIPTOR       08074B50 (134695760)\n-1051F7 CRC                   17E2323C (400699964)\n-1051FB Compressed Size       00000904 (2308)\n-1051FF Uncompressed Size     00000904 (2308)\n-\n-105203 LOCAL HEADER #396     04034B50 (67324752)\n-105207 Extract Zip Spec      14 (20) '2.0'\n-105208 Extract OS            00 (0) 'MS-DOS'\n-105209 General Purpose Flag  0000 (0)\n-10520B Compression Method    0000 (0) 'Stored'\n-10520D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-105211 CRC                   00000000 (0)\n-105215 Compressed Size       00000000 (0)\n-105219 Uncompressed Size     00000000 (0)\n-10521D Filename Length       0030 (48)\n-10521F Extra Length          0009 (9)\n-105221 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x105221: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-105251 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-105253   Length              0005 (5)\n-105255   Flags               01 (1) 'Modification'\n-105256   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10525A LOCAL HEADER #397     04034B50 (67324752)\n-10525E Extract Zip Spec      14 (20) '2.0'\n-10525F Extract OS            00 (0) 'MS-DOS'\n-105260 General Purpose Flag  0000 (0)\n-105262 Compression Method    0000 (0) 'Stored'\n-105264 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-105268 CRC                   00000000 (0)\n-10526C Compressed Size       00000000 (0)\n-105270 Uncompressed Size     00000000 (0)\n-105274 Filename Length       0039 (57)\n-105276 Extra Length          0009 (9)\n-105278 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x105278: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1052B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1052B3   Length              0005 (5)\n-1052B5   Flags               01 (1) 'Modification'\n-1052B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1052BA LOCAL HEADER #398     04034B50 (67324752)\n-1052BE Extract Zip Spec      14 (20) '2.0'\n-1052BF Extract OS            00 (0) 'MS-DOS'\n-1052C0 General Purpose Flag  0000 (0)\n-1052C2 Compression Method    0000 (0) 'Stored'\n-1052C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1052C8 CRC                   00000000 (0)\n-1052CC Compressed Size       00000000 (0)\n-1052D0 Uncompressed Size     00000000 (0)\n-1052D4 Filename Length       007D (125)\n-1052D6 Extra Length          0009 (9)\n-1052D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1052D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-105355 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-105357   Length              0005 (5)\n-105359   Flags               01 (1) 'Modification'\n-10535A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10535E LOCAL HEADER #399     04034B50 (67324752)\n-105362 Extract Zip Spec      14 (20) '2.0'\n-105363 Extract OS            00 (0) 'MS-DOS'\n-105364 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-105366 Compression Method    0000 (0) 'Stored'\n-105368 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10536C CRC                   00000000 (0)\n-105370 Compressed Size       00000000 (0)\n-105374 Uncompressed Size     00000000 (0)\n-105378 Filename Length       0093 (147)\n-10537A Extra Length          0009 (9)\n-10537C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+10487D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10487F   Length              0005 (5)\n+104881   Flags               01 (1) 'Modification'\n+104882   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+104886 PAYLOAD\n+\n+10518A DATA DESCRIPTOR       08074B50 (134695760)\n+10518E CRC                   17E2323C (400699964)\n+105192 Compressed Size       00000904 (2308)\n+105196 Uncompressed Size     00000904 (2308)\n+\n+10519A LOCAL HEADER #396     04034B50 (67324752)\n+10519E Extract Zip Spec      14 (20) '2.0'\n+10519F Extract OS            00 (0) 'MS-DOS'\n+1051A0 General Purpose Flag  0000 (0)\n+1051A2 Compression Method    0000 (0) 'Stored'\n+1051A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1051A8 CRC                   00000000 (0)\n+1051AC Compressed Size       00000000 (0)\n+1051B0 Uncompressed Size     00000000 (0)\n+1051B4 Filename Length       0030 (48)\n+1051B6 Extra Length          0009 (9)\n+1051B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1051B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1051E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1051EA   Length              0005 (5)\n+1051EC   Flags               01 (1) 'Modification'\n+1051ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1051F1 LOCAL HEADER #397     04034B50 (67324752)\n+1051F5 Extract Zip Spec      14 (20) '2.0'\n+1051F6 Extract OS            00 (0) 'MS-DOS'\n+1051F7 General Purpose Flag  0000 (0)\n+1051F9 Compression Method    0000 (0) 'Stored'\n+1051FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1051FF CRC                   00000000 (0)\n+105203 Compressed Size       00000000 (0)\n+105207 Uncompressed Size     00000000 (0)\n+10520B Filename Length       0039 (57)\n+10520D Extra Length          0009 (9)\n+10520F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10520F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+105248 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10524A   Length              0005 (5)\n+10524C   Flags               01 (1) 'Modification'\n+10524D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+105251 LOCAL HEADER #398     04034B50 (67324752)\n+105255 Extract Zip Spec      14 (20) '2.0'\n+105256 Extract OS            00 (0) 'MS-DOS'\n+105257 General Purpose Flag  0000 (0)\n+105259 Compression Method    0000 (0) 'Stored'\n+10525B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10525F CRC                   00000000 (0)\n+105263 Compressed Size       00000000 (0)\n+105267 Uncompressed Size     00000000 (0)\n+10526B Filename Length       007D (125)\n+10526D Extra Length          0009 (9)\n+10526F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10526F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1052EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1052EE   Length              0005 (5)\n+1052F0   Flags               01 (1) 'Modification'\n+1052F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1052F5 LOCAL HEADER #399     04034B50 (67324752)\n+1052F9 Extract Zip Spec      14 (20) '2.0'\n+1052FA Extract OS            00 (0) 'MS-DOS'\n+1052FB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1052FD Compression Method    0000 (0) 'Stored'\n+1052FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+105303 CRC                   00000000 (0)\n+105307 Compressed Size       00000000 (0)\n+10530B Uncompressed Size     00000000 (0)\n+10530F Filename Length       0093 (147)\n+105311 Extra Length          0009 (9)\n+105313 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10537C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x105313: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10540F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-105411   Length              0005 (5)\n-105413   Flags               01 (1) 'Modification'\n-105414   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-105418 PAYLOAD\n-\n-10644E DATA DESCRIPTOR       08074B50 (134695760)\n-106452 CRC                   CC28EBBC (3425233852)\n-106456 Compressed Size       00001036 (4150)\n-10645A Uncompressed Size     00001036 (4150)\n-\n-10645E LOCAL HEADER #400     04034B50 (67324752)\n-106462 Extract Zip Spec      14 (20) '2.0'\n-106463 Extract OS            00 (0) 'MS-DOS'\n-106464 General Purpose Flag  0000 (0)\n-106466 Compression Method    0000 (0) 'Stored'\n-106468 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10646C CRC                   00000000 (0)\n-106470 Compressed Size       00000000 (0)\n-106474 Uncompressed Size     00000000 (0)\n-106478 Filename Length       0031 (49)\n-10647A Extra Length          0009 (9)\n-10647C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10647C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1064AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1064AF   Length              0005 (5)\n-1064B1   Flags               01 (1) 'Modification'\n-1064B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1064B6 LOCAL HEADER #401     04034B50 (67324752)\n-1064BA Extract Zip Spec      14 (20) '2.0'\n-1064BB Extract OS            00 (0) 'MS-DOS'\n-1064BC General Purpose Flag  0000 (0)\n-1064BE Compression Method    0000 (0) 'Stored'\n-1064C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1064C4 CRC                   00000000 (0)\n-1064C8 Compressed Size       00000000 (0)\n-1064CC Uncompressed Size     00000000 (0)\n-1064D0 Filename Length       003A (58)\n-1064D2 Extra Length          0009 (9)\n-1064D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1064D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10650E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106510   Length              0005 (5)\n-106512   Flags               01 (1) 'Modification'\n-106513   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-106517 LOCAL HEADER #402     04034B50 (67324752)\n-10651B Extract Zip Spec      14 (20) '2.0'\n-10651C Extract OS            00 (0) 'MS-DOS'\n-10651D General Purpose Flag  0000 (0)\n-10651F Compression Method    0000 (0) 'Stored'\n-106521 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106525 CRC                   00000000 (0)\n-106529 Compressed Size       00000000 (0)\n-10652D Uncompressed Size     00000000 (0)\n-106531 Filename Length       006E (110)\n-106533 Extra Length          0009 (9)\n-106535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x106535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1065A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1065A5   Length              0005 (5)\n-1065A7   Flags               01 (1) 'Modification'\n-1065A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1065AC LOCAL HEADER #403     04034B50 (67324752)\n-1065B0 Extract Zip Spec      14 (20) '2.0'\n-1065B1 Extract OS            00 (0) 'MS-DOS'\n-1065B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1065B4 Compression Method    0000 (0) 'Stored'\n-1065B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1065BA CRC                   00000000 (0)\n-1065BE Compressed Size       00000000 (0)\n-1065C2 Uncompressed Size     00000000 (0)\n-1065C6 Filename Length       0084 (132)\n-1065C8 Extra Length          0009 (9)\n-1065CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1053A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1053A8   Length              0005 (5)\n+1053AA   Flags               01 (1) 'Modification'\n+1053AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1053AF PAYLOAD\n+\n+1063E5 DATA DESCRIPTOR       08074B50 (134695760)\n+1063E9 CRC                   CC28EBBC (3425233852)\n+1063ED Compressed Size       00001036 (4150)\n+1063F1 Uncompressed Size     00001036 (4150)\n+\n+1063F5 LOCAL HEADER #400     04034B50 (67324752)\n+1063F9 Extract Zip Spec      14 (20) '2.0'\n+1063FA Extract OS            00 (0) 'MS-DOS'\n+1063FB General Purpose Flag  0000 (0)\n+1063FD Compression Method    0000 (0) 'Stored'\n+1063FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+106403 CRC                   00000000 (0)\n+106407 Compressed Size       00000000 (0)\n+10640B Uncompressed Size     00000000 (0)\n+10640F Filename Length       0031 (49)\n+106411 Extra Length          0009 (9)\n+106413 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x106413: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+106444 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+106446   Length              0005 (5)\n+106448   Flags               01 (1) 'Modification'\n+106449   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10644D LOCAL HEADER #401     04034B50 (67324752)\n+106451 Extract Zip Spec      14 (20) '2.0'\n+106452 Extract OS            00 (0) 'MS-DOS'\n+106453 General Purpose Flag  0000 (0)\n+106455 Compression Method    0000 (0) 'Stored'\n+106457 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10645B CRC                   00000000 (0)\n+10645F Compressed Size       00000000 (0)\n+106463 Uncompressed Size     00000000 (0)\n+106467 Filename Length       003A (58)\n+106469 Extra Length          0009 (9)\n+10646B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10646B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1064A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1064A7   Length              0005 (5)\n+1064A9   Flags               01 (1) 'Modification'\n+1064AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1064AE LOCAL HEADER #402     04034B50 (67324752)\n+1064B2 Extract Zip Spec      14 (20) '2.0'\n+1064B3 Extract OS            00 (0) 'MS-DOS'\n+1064B4 General Purpose Flag  0000 (0)\n+1064B6 Compression Method    0000 (0) 'Stored'\n+1064B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1064BC CRC                   00000000 (0)\n+1064C0 Compressed Size       00000000 (0)\n+1064C4 Uncompressed Size     00000000 (0)\n+1064C8 Filename Length       006E (110)\n+1064CA Extra Length          0009 (9)\n+1064CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1064CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10653A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10653C   Length              0005 (5)\n+10653E   Flags               01 (1) 'Modification'\n+10653F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+106543 LOCAL HEADER #403     04034B50 (67324752)\n+106547 Extract Zip Spec      14 (20) '2.0'\n+106548 Extract OS            00 (0) 'MS-DOS'\n+106549 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10654B Compression Method    0000 (0) 'Stored'\n+10654D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+106551 CRC                   00000000 (0)\n+106555 Compressed Size       00000000 (0)\n+106559 Uncompressed Size     00000000 (0)\n+10655D Filename Length       0084 (132)\n+10655F Extra Length          0009 (9)\n+106561 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x1065CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x106561: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10664E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106650   Length              0005 (5)\n-106652   Flags               01 (1) 'Modification'\n-106653   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-106657 PAYLOAD\n-\n-10712B DATA DESCRIPTOR       08074B50 (134695760)\n-10712F CRC                   3FC95820 (1070159904)\n-107133 Compressed Size       00000AD4 (2772)\n-107137 Uncompressed Size     00000AD4 (2772)\n-\n-10713B LOCAL HEADER #404     04034B50 (67324752)\n-10713F Extract Zip Spec      14 (20) '2.0'\n-107140 Extract OS            00 (0) 'MS-DOS'\n-107141 General Purpose Flag  0000 (0)\n-107143 Compression Method    0000 (0) 'Stored'\n-107145 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-107149 CRC                   00000000 (0)\n-10714D Compressed Size       00000000 (0)\n-107151 Uncompressed Size     00000000 (0)\n-107155 Filename Length       0026 (38)\n-107157 Extra Length          0009 (9)\n-107159 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x107159: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10717F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-107181   Length              0005 (5)\n-107183   Flags               01 (1) 'Modification'\n-107184   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-107188 LOCAL HEADER #405     04034B50 (67324752)\n-10718C Extract Zip Spec      14 (20) '2.0'\n-10718D Extract OS            00 (0) 'MS-DOS'\n-10718E General Purpose Flag  0000 (0)\n-107190 Compression Method    0000 (0) 'Stored'\n-107192 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-107196 CRC                   00000000 (0)\n-10719A Compressed Size       00000000 (0)\n-10719E Uncompressed Size     00000000 (0)\n-1071A2 Filename Length       002F (47)\n-1071A4 Extra Length          0009 (9)\n-1071A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1071A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1071D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1071D7   Length              0005 (5)\n-1071D9   Flags               01 (1) 'Modification'\n-1071DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1071DE LOCAL HEADER #406     04034B50 (67324752)\n-1071E2 Extract Zip Spec      14 (20) '2.0'\n-1071E3 Extract OS            00 (0) 'MS-DOS'\n-1071E4 General Purpose Flag  0000 (0)\n-1071E6 Compression Method    0000 (0) 'Stored'\n-1071E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1071EC CRC                   00000000 (0)\n-1071F0 Compressed Size       00000000 (0)\n-1071F4 Uncompressed Size     00000000 (0)\n-1071F8 Filename Length       005D (93)\n-1071FA Extra Length          0009 (9)\n-1071FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1071FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-107259 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10725B   Length              0005 (5)\n-10725D   Flags               01 (1) 'Modification'\n-10725E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-107262 LOCAL HEADER #407     04034B50 (67324752)\n-107266 Extract Zip Spec      14 (20) '2.0'\n-107267 Extract OS            00 (0) 'MS-DOS'\n-107268 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10726A Compression Method    0000 (0) 'Stored'\n-10726C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-107270 CRC                   00000000 (0)\n-107274 Compressed Size       00000000 (0)\n-107278 Uncompressed Size     00000000 (0)\n-10727C Filename Length       0073 (115)\n-10727E Extra Length          0009 (9)\n-107280 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x107280: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1072F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1072F5   Length              0005 (5)\n-1072F7   Flags               01 (1) 'Modification'\n-1072F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1072FC PAYLOAD\n-\n-10802B DATA DESCRIPTOR       08074B50 (134695760)\n-10802F CRC                   41CBDE11 (1103879697)\n-108033 Compressed Size       00000D2F (3375)\n-108037 Uncompressed Size     00000D2F (3375)\n-\n-10803B LOCAL HEADER #408     04034B50 (67324752)\n-10803F Extract Zip Spec      14 (20) '2.0'\n-108040 Extract OS            00 (0) 'MS-DOS'\n-108041 General Purpose Flag  0000 (0)\n-108043 Compression Method    0000 (0) 'Stored'\n-108045 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-108049 CRC                   00000000 (0)\n-10804D Compressed Size       00000000 (0)\n-108051 Uncompressed Size     00000000 (0)\n-108055 Filename Length       0063 (99)\n-108057 Extra Length          0009 (9)\n-108059 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x108059: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1080BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1080BE   Length              0005 (5)\n-1080C0   Flags               01 (1) 'Modification'\n-1080C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1080C5 LOCAL HEADER #409     04034B50 (67324752)\n-1080C9 Extract Zip Spec      14 (20) '2.0'\n-1080CA Extract OS            00 (0) 'MS-DOS'\n-1080CB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1080CD Compression Method    0000 (0) 'Stored'\n-1080CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1080D3 CRC                   00000000 (0)\n-1080D7 Compressed Size       00000000 (0)\n-1080DB Uncompressed Size     00000000 (0)\n-1080DF Filename Length       0079 (121)\n-1080E1 Extra Length          0009 (9)\n-1080E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1080E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10815C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10815E   Length              0005 (5)\n-108160   Flags               01 (1) 'Modification'\n-108161   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-108165 PAYLOAD\n-\n-109DDE DATA DESCRIPTOR       08074B50 (134695760)\n-109DE2 CRC                   1D768ED5 (494309077)\n-109DE6 Compressed Size       00001C79 (7289)\n-109DEA Uncompressed Size     00001C79 (7289)\n-\n-109DEE LOCAL HEADER #410     04034B50 (67324752)\n-109DF2 Extract Zip Spec      14 (20) '2.0'\n-109DF3 Extract OS            00 (0) 'MS-DOS'\n-109DF4 General Purpose Flag  0000 (0)\n-109DF6 Compression Method    0000 (0) 'Stored'\n-109DF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-109DFC CRC                   00000000 (0)\n-109E00 Compressed Size       00000000 (0)\n-109E04 Uncompressed Size     00000000 (0)\n-109E08 Filename Length       002F (47)\n-109E0A Extra Length          0009 (9)\n-109E0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x109E0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-109E3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-109E3D   Length              0005 (5)\n-109E3F   Flags               01 (1) 'Modification'\n-109E40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-109E44 LOCAL HEADER #411     04034B50 (67324752)\n-109E48 Extract Zip Spec      14 (20) '2.0'\n-109E49 Extract OS            00 (0) 'MS-DOS'\n-109E4A General Purpose Flag  0000 (0)\n-109E4C Compression Method    0000 (0) 'Stored'\n-109E4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-109E52 CRC                   00000000 (0)\n-109E56 Compressed Size       00000000 (0)\n-109E5A Uncompressed Size     00000000 (0)\n-109E5E Filename Length       0038 (56)\n-109E60 Extra Length          0009 (9)\n-109E62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x109E62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-109E9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-109E9C   Length              0005 (5)\n-109E9E   Flags               01 (1) 'Modification'\n-109E9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-109EA3 LOCAL HEADER #412     04034B50 (67324752)\n-109EA7 Extract Zip Spec      14 (20) '2.0'\n-109EA8 Extract OS            00 (0) 'MS-DOS'\n-109EA9 General Purpose Flag  0000 (0)\n-109EAB Compression Method    0000 (0) 'Stored'\n-109EAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-109EB1 CRC                   00000000 (0)\n-109EB5 Compressed Size       00000000 (0)\n-109EB9 Uncompressed Size     00000000 (0)\n-109EBD Filename Length       006B (107)\n-109EBF Extra Length          0009 (9)\n-109EC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x109EC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-109F2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-109F2E   Length              0005 (5)\n-109F30   Flags               01 (1) 'Modification'\n-109F31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-109F35 LOCAL HEADER #413     04034B50 (67324752)\n-109F39 Extract Zip Spec      14 (20) '2.0'\n-109F3A Extract OS            00 (0) 'MS-DOS'\n-109F3B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-109F3D Compression Method    0000 (0) 'Stored'\n-109F3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-109F43 CRC                   00000000 (0)\n-109F47 Compressed Size       00000000 (0)\n-109F4B Uncompressed Size     00000000 (0)\n-109F4F Filename Length       0081 (129)\n-109F51 Extra Length          0009 (9)\n-109F53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x109F53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-109FD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-109FD6   Length              0005 (5)\n-109FD8   Flags               01 (1) 'Modification'\n-109FD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-109FDD PAYLOAD\n-\n-10BCF6 DATA DESCRIPTOR       08074B50 (134695760)\n-10BCFA CRC                   7A85C658 (2055587416)\n-10BCFE Compressed Size       00001D19 (7449)\n-10BD02 Uncompressed Size     00001D19 (7449)\n-\n-10BD06 LOCAL HEADER #414     04034B50 (67324752)\n-10BD0A Extract Zip Spec      14 (20) '2.0'\n-10BD0B Extract OS            00 (0) 'MS-DOS'\n-10BD0C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10BD0E Compression Method    0000 (0) 'Stored'\n-10BD10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10BD14 CRC                   00000000 (0)\n-10BD18 Compressed Size       00000000 (0)\n-10BD1C Uncompressed Size     00000000 (0)\n-10BD20 Filename Length       001A (26)\n-10BD22 Extra Length          0009 (9)\n-10BD24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10BD24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10BD3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10BD40   Length              0005 (5)\n-10BD42   Flags               01 (1) 'Modification'\n-10BD43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10BD47 PAYLOAD\n-\n-52D2A6 DATA DESCRIPTOR       08074B50 (134695760)\n-52D2AA CRC                   907F6F99 (2424270745)\n-52D2AE Compressed Size       0042155F (4330847)\n-52D2B2 Uncompressed Size     0042155F (4330847)\n-\n-52D2B6 CENTRAL HEADER #1     02014B50 (33639248)\n-52D2BA Created Zip Spec      14 (20) '2.0'\n-52D2BB Created OS            00 (0) 'MS-DOS'\n-52D2BC Extract Zip Spec      14 (20) '2.0'\n-52D2BD Extract OS            00 (0) 'MS-DOS'\n-52D2BE General Purpose Flag  0000 (0)\n-52D2C0 Compression Method    0000 (0) 'Stored'\n-52D2C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D2C6 CRC                   00000000 (0)\n-52D2CA Compressed Size       00000000 (0)\n-52D2CE Uncompressed Size     00000000 (0)\n-52D2D2 Filename Length       0009 (9)\n-52D2D4 Extra Length          0009 (9)\n-52D2D6 Comment Length        0000 (0)\n-52D2D8 Disk Start            0000 (0)\n-52D2DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D2DC Ext File Attributes   00000000 (0)\n-52D2E0 Local Header Offset   00000000 (0)\n-52D2E4 Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D2E4: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-52D2ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D2EF   Length              0005 (5)\n-52D2F1   Flags               01 (1) 'Modification'\n-52D2F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D2F6 CENTRAL HEADER #2     02014B50 (33639248)\n-52D2FA Created Zip Spec      14 (20) '2.0'\n-52D2FB Created OS            00 (0) 'MS-DOS'\n-52D2FC Extract Zip Spec      14 (20) '2.0'\n-52D2FD Extract OS            00 (0) 'MS-DOS'\n-52D2FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D300 Compression Method    0000 (0) 'Stored'\n-52D302 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D306 CRC                   C348FE22 (3276340770)\n-52D30A Compressed Size       0000B81E (47134)\n-52D30E Uncompressed Size     0000B81E (47134)\n-52D312 Filename Length       0015 (21)\n-52D314 Extra Length          0009 (9)\n-52D316 Comment Length        0000 (0)\n-52D318 Disk Start            0000 (0)\n-52D31A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D31C Ext File Attributes   00000000 (0)\n-52D320 Local Header Offset   00000030 (48)\n-52D324 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D324: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D339 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D33B   Length              0005 (5)\n-52D33D   Flags               01 (1) 'Modification'\n-52D33E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D342 CENTRAL HEADER #3     02014B50 (33639248)\n-52D346 Created Zip Spec      14 (20) '2.0'\n-52D347 Created OS            00 (0) 'MS-DOS'\n-52D348 Extract Zip Spec      14 (20) '2.0'\n-52D349 Extract OS            00 (0) 'MS-DOS'\n-52D34A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D34C Compression Method    0000 (0) 'Stored'\n-52D34E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D352 CRC                   86E2B4B4 (2263004340)\n-52D356 Compressed Size       00002C5E (11358)\n-52D35A Uncompressed Size     00002C5E (11358)\n-52D35E Filename Length       0010 (16)\n-52D360 Extra Length          0009 (9)\n-52D362 Comment Length        0000 (0)\n-52D364 Disk Start            0000 (0)\n-52D366 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D368 Ext File Attributes   00000000 (0)\n-52D36C Local Header Offset   0000B89A (47258)\n-52D370 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D370: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D380 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D382   Length              0005 (5)\n-52D384   Flags               01 (1) 'Modification'\n-52D385   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D389 CENTRAL HEADER #4     02014B50 (33639248)\n-52D38D Created Zip Spec      14 (20) '2.0'\n-52D38E Created OS            00 (0) 'MS-DOS'\n-52D38F Extract Zip Spec      14 (20) '2.0'\n-52D390 Extract OS            00 (0) 'MS-DOS'\n-52D391 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D393 Compression Method    0000 (0) 'Stored'\n-52D395 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D399 CRC                   CF300E2D (3476033069)\n-52D39D Compressed Size       00000107 (263)\n-52D3A1 Uncompressed Size     00000107 (263)\n-52D3A5 Filename Length       0014 (20)\n-52D3A7 Extra Length          0009 (9)\n-52D3A9 Comment Length        0000 (0)\n-52D3AB Disk Start            0000 (0)\n-52D3AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D3AF Ext File Attributes   00000000 (0)\n-52D3B3 Local Header Offset   0000E53F (58687)\n-52D3B7 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D3B7: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D3CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D3CD   Length              0005 (5)\n-52D3CF   Flags               01 (1) 'Modification'\n-52D3D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D3D4 CENTRAL HEADER #5     02014B50 (33639248)\n-52D3D8 Created Zip Spec      14 (20) '2.0'\n-52D3D9 Created OS            00 (0) 'MS-DOS'\n-52D3DA Extract Zip Spec      14 (20) '2.0'\n-52D3DB Extract OS            00 (0) 'MS-DOS'\n-52D3DC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D3DE Compression Method    0000 (0) 'Stored'\n-52D3E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D3E4 CRC                   91A82808 (2443716616)\n-52D3E8 Compressed Size       000000A0 (160)\n-52D3EC Uncompressed Size     000000A0 (160)\n-52D3F0 Filename Length       000F (15)\n-52D3F2 Extra Length          0009 (9)\n-52D3F4 Comment Length        0000 (0)\n-52D3F6 Disk Start            0000 (0)\n-52D3F8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D3FA Ext File Attributes   00000000 (0)\n-52D3FE Local Header Offset   0000E691 (59025)\n-52D402 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D402: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D411 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D413   Length              0005 (5)\n-52D415   Flags               01 (1) 'Modification'\n-52D416   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D41A CENTRAL HEADER #6     02014B50 (33639248)\n-52D41E Created Zip Spec      14 (20) '2.0'\n-52D41F Created OS            00 (0) 'MS-DOS'\n-52D420 Extract Zip Spec      14 (20) '2.0'\n-52D421 Extract OS            00 (0) 'MS-DOS'\n-52D422 General Purpose Flag  0000 (0)\n-52D424 Compression Method    0000 (0) 'Stored'\n-52D426 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D42A CRC                   00000000 (0)\n-52D42E Compressed Size       00000000 (0)\n-52D432 Uncompressed Size     00000000 (0)\n-52D436 Filename Length       000F (15)\n-52D438 Extra Length          0009 (9)\n-52D43A Comment Length        0000 (0)\n-52D43C Disk Start            0000 (0)\n-52D43E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D440 Ext File Attributes   00000000 (0)\n-52D444 Local Header Offset   0000E777 (59255)\n-52D448 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D448: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D457 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D459   Length              0005 (5)\n-52D45B   Flags               01 (1) 'Modification'\n-52D45C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D460 CENTRAL HEADER #7     02014B50 (33639248)\n-52D464 Created Zip Spec      14 (20) '2.0'\n-52D465 Created OS            00 (0) 'MS-DOS'\n-52D466 Extract Zip Spec      14 (20) '2.0'\n-52D467 Extract OS            00 (0) 'MS-DOS'\n-52D468 General Purpose Flag  0000 (0)\n-52D46A Compression Method    0000 (0) 'Stored'\n-52D46C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D470 CRC                   00000000 (0)\n-52D474 Compressed Size       00000000 (0)\n-52D478 Uncompressed Size     00000000 (0)\n-52D47C Filename Length       001F (31)\n-52D47E Extra Length          0009 (9)\n-52D480 Comment Length        0000 (0)\n-52D482 Disk Start            0000 (0)\n-52D484 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D486 Ext File Attributes   00000000 (0)\n-52D48A Local Header Offset   0000E7AD (59309)\n-52D48E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D48E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D4AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D4AF   Length              0005 (5)\n-52D4B1   Flags               01 (1) 'Modification'\n-52D4B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D4B6 CENTRAL HEADER #8     02014B50 (33639248)\n-52D4BA Created Zip Spec      14 (20) '2.0'\n-52D4BB Created OS            00 (0) 'MS-DOS'\n-52D4BC Extract Zip Spec      14 (20) '2.0'\n-52D4BD Extract OS            00 (0) 'MS-DOS'\n-52D4BE General Purpose Flag  0000 (0)\n-52D4C0 Compression Method    0000 (0) 'Stored'\n-52D4C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D4C6 CRC                   00000000 (0)\n-52D4CA Compressed Size       00000000 (0)\n-52D4CE Uncompressed Size     00000000 (0)\n-52D4D2 Filename Length       0035 (53)\n-52D4D4 Extra Length          0009 (9)\n-52D4D6 Comment Length        0000 (0)\n-52D4D8 Disk Start            0000 (0)\n-52D4DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D4DC Ext File Attributes   00000000 (0)\n-52D4E0 Local Header Offset   0000E7F3 (59379)\n-52D4E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D4E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D519 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D51B   Length              0005 (5)\n-52D51D   Flags               01 (1) 'Modification'\n-52D51E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D522 CENTRAL HEADER #9     02014B50 (33639248)\n-52D526 Created Zip Spec      14 (20) '2.0'\n-52D527 Created OS            00 (0) 'MS-DOS'\n-52D528 Extract Zip Spec      14 (20) '2.0'\n-52D529 Extract OS            00 (0) 'MS-DOS'\n-52D52A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D52C Compression Method    0000 (0) 'Stored'\n-52D52E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D532 CRC                   00000000 (0)\n-52D536 Compressed Size       00000000 (0)\n-52D53A Uncompressed Size     00000000 (0)\n-52D53E Filename Length       0043 (67)\n-52D540 Extra Length          0009 (9)\n-52D542 Comment Length        0000 (0)\n-52D544 Disk Start            0000 (0)\n-52D546 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D548 Ext File Attributes   00000000 (0)\n-52D54C Local Header Offset   0000E84F (59471)\n-52D550 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D550: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D593 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D595   Length              0005 (5)\n-52D597   Flags               01 (1) 'Modification'\n-52D598   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D59C CENTRAL HEADER #10    02014B50 (33639248)\n-52D5A0 Created Zip Spec      14 (20) '2.0'\n-52D5A1 Created OS            00 (0) 'MS-DOS'\n-52D5A2 Extract Zip Spec      14 (20) '2.0'\n-52D5A3 Extract OS            00 (0) 'MS-DOS'\n-52D5A4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D5A6 Compression Method    0000 (0) 'Stored'\n-52D5A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D5AC CRC                   E19FACFF (3785338111)\n-52D5B0 Compressed Size       00001EAA (7850)\n-52D5B4 Uncompressed Size     00001EAA (7850)\n-52D5B8 Filename Length       003C (60)\n-52D5BA Extra Length          0009 (9)\n-52D5BC Comment Length        0000 (0)\n-52D5BE Disk Start            0000 (0)\n-52D5C0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D5C2 Ext File Attributes   00000000 (0)\n-52D5C6 Local Header Offset   0000E8C9 (59593)\n-52D5CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D5CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D606 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D608   Length              0005 (5)\n-52D60A   Flags               01 (1) 'Modification'\n-52D60B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D60F CENTRAL HEADER #11    02014B50 (33639248)\n-52D613 Created Zip Spec      14 (20) '2.0'\n-52D614 Created OS            00 (0) 'MS-DOS'\n-52D615 Extract Zip Spec      14 (20) '2.0'\n-52D616 Extract OS            00 (0) 'MS-DOS'\n-52D617 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D619 Compression Method    0000 (0) 'Stored'\n-52D61B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D61F CRC                   091B3793 (152778643)\n-52D623 Compressed Size       0000050D (1293)\n-52D627 Uncompressed Size     0000050D (1293)\n-52D62B Filename Length       0010 (16)\n-52D62D Extra Length          0009 (9)\n-52D62F Comment Length        0000 (0)\n-52D631 Disk Start            0000 (0)\n-52D633 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D635 Ext File Attributes   00000000 (0)\n-52D639 Local Header Offset   000107E6 (67558)\n-52D63D Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D63D: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D64D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D64F   Length              0005 (5)\n-52D651   Flags               01 (1) 'Modification'\n-52D652   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D656 CENTRAL HEADER #12    02014B50 (33639248)\n-52D65A Created Zip Spec      14 (20) '2.0'\n-52D65B Created OS            00 (0) 'MS-DOS'\n-52D65C Extract Zip Spec      14 (20) '2.0'\n-52D65D Extract OS            00 (0) 'MS-DOS'\n-52D65E General Purpose Flag  0000 (0)\n-52D660 Compression Method    0000 (0) 'Stored'\n-52D662 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D666 CRC                   00000000 (0)\n-52D66A Compressed Size       00000000 (0)\n-52D66E Uncompressed Size     00000000 (0)\n-52D672 Filename Length       0005 (5)\n-52D674 Extra Length          0009 (9)\n-52D676 Comment Length        0000 (0)\n-52D678 Disk Start            0000 (0)\n-52D67A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D67C Ext File Attributes   00000000 (0)\n-52D680 Local Header Offset   00010D3A (68922)\n-52D684 Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x52D684: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-52D689 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D68B   Length              0005 (5)\n-52D68D   Flags               01 (1) 'Modification'\n-52D68E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D692 CENTRAL HEADER #13    02014B50 (33639248)\n-52D696 Created Zip Spec      14 (20) '2.0'\n-52D697 Created OS            00 (0) 'MS-DOS'\n-52D698 Extract Zip Spec      14 (20) '2.0'\n-52D699 Extract OS            00 (0) 'MS-DOS'\n-52D69A General Purpose Flag  0000 (0)\n-52D69C Compression Method    0000 (0) 'Stored'\n-52D69E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D6A2 CRC                   00000000 (0)\n-52D6A6 Compressed Size       00000000 (0)\n-52D6AA Uncompressed Size     00000000 (0)\n-52D6AE Filename Length       0015 (21)\n-52D6B0 Extra Length          0009 (9)\n-52D6B2 Comment Length        0000 (0)\n-52D6B4 Disk Start            0000 (0)\n-52D6B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D6B8 Ext File Attributes   00000000 (0)\n-52D6BC Local Header Offset   00010D66 (68966)\n-52D6C0 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D6C0: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D6D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D6D7   Length              0005 (5)\n-52D6D9   Flags               01 (1) 'Modification'\n-52D6DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D6DE CENTRAL HEADER #14    02014B50 (33639248)\n-52D6E2 Created Zip Spec      14 (20) '2.0'\n-52D6E3 Created OS            00 (0) 'MS-DOS'\n-52D6E4 Extract Zip Spec      14 (20) '2.0'\n-52D6E5 Extract OS            00 (0) 'MS-DOS'\n-52D6E6 General Purpose Flag  0000 (0)\n-52D6E8 Compression Method    0000 (0) 'Stored'\n-52D6EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D6EE CRC                   00000000 (0)\n-52D6F2 Compressed Size       00000000 (0)\n-52D6F6 Uncompressed Size     00000000 (0)\n-52D6FA Filename Length       0027 (39)\n-52D6FC Extra Length          0009 (9)\n-52D6FE Comment Length        0000 (0)\n-52D700 Disk Start            0000 (0)\n-52D702 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D704 Ext File Attributes   00000000 (0)\n-52D708 Local Header Offset   00010DA2 (69026)\n-52D70C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D70C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D733 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D735   Length              0005 (5)\n-52D737   Flags               01 (1) 'Modification'\n-52D738   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D73C CENTRAL HEADER #15    02014B50 (33639248)\n-52D740 Created Zip Spec      14 (20) '2.0'\n-52D741 Created OS            00 (0) 'MS-DOS'\n-52D742 Extract Zip Spec      14 (20) '2.0'\n-52D743 Extract OS            00 (0) 'MS-DOS'\n-52D744 General Purpose Flag  0000 (0)\n-52D746 Compression Method    0000 (0) 'Stored'\n-52D748 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D74C CRC                   00000000 (0)\n-52D750 Compressed Size       00000000 (0)\n-52D754 Uncompressed Size     00000000 (0)\n-52D758 Filename Length       0030 (48)\n-52D75A Extra Length          0009 (9)\n-52D75C Comment Length        0000 (0)\n-52D75E Disk Start            0000 (0)\n-52D760 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D762 Ext File Attributes   00000000 (0)\n-52D766 Local Header Offset   00010DF0 (69104)\n-52D76A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D76A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D79A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D79C   Length              0005 (5)\n-52D79E   Flags               01 (1) 'Modification'\n-52D79F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D7A3 CENTRAL HEADER #16    02014B50 (33639248)\n-52D7A7 Created Zip Spec      14 (20) '2.0'\n-52D7A8 Created OS            00 (0) 'MS-DOS'\n-52D7A9 Extract Zip Spec      14 (20) '2.0'\n-52D7AA Extract OS            00 (0) 'MS-DOS'\n-52D7AB General Purpose Flag  0000 (0)\n-52D7AD Compression Method    0000 (0) 'Stored'\n-52D7AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D7B3 CRC                   00000000 (0)\n-52D7B7 Compressed Size       00000000 (0)\n-52D7BB Uncompressed Size     00000000 (0)\n-52D7BF Filename Length       0067 (103)\n-52D7C1 Extra Length          0009 (9)\n-52D7C3 Comment Length        0000 (0)\n-52D7C5 Disk Start            0000 (0)\n-52D7C7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D7C9 Ext File Attributes   00000000 (0)\n-52D7CD Local Header Offset   00010E47 (69191)\n-52D7D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D7D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D838 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D83A   Length              0005 (5)\n-52D83C   Flags               01 (1) 'Modification'\n-52D83D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D841 CENTRAL HEADER #17    02014B50 (33639248)\n-52D845 Created Zip Spec      14 (20) '2.0'\n-52D846 Created OS            00 (0) 'MS-DOS'\n-52D847 Extract Zip Spec      14 (20) '2.0'\n-52D848 Extract OS            00 (0) 'MS-DOS'\n-52D849 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52D84B Compression Method    0000 (0) 'Stored'\n-52D84D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D851 CRC                   9CB4EC6B (2629102699)\n-52D855 Compressed Size       00000AA2 (2722)\n-52D859 Uncompressed Size     00000AA2 (2722)\n-52D85D Filename Length       007D (125)\n-52D85F Extra Length          0009 (9)\n-52D861 Comment Length        0000 (0)\n-52D863 Disk Start            0000 (0)\n-52D865 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D867 Ext File Attributes   00000000 (0)\n-52D86B Local Header Offset   00010ED5 (69333)\n-52D86F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D86F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D8EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D8EE   Length              0005 (5)\n-52D8F0   Flags               01 (1) 'Modification'\n-52D8F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D8F5 CENTRAL HEADER #18    02014B50 (33639248)\n-52D8F9 Created Zip Spec      14 (20) '2.0'\n-52D8FA Created OS            00 (0) 'MS-DOS'\n-52D8FB Extract Zip Spec      14 (20) '2.0'\n-52D8FC Extract OS            00 (0) 'MS-DOS'\n-52D8FD General Purpose Flag  0000 (0)\n-52D8FF Compression Method    0000 (0) 'Stored'\n-52D901 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D905 CRC                   00000000 (0)\n-52D909 Compressed Size       00000000 (0)\n-52D90D Uncompressed Size     00000000 (0)\n-52D911 Filename Length       0023 (35)\n-52D913 Extra Length          0009 (9)\n-52D915 Comment Length        0000 (0)\n-52D917 Disk Start            0000 (0)\n-52D919 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D91B Ext File Attributes   00000000 (0)\n-52D91F Local Header Offset   00011A2B (72235)\n-52D923 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D923: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D946 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D948   Length              0005 (5)\n-52D94A   Flags               01 (1) 'Modification'\n-52D94B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D94F CENTRAL HEADER #19    02014B50 (33639248)\n-52D953 Created Zip Spec      14 (20) '2.0'\n-52D954 Created OS            00 (0) 'MS-DOS'\n-52D955 Extract Zip Spec      14 (20) '2.0'\n-52D956 Extract OS            00 (0) 'MS-DOS'\n-52D957 General Purpose Flag  0000 (0)\n-52D959 Compression Method    0000 (0) 'Stored'\n-52D95B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D95F CRC                   00000000 (0)\n-52D963 Compressed Size       00000000 (0)\n-52D967 Uncompressed Size     00000000 (0)\n-52D96B Filename Length       002C (44)\n-52D96D Extra Length          0009 (9)\n-52D96F Comment Length        0000 (0)\n-52D971 Disk Start            0000 (0)\n-52D973 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D975 Ext File Attributes   00000000 (0)\n-52D979 Local Header Offset   00011A75 (72309)\n-52D97D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D97D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52D9A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52D9AB   Length              0005 (5)\n-52D9AD   Flags               01 (1) 'Modification'\n-52D9AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52D9B2 CENTRAL HEADER #20    02014B50 (33639248)\n-52D9B6 Created Zip Spec      14 (20) '2.0'\n-52D9B7 Created OS            00 (0) 'MS-DOS'\n-52D9B8 Extract Zip Spec      14 (20) '2.0'\n-52D9B9 Extract OS            00 (0) 'MS-DOS'\n-52D9BA General Purpose Flag  0000 (0)\n-52D9BC Compression Method    0000 (0) 'Stored'\n-52D9BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52D9C2 CRC                   00000000 (0)\n-52D9C6 Compressed Size       00000000 (0)\n-52D9CA Uncompressed Size     00000000 (0)\n-52D9CE Filename Length       0058 (88)\n-52D9D0 Extra Length          0009 (9)\n-52D9D2 Comment Length        0000 (0)\n-52D9D4 Disk Start            0000 (0)\n-52D9D6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52D9D8 Ext File Attributes   00000000 (0)\n-52D9DC Local Header Offset   00011AC8 (72392)\n-52D9E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52D9E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DA38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DA3A   Length              0005 (5)\n-52DA3C   Flags               01 (1) 'Modification'\n-52DA3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DA41 CENTRAL HEADER #21    02014B50 (33639248)\n-52DA45 Created Zip Spec      14 (20) '2.0'\n-52DA46 Created OS            00 (0) 'MS-DOS'\n-52DA47 Extract Zip Spec      14 (20) '2.0'\n-52DA48 Extract OS            00 (0) 'MS-DOS'\n-52DA49 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52DA4B Compression Method    0000 (0) 'Stored'\n-52DA4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DA51 CRC                   445AD7B2 (1146804146)\n-52DA55 Compressed Size       00000FBF (4031)\n-52DA59 Uncompressed Size     00000FBF (4031)\n-52DA5D Filename Length       006E (110)\n-52DA5F Extra Length          0009 (9)\n-52DA61 Comment Length        0000 (0)\n-52DA63 Disk Start            0000 (0)\n-52DA65 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DA67 Ext File Attributes   00000000 (0)\n-52DA6B Local Header Offset   00011B47 (72519)\n-52DA6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DA6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DADD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DADF   Length              0005 (5)\n-52DAE1   Flags               01 (1) 'Modification'\n-52DAE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DAE6 CENTRAL HEADER #22    02014B50 (33639248)\n-52DAEA Created Zip Spec      14 (20) '2.0'\n-52DAEB Created OS            00 (0) 'MS-DOS'\n-52DAEC Extract Zip Spec      14 (20) '2.0'\n-52DAED Extract OS            00 (0) 'MS-DOS'\n-52DAEE General Purpose Flag  0000 (0)\n-52DAF0 Compression Method    0000 (0) 'Stored'\n-52DAF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DAF6 CRC                   00000000 (0)\n-52DAFA Compressed Size       00000000 (0)\n-52DAFE Uncompressed Size     00000000 (0)\n-52DB02 Filename Length       0058 (88)\n-52DB04 Extra Length          0009 (9)\n-52DB06 Comment Length        0000 (0)\n-52DB08 Disk Start            0000 (0)\n-52DB0A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DB0C Ext File Attributes   00000000 (0)\n-52DB10 Local Header Offset   00012BAB (76715)\n-52DB14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DB14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DB6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DB6E   Length              0005 (5)\n-52DB70   Flags               01 (1) 'Modification'\n-52DB71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DB75 CENTRAL HEADER #23    02014B50 (33639248)\n-52DB79 Created Zip Spec      14 (20) '2.0'\n-52DB7A Created OS            00 (0) 'MS-DOS'\n-52DB7B Extract Zip Spec      14 (20) '2.0'\n-52DB7C Extract OS            00 (0) 'MS-DOS'\n-52DB7D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52DB7F Compression Method    0000 (0) 'Stored'\n-52DB81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DB85 CRC                   A2A96EA2 (2729012898)\n-52DB89 Compressed Size       000016DE (5854)\n-52DB8D Uncompressed Size     000016DE (5854)\n-52DB91 Filename Length       006E (110)\n-52DB93 Extra Length          0009 (9)\n-52DB95 Comment Length        0000 (0)\n-52DB97 Disk Start            0000 (0)\n-52DB99 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DB9B Ext File Attributes   00000000 (0)\n-52DB9F Local Header Offset   00012C2A (76842)\n-52DBA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DBA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DC11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DC13   Length              0005 (5)\n-52DC15   Flags               01 (1) 'Modification'\n-52DC16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DC1A CENTRAL HEADER #24    02014B50 (33639248)\n-52DC1E Created Zip Spec      14 (20) '2.0'\n-52DC1F Created OS            00 (0) 'MS-DOS'\n-52DC20 Extract Zip Spec      14 (20) '2.0'\n-52DC21 Extract OS            00 (0) 'MS-DOS'\n-52DC22 General Purpose Flag  0000 (0)\n-52DC24 Compression Method    0000 (0) 'Stored'\n-52DC26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DC2A CRC                   00000000 (0)\n-52DC2E Compressed Size       00000000 (0)\n-52DC32 Uncompressed Size     00000000 (0)\n-52DC36 Filename Length       002F (47)\n-52DC38 Extra Length          0009 (9)\n-52DC3A Comment Length        0000 (0)\n-52DC3C Disk Start            0000 (0)\n-52DC3E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DC40 Ext File Attributes   00000000 (0)\n-52DC44 Local Header Offset   000143AD (82861)\n-52DC48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DC48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DC77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DC79   Length              0005 (5)\n-52DC7B   Flags               01 (1) 'Modification'\n-52DC7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DC80 CENTRAL HEADER #25    02014B50 (33639248)\n-52DC84 Created Zip Spec      14 (20) '2.0'\n-52DC85 Created OS            00 (0) 'MS-DOS'\n-52DC86 Extract Zip Spec      14 (20) '2.0'\n-52DC87 Extract OS            00 (0) 'MS-DOS'\n-52DC88 General Purpose Flag  0000 (0)\n-52DC8A Compression Method    0000 (0) 'Stored'\n-52DC8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DC90 CRC                   00000000 (0)\n-52DC94 Compressed Size       00000000 (0)\n-52DC98 Uncompressed Size     00000000 (0)\n-52DC9C Filename Length       0038 (56)\n-52DC9E Extra Length          0009 (9)\n-52DCA0 Comment Length        0000 (0)\n-52DCA2 Disk Start            0000 (0)\n-52DCA4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DCA6 Ext File Attributes   00000000 (0)\n-52DCAA Local Header Offset   00014403 (82947)\n-52DCAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DCAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DCE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DCE8   Length              0005 (5)\n-52DCEA   Flags               01 (1) 'Modification'\n-52DCEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DCEF CENTRAL HEADER #26    02014B50 (33639248)\n-52DCF3 Created Zip Spec      14 (20) '2.0'\n-52DCF4 Created OS            00 (0) 'MS-DOS'\n-52DCF5 Extract Zip Spec      14 (20) '2.0'\n-52DCF6 Extract OS            00 (0) 'MS-DOS'\n-52DCF7 General Purpose Flag  0000 (0)\n-52DCF9 Compression Method    0000 (0) 'Stored'\n-52DCFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DCFF CRC                   00000000 (0)\n-52DD03 Compressed Size       00000000 (0)\n-52DD07 Uncompressed Size     00000000 (0)\n-52DD0B Filename Length       0068 (104)\n-52DD0D Extra Length          0009 (9)\n-52DD0F Comment Length        0000 (0)\n-52DD11 Disk Start            0000 (0)\n-52DD13 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DD15 Ext File Attributes   00000000 (0)\n-52DD19 Local Header Offset   00014462 (83042)\n-52DD1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DD1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DD85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DD87   Length              0005 (5)\n-52DD89   Flags               01 (1) 'Modification'\n-52DD8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DD8E CENTRAL HEADER #27    02014B50 (33639248)\n-52DD92 Created Zip Spec      14 (20) '2.0'\n-52DD93 Created OS            00 (0) 'MS-DOS'\n-52DD94 Extract Zip Spec      14 (20) '2.0'\n-52DD95 Extract OS            00 (0) 'MS-DOS'\n-52DD96 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52DD98 Compression Method    0000 (0) 'Stored'\n-52DD9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DD9E CRC                   7416DF2A (1947655978)\n-52DDA2 Compressed Size       00001512 (5394)\n-52DDA6 Uncompressed Size     00001512 (5394)\n-52DDAA Filename Length       007E (126)\n-52DDAC Extra Length          0009 (9)\n-52DDAE Comment Length        0000 (0)\n-52DDB0 Disk Start            0000 (0)\n-52DDB2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DDB4 Ext File Attributes   00000000 (0)\n-52DDB8 Local Header Offset   000144F1 (83185)\n-52DDBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DDBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DE3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DE3C   Length              0005 (5)\n-52DE3E   Flags               01 (1) 'Modification'\n-52DE3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DE43 CENTRAL HEADER #28    02014B50 (33639248)\n-52DE47 Created Zip Spec      14 (20) '2.0'\n-52DE48 Created OS            00 (0) 'MS-DOS'\n-52DE49 Extract Zip Spec      14 (20) '2.0'\n-52DE4A Extract OS            00 (0) 'MS-DOS'\n-52DE4B General Purpose Flag  0000 (0)\n-52DE4D Compression Method    0000 (0) 'Stored'\n-52DE4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DE53 CRC                   00000000 (0)\n-52DE57 Compressed Size       00000000 (0)\n-52DE5B Uncompressed Size     00000000 (0)\n-52DE5F Filename Length       0022 (34)\n-52DE61 Extra Length          0009 (9)\n-52DE63 Comment Length        0000 (0)\n-52DE65 Disk Start            0000 (0)\n-52DE67 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DE69 Ext File Attributes   00000000 (0)\n-52DE6D Local Header Offset   00015AB8 (88760)\n-52DE71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DE71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DE93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DE95   Length              0005 (5)\n-52DE97   Flags               01 (1) 'Modification'\n-52DE98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DE9C CENTRAL HEADER #29    02014B50 (33639248)\n-52DEA0 Created Zip Spec      14 (20) '2.0'\n-52DEA1 Created OS            00 (0) 'MS-DOS'\n-52DEA2 Extract Zip Spec      14 (20) '2.0'\n-52DEA3 Extract OS            00 (0) 'MS-DOS'\n-52DEA4 General Purpose Flag  0000 (0)\n-52DEA6 Compression Method    0000 (0) 'Stored'\n-52DEA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DEAC CRC                   00000000 (0)\n-52DEB0 Compressed Size       00000000 (0)\n-52DEB4 Uncompressed Size     00000000 (0)\n-52DEB8 Filename Length       002B (43)\n-52DEBA Extra Length          0009 (9)\n-52DEBC Comment Length        0000 (0)\n-52DEBE Disk Start            0000 (0)\n-52DEC0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DEC2 Ext File Attributes   00000000 (0)\n-52DEC6 Local Header Offset   00015B01 (88833)\n-52DECA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DECA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DEF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DEF7   Length              0005 (5)\n-52DEF9   Flags               01 (1) 'Modification'\n-52DEFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DEFE CENTRAL HEADER #30    02014B50 (33639248)\n-52DF02 Created Zip Spec      14 (20) '2.0'\n-52DF03 Created OS            00 (0) 'MS-DOS'\n-52DF04 Extract Zip Spec      14 (20) '2.0'\n-52DF05 Extract OS            00 (0) 'MS-DOS'\n-52DF06 General Purpose Flag  0000 (0)\n-52DF08 Compression Method    0000 (0) 'Stored'\n-52DF0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DF0E CRC                   00000000 (0)\n-52DF12 Compressed Size       00000000 (0)\n-52DF16 Uncompressed Size     00000000 (0)\n-52DF1A Filename Length       006C (108)\n-52DF1C Extra Length          0009 (9)\n-52DF1E Comment Length        0000 (0)\n-52DF20 Disk Start            0000 (0)\n-52DF22 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DF24 Ext File Attributes   00000000 (0)\n-52DF28 Local Header Offset   00015B53 (88915)\n-52DF2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DF2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52DF98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52DF9A   Length              0005 (5)\n-52DF9C   Flags               01 (1) 'Modification'\n-52DF9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52DFA1 CENTRAL HEADER #31    02014B50 (33639248)\n-52DFA5 Created Zip Spec      14 (20) '2.0'\n-52DFA6 Created OS            00 (0) 'MS-DOS'\n-52DFA7 Extract Zip Spec      14 (20) '2.0'\n-52DFA8 Extract OS            00 (0) 'MS-DOS'\n-52DFA9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52DFAB Compression Method    0000 (0) 'Stored'\n-52DFAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52DFB1 CRC                   15D4B854 (366262356)\n-52DFB5 Compressed Size       00000A25 (2597)\n-52DFB9 Uncompressed Size     00000A25 (2597)\n-52DFBD Filename Length       0082 (130)\n-52DFBF Extra Length          0009 (9)\n-52DFC1 Comment Length        0000 (0)\n-52DFC3 Disk Start            0000 (0)\n-52DFC5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52DFC7 Ext File Attributes   00000000 (0)\n-52DFCB Local Header Offset   00015BE6 (89062)\n-52DFCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52DFCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E051 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E053   Length              0005 (5)\n-52E055   Flags               01 (1) 'Modification'\n-52E056   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E05A CENTRAL HEADER #32    02014B50 (33639248)\n-52E05E Created Zip Spec      14 (20) '2.0'\n-52E05F Created OS            00 (0) 'MS-DOS'\n-52E060 Extract Zip Spec      14 (20) '2.0'\n-52E061 Extract OS            00 (0) 'MS-DOS'\n-52E062 General Purpose Flag  0000 (0)\n-52E064 Compression Method    0000 (0) 'Stored'\n-52E066 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E06A CRC                   00000000 (0)\n-52E06E Compressed Size       00000000 (0)\n-52E072 Uncompressed Size     00000000 (0)\n-52E076 Filename Length       0065 (101)\n-52E078 Extra Length          0009 (9)\n-52E07A Comment Length        0000 (0)\n-52E07C Disk Start            0000 (0)\n-52E07E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E080 Ext File Attributes   00000000 (0)\n-52E084 Local Header Offset   000166C4 (91844)\n-52E088 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E088: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E0ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E0EF   Length              0005 (5)\n-52E0F1   Flags               01 (1) 'Modification'\n-52E0F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E0F6 CENTRAL HEADER #33    02014B50 (33639248)\n-52E0FA Created Zip Spec      14 (20) '2.0'\n-52E0FB Created OS            00 (0) 'MS-DOS'\n-52E0FC Extract Zip Spec      14 (20) '2.0'\n-52E0FD Extract OS            00 (0) 'MS-DOS'\n-52E0FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52E100 Compression Method    0000 (0) 'Stored'\n-52E102 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E106 CRC                   826E1CC4 (2188254404)\n-52E10A Compressed Size       00002F90 (12176)\n-52E10E Uncompressed Size     00002F90 (12176)\n-52E112 Filename Length       007B (123)\n-52E114 Extra Length          0009 (9)\n-52E116 Comment Length        0000 (0)\n-52E118 Disk Start            0000 (0)\n-52E11A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E11C Ext File Attributes   00000000 (0)\n-52E120 Local Header Offset   00016750 (91984)\n-52E124 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E124: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E19F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E1A1   Length              0005 (5)\n-52E1A3   Flags               01 (1) 'Modification'\n-52E1A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E1A8 CENTRAL HEADER #34    02014B50 (33639248)\n-52E1AC Created Zip Spec      14 (20) '2.0'\n-52E1AD Created OS            00 (0) 'MS-DOS'\n-52E1AE Extract Zip Spec      14 (20) '2.0'\n-52E1AF Extract OS            00 (0) 'MS-DOS'\n-52E1B0 General Purpose Flag  0000 (0)\n-52E1B2 Compression Method    0000 (0) 'Stored'\n-52E1B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E1B8 CRC                   00000000 (0)\n-52E1BC Compressed Size       00000000 (0)\n-52E1C0 Uncompressed Size     00000000 (0)\n-52E1C4 Filename Length       006E (110)\n-52E1C6 Extra Length          0009 (9)\n-52E1C8 Comment Length        0000 (0)\n-52E1CA Disk Start            0000 (0)\n-52E1CC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E1CE Ext File Attributes   00000000 (0)\n-52E1D2 Local Header Offset   00019792 (104338)\n-52E1D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E1D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E244 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E246   Length              0005 (5)\n-52E248   Flags               01 (1) 'Modification'\n-52E249   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E24D CENTRAL HEADER #35    02014B50 (33639248)\n-52E251 Created Zip Spec      14 (20) '2.0'\n-52E252 Created OS            00 (0) 'MS-DOS'\n-52E253 Extract Zip Spec      14 (20) '2.0'\n-52E254 Extract OS            00 (0) 'MS-DOS'\n-52E255 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52E257 Compression Method    0000 (0) 'Stored'\n-52E259 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E25D CRC                   1BE163AC (467755948)\n-52E261 Compressed Size       00000967 (2407)\n-52E265 Uncompressed Size     00000967 (2407)\n-52E269 Filename Length       0084 (132)\n-52E26B Extra Length          0009 (9)\n-52E26D Comment Length        0000 (0)\n-52E26F Disk Start            0000 (0)\n-52E271 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E273 Ext File Attributes   00000000 (0)\n-52E277 Local Header Offset   00019827 (104487)\n-52E27B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1065E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1065E7   Length              0005 (5)\n+1065E9   Flags               01 (1) 'Modification'\n+1065EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1065EE PAYLOAD\n+\n+1070C2 DATA DESCRIPTOR       08074B50 (134695760)\n+1070C6 CRC                   3FC95820 (1070159904)\n+1070CA Compressed Size       00000AD4 (2772)\n+1070CE Uncompressed Size     00000AD4 (2772)\n+\n+1070D2 LOCAL HEADER #404     04034B50 (67324752)\n+1070D6 Extract Zip Spec      14 (20) '2.0'\n+1070D7 Extract OS            00 (0) 'MS-DOS'\n+1070D8 General Purpose Flag  0000 (0)\n+1070DA Compression Method    0000 (0) 'Stored'\n+1070DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1070E0 CRC                   00000000 (0)\n+1070E4 Compressed Size       00000000 (0)\n+1070E8 Uncompressed Size     00000000 (0)\n+1070EC Filename Length       0026 (38)\n+1070EE Extra Length          0009 (9)\n+1070F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1070F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+107116 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+107118   Length              0005 (5)\n+10711A   Flags               01 (1) 'Modification'\n+10711B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10711F LOCAL HEADER #405     04034B50 (67324752)\n+107123 Extract Zip Spec      14 (20) '2.0'\n+107124 Extract OS            00 (0) 'MS-DOS'\n+107125 General Purpose Flag  0000 (0)\n+107127 Compression Method    0000 (0) 'Stored'\n+107129 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10712D CRC                   00000000 (0)\n+107131 Compressed Size       00000000 (0)\n+107135 Uncompressed Size     00000000 (0)\n+107139 Filename Length       002F (47)\n+10713B Extra Length          0009 (9)\n+10713D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10713D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10716C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10716E   Length              0005 (5)\n+107170   Flags               01 (1) 'Modification'\n+107171   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+107175 LOCAL HEADER #406     04034B50 (67324752)\n+107179 Extract Zip Spec      14 (20) '2.0'\n+10717A Extract OS            00 (0) 'MS-DOS'\n+10717B General Purpose Flag  0000 (0)\n+10717D Compression Method    0000 (0) 'Stored'\n+10717F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+107183 CRC                   00000000 (0)\n+107187 Compressed Size       00000000 (0)\n+10718B Uncompressed Size     00000000 (0)\n+10718F Filename Length       005D (93)\n+107191 Extra Length          0009 (9)\n+107193 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x107193: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1071F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1071F2   Length              0005 (5)\n+1071F4   Flags               01 (1) 'Modification'\n+1071F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1071F9 LOCAL HEADER #407     04034B50 (67324752)\n+1071FD Extract Zip Spec      14 (20) '2.0'\n+1071FE Extract OS            00 (0) 'MS-DOS'\n+1071FF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+107201 Compression Method    0000 (0) 'Stored'\n+107203 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+107207 CRC                   00000000 (0)\n+10720B Compressed Size       00000000 (0)\n+10720F Uncompressed Size     00000000 (0)\n+107213 Filename Length       0073 (115)\n+107215 Extra Length          0009 (9)\n+107217 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x107217: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10728A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10728C   Length              0005 (5)\n+10728E   Flags               01 (1) 'Modification'\n+10728F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+107293 PAYLOAD\n+\n+107FC2 DATA DESCRIPTOR       08074B50 (134695760)\n+107FC6 CRC                   41CBDE11 (1103879697)\n+107FCA Compressed Size       00000D2F (3375)\n+107FCE Uncompressed Size     00000D2F (3375)\n+\n+107FD2 LOCAL HEADER #408     04034B50 (67324752)\n+107FD6 Extract Zip Spec      14 (20) '2.0'\n+107FD7 Extract OS            00 (0) 'MS-DOS'\n+107FD8 General Purpose Flag  0000 (0)\n+107FDA Compression Method    0000 (0) 'Stored'\n+107FDC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+107FE0 CRC                   00000000 (0)\n+107FE4 Compressed Size       00000000 (0)\n+107FE8 Uncompressed Size     00000000 (0)\n+107FEC Filename Length       0063 (99)\n+107FEE Extra Length          0009 (9)\n+107FF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x107FF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+108053 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+108055   Length              0005 (5)\n+108057   Flags               01 (1) 'Modification'\n+108058   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10805C LOCAL HEADER #409     04034B50 (67324752)\n+108060 Extract Zip Spec      14 (20) '2.0'\n+108061 Extract OS            00 (0) 'MS-DOS'\n+108062 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+108064 Compression Method    0000 (0) 'Stored'\n+108066 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10806A CRC                   00000000 (0)\n+10806E Compressed Size       00000000 (0)\n+108072 Uncompressed Size     00000000 (0)\n+108076 Filename Length       0079 (121)\n+108078 Extra Length          0009 (9)\n+10807A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10807A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1080F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1080F5   Length              0005 (5)\n+1080F7   Flags               01 (1) 'Modification'\n+1080F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1080FC PAYLOAD\n+\n+109D75 DATA DESCRIPTOR       08074B50 (134695760)\n+109D79 CRC                   1D768ED5 (494309077)\n+109D7D Compressed Size       00001C79 (7289)\n+109D81 Uncompressed Size     00001C79 (7289)\n+\n+109D85 LOCAL HEADER #410     04034B50 (67324752)\n+109D89 Extract Zip Spec      14 (20) '2.0'\n+109D8A Extract OS            00 (0) 'MS-DOS'\n+109D8B General Purpose Flag  0000 (0)\n+109D8D Compression Method    0000 (0) 'Stored'\n+109D8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+109D93 CRC                   00000000 (0)\n+109D97 Compressed Size       00000000 (0)\n+109D9B Uncompressed Size     00000000 (0)\n+109D9F Filename Length       002F (47)\n+109DA1 Extra Length          0009 (9)\n+109DA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x109DA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+109DD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+109DD4   Length              0005 (5)\n+109DD6   Flags               01 (1) 'Modification'\n+109DD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+109DDB LOCAL HEADER #411     04034B50 (67324752)\n+109DDF Extract Zip Spec      14 (20) '2.0'\n+109DE0 Extract OS            00 (0) 'MS-DOS'\n+109DE1 General Purpose Flag  0000 (0)\n+109DE3 Compression Method    0000 (0) 'Stored'\n+109DE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+109DE9 CRC                   00000000 (0)\n+109DED Compressed Size       00000000 (0)\n+109DF1 Uncompressed Size     00000000 (0)\n+109DF5 Filename Length       0038 (56)\n+109DF7 Extra Length          0009 (9)\n+109DF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x109DF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+109E31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+109E33   Length              0005 (5)\n+109E35   Flags               01 (1) 'Modification'\n+109E36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+109E3A LOCAL HEADER #412     04034B50 (67324752)\n+109E3E Extract Zip Spec      14 (20) '2.0'\n+109E3F Extract OS            00 (0) 'MS-DOS'\n+109E40 General Purpose Flag  0000 (0)\n+109E42 Compression Method    0000 (0) 'Stored'\n+109E44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+109E48 CRC                   00000000 (0)\n+109E4C Compressed Size       00000000 (0)\n+109E50 Uncompressed Size     00000000 (0)\n+109E54 Filename Length       006B (107)\n+109E56 Extra Length          0009 (9)\n+109E58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x109E58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+109EC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+109EC5   Length              0005 (5)\n+109EC7   Flags               01 (1) 'Modification'\n+109EC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+109ECC LOCAL HEADER #413     04034B50 (67324752)\n+109ED0 Extract Zip Spec      14 (20) '2.0'\n+109ED1 Extract OS            00 (0) 'MS-DOS'\n+109ED2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+109ED4 Compression Method    0000 (0) 'Stored'\n+109ED6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+109EDA CRC                   00000000 (0)\n+109EDE Compressed Size       00000000 (0)\n+109EE2 Uncompressed Size     00000000 (0)\n+109EE6 Filename Length       0081 (129)\n+109EE8 Extra Length          0009 (9)\n+109EEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x109EEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+109F6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+109F6D   Length              0005 (5)\n+109F6F   Flags               01 (1) 'Modification'\n+109F70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+109F74 PAYLOAD\n+\n+10BC8D DATA DESCRIPTOR       08074B50 (134695760)\n+10BC91 CRC                   7A85C658 (2055587416)\n+10BC95 Compressed Size       00001D19 (7449)\n+10BC99 Uncompressed Size     00001D19 (7449)\n+\n+10BC9D LOCAL HEADER #414     04034B50 (67324752)\n+10BCA1 Extract Zip Spec      14 (20) '2.0'\n+10BCA2 Extract OS            00 (0) 'MS-DOS'\n+10BCA3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10BCA5 Compression Method    0000 (0) 'Stored'\n+10BCA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10BCAB CRC                   00000000 (0)\n+10BCAF Compressed Size       00000000 (0)\n+10BCB3 Uncompressed Size     00000000 (0)\n+10BCB7 Filename Length       001A (26)\n+10BCB9 Extra Length          0009 (9)\n+10BCBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10BCBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10BCD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10BCD7   Length              0005 (5)\n+10BCD9   Flags               01 (1) 'Modification'\n+10BCDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10BCDE PAYLOAD\n+\n+52D225 DATA DESCRIPTOR       08074B50 (134695760)\n+52D229 CRC                   9E31BAE2 (2654059234)\n+52D22D Compressed Size       00421547 (4330823)\n+52D231 Uncompressed Size     00421547 (4330823)\n+\n+52D235 CENTRAL HEADER #1     02014B50 (33639248)\n+52D239 Created Zip Spec      14 (20) '2.0'\n+52D23A Created OS            00 (0) 'MS-DOS'\n+52D23B Extract Zip Spec      14 (20) '2.0'\n+52D23C Extract OS            00 (0) 'MS-DOS'\n+52D23D General Purpose Flag  0000 (0)\n+52D23F Compression Method    0000 (0) 'Stored'\n+52D241 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D245 CRC                   00000000 (0)\n+52D249 Compressed Size       00000000 (0)\n+52D24D Uncompressed Size     00000000 (0)\n+52D251 Filename Length       0009 (9)\n+52D253 Extra Length          0009 (9)\n+52D255 Comment Length        0000 (0)\n+52D257 Disk Start            0000 (0)\n+52D259 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D25B Ext File Attributes   00000000 (0)\n+52D25F Local Header Offset   00000000 (0)\n+52D263 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D263: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+52D26C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D26E   Length              0005 (5)\n+52D270   Flags               01 (1) 'Modification'\n+52D271   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D275 CENTRAL HEADER #2     02014B50 (33639248)\n+52D279 Created Zip Spec      14 (20) '2.0'\n+52D27A Created OS            00 (0) 'MS-DOS'\n+52D27B Extract Zip Spec      14 (20) '2.0'\n+52D27C Extract OS            00 (0) 'MS-DOS'\n+52D27D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D27F Compression Method    0000 (0) 'Stored'\n+52D281 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D285 CRC                   C348FE22 (3276340770)\n+52D289 Compressed Size       0000B81E (47134)\n+52D28D Uncompressed Size     0000B81E (47134)\n+52D291 Filename Length       0015 (21)\n+52D293 Extra Length          0009 (9)\n+52D295 Comment Length        0000 (0)\n+52D297 Disk Start            0000 (0)\n+52D299 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D29B Ext File Attributes   00000000 (0)\n+52D29F Local Header Offset   00000030 (48)\n+52D2A3 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D2A3: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D2B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D2BA   Length              0005 (5)\n+52D2BC   Flags               01 (1) 'Modification'\n+52D2BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D2C1 CENTRAL HEADER #3     02014B50 (33639248)\n+52D2C5 Created Zip Spec      14 (20) '2.0'\n+52D2C6 Created OS            00 (0) 'MS-DOS'\n+52D2C7 Extract Zip Spec      14 (20) '2.0'\n+52D2C8 Extract OS            00 (0) 'MS-DOS'\n+52D2C9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D2CB Compression Method    0000 (0) 'Stored'\n+52D2CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D2D1 CRC                   86E2B4B4 (2263004340)\n+52D2D5 Compressed Size       00002C5E (11358)\n+52D2D9 Uncompressed Size     00002C5E (11358)\n+52D2DD Filename Length       0010 (16)\n+52D2DF Extra Length          0009 (9)\n+52D2E1 Comment Length        0000 (0)\n+52D2E3 Disk Start            0000 (0)\n+52D2E5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D2E7 Ext File Attributes   00000000 (0)\n+52D2EB Local Header Offset   0000B89A (47258)\n+52D2EF Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D2EF: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D2FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D301   Length              0005 (5)\n+52D303   Flags               01 (1) 'Modification'\n+52D304   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D308 CENTRAL HEADER #4     02014B50 (33639248)\n+52D30C Created Zip Spec      14 (20) '2.0'\n+52D30D Created OS            00 (0) 'MS-DOS'\n+52D30E Extract Zip Spec      14 (20) '2.0'\n+52D30F Extract OS            00 (0) 'MS-DOS'\n+52D310 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D312 Compression Method    0000 (0) 'Stored'\n+52D314 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D318 CRC                   CF300E2D (3476033069)\n+52D31C Compressed Size       00000107 (263)\n+52D320 Uncompressed Size     00000107 (263)\n+52D324 Filename Length       0014 (20)\n+52D326 Extra Length          0009 (9)\n+52D328 Comment Length        0000 (0)\n+52D32A Disk Start            0000 (0)\n+52D32C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D32E Ext File Attributes   00000000 (0)\n+52D332 Local Header Offset   0000E53F (58687)\n+52D336 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D336: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D34A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D34C   Length              0005 (5)\n+52D34E   Flags               01 (1) 'Modification'\n+52D34F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D353 CENTRAL HEADER #5     02014B50 (33639248)\n+52D357 Created Zip Spec      14 (20) '2.0'\n+52D358 Created OS            00 (0) 'MS-DOS'\n+52D359 Extract Zip Spec      14 (20) '2.0'\n+52D35A Extract OS            00 (0) 'MS-DOS'\n+52D35B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D35D Compression Method    0000 (0) 'Stored'\n+52D35F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D363 CRC                   91A82808 (2443716616)\n+52D367 Compressed Size       000000A0 (160)\n+52D36B Uncompressed Size     000000A0 (160)\n+52D36F Filename Length       000F (15)\n+52D371 Extra Length          0009 (9)\n+52D373 Comment Length        0000 (0)\n+52D375 Disk Start            0000 (0)\n+52D377 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D379 Ext File Attributes   00000000 (0)\n+52D37D Local Header Offset   0000E691 (59025)\n+52D381 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D381: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D390 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D392   Length              0005 (5)\n+52D394   Flags               01 (1) 'Modification'\n+52D395   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D399 CENTRAL HEADER #6     02014B50 (33639248)\n+52D39D Created Zip Spec      14 (20) '2.0'\n+52D39E Created OS            00 (0) 'MS-DOS'\n+52D39F Extract Zip Spec      14 (20) '2.0'\n+52D3A0 Extract OS            00 (0) 'MS-DOS'\n+52D3A1 General Purpose Flag  0000 (0)\n+52D3A3 Compression Method    0000 (0) 'Stored'\n+52D3A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D3A9 CRC                   00000000 (0)\n+52D3AD Compressed Size       00000000 (0)\n+52D3B1 Uncompressed Size     00000000 (0)\n+52D3B5 Filename Length       000F (15)\n+52D3B7 Extra Length          0009 (9)\n+52D3B9 Comment Length        0000 (0)\n+52D3BB Disk Start            0000 (0)\n+52D3BD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D3BF Ext File Attributes   00000000 (0)\n+52D3C3 Local Header Offset   0000E777 (59255)\n+52D3C7 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D3C7: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D3D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D3D8   Length              0005 (5)\n+52D3DA   Flags               01 (1) 'Modification'\n+52D3DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D3DF CENTRAL HEADER #7     02014B50 (33639248)\n+52D3E3 Created Zip Spec      14 (20) '2.0'\n+52D3E4 Created OS            00 (0) 'MS-DOS'\n+52D3E5 Extract Zip Spec      14 (20) '2.0'\n+52D3E6 Extract OS            00 (0) 'MS-DOS'\n+52D3E7 General Purpose Flag  0000 (0)\n+52D3E9 Compression Method    0000 (0) 'Stored'\n+52D3EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D3EF CRC                   00000000 (0)\n+52D3F3 Compressed Size       00000000 (0)\n+52D3F7 Uncompressed Size     00000000 (0)\n+52D3FB Filename Length       001F (31)\n+52D3FD Extra Length          0009 (9)\n+52D3FF Comment Length        0000 (0)\n+52D401 Disk Start            0000 (0)\n+52D403 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D405 Ext File Attributes   00000000 (0)\n+52D409 Local Header Offset   0000E7AD (59309)\n+52D40D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D40D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D42C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D42E   Length              0005 (5)\n+52D430   Flags               01 (1) 'Modification'\n+52D431   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D435 CENTRAL HEADER #8     02014B50 (33639248)\n+52D439 Created Zip Spec      14 (20) '2.0'\n+52D43A Created OS            00 (0) 'MS-DOS'\n+52D43B Extract Zip Spec      14 (20) '2.0'\n+52D43C Extract OS            00 (0) 'MS-DOS'\n+52D43D General Purpose Flag  0000 (0)\n+52D43F Compression Method    0000 (0) 'Stored'\n+52D441 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D445 CRC                   00000000 (0)\n+52D449 Compressed Size       00000000 (0)\n+52D44D Uncompressed Size     00000000 (0)\n+52D451 Filename Length       0035 (53)\n+52D453 Extra Length          0009 (9)\n+52D455 Comment Length        0000 (0)\n+52D457 Disk Start            0000 (0)\n+52D459 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D45B Ext File Attributes   00000000 (0)\n+52D45F Local Header Offset   0000E7F3 (59379)\n+52D463 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D463: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D498 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D49A   Length              0005 (5)\n+52D49C   Flags               01 (1) 'Modification'\n+52D49D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D4A1 CENTRAL HEADER #9     02014B50 (33639248)\n+52D4A5 Created Zip Spec      14 (20) '2.0'\n+52D4A6 Created OS            00 (0) 'MS-DOS'\n+52D4A7 Extract Zip Spec      14 (20) '2.0'\n+52D4A8 Extract OS            00 (0) 'MS-DOS'\n+52D4A9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D4AB Compression Method    0000 (0) 'Stored'\n+52D4AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D4B1 CRC                   00000000 (0)\n+52D4B5 Compressed Size       00000000 (0)\n+52D4B9 Uncompressed Size     00000000 (0)\n+52D4BD Filename Length       0043 (67)\n+52D4BF Extra Length          0009 (9)\n+52D4C1 Comment Length        0000 (0)\n+52D4C3 Disk Start            0000 (0)\n+52D4C5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D4C7 Ext File Attributes   00000000 (0)\n+52D4CB Local Header Offset   0000E84F (59471)\n+52D4CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D4CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D512 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D514   Length              0005 (5)\n+52D516   Flags               01 (1) 'Modification'\n+52D517   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D51B CENTRAL HEADER #10    02014B50 (33639248)\n+52D51F Created Zip Spec      14 (20) '2.0'\n+52D520 Created OS            00 (0) 'MS-DOS'\n+52D521 Extract Zip Spec      14 (20) '2.0'\n+52D522 Extract OS            00 (0) 'MS-DOS'\n+52D523 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D525 Compression Method    0000 (0) 'Stored'\n+52D527 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D52B CRC                   E19FACFF (3785338111)\n+52D52F Compressed Size       00001EAA (7850)\n+52D533 Uncompressed Size     00001EAA (7850)\n+52D537 Filename Length       003C (60)\n+52D539 Extra Length          0009 (9)\n+52D53B Comment Length        0000 (0)\n+52D53D Disk Start            0000 (0)\n+52D53F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D541 Ext File Attributes   00000000 (0)\n+52D545 Local Header Offset   0000E8C9 (59593)\n+52D549 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D549: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D585 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D587   Length              0005 (5)\n+52D589   Flags               01 (1) 'Modification'\n+52D58A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D58E CENTRAL HEADER #11    02014B50 (33639248)\n+52D592 Created Zip Spec      14 (20) '2.0'\n+52D593 Created OS            00 (0) 'MS-DOS'\n+52D594 Extract Zip Spec      14 (20) '2.0'\n+52D595 Extract OS            00 (0) 'MS-DOS'\n+52D596 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D598 Compression Method    0000 (0) 'Stored'\n+52D59A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D59E CRC                   92D455DD (2463389149)\n+52D5A2 Compressed Size       000004A4 (1188)\n+52D5A6 Uncompressed Size     000004A4 (1188)\n+52D5AA Filename Length       0010 (16)\n+52D5AC Extra Length          0009 (9)\n+52D5AE Comment Length        0000 (0)\n+52D5B0 Disk Start            0000 (0)\n+52D5B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D5B4 Ext File Attributes   00000000 (0)\n+52D5B8 Local Header Offset   000107E6 (67558)\n+52D5BC Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D5BC: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D5CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D5CE   Length              0005 (5)\n+52D5D0   Flags               01 (1) 'Modification'\n+52D5D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D5D5 CENTRAL HEADER #12    02014B50 (33639248)\n+52D5D9 Created Zip Spec      14 (20) '2.0'\n+52D5DA Created OS            00 (0) 'MS-DOS'\n+52D5DB Extract Zip Spec      14 (20) '2.0'\n+52D5DC Extract OS            00 (0) 'MS-DOS'\n+52D5DD General Purpose Flag  0000 (0)\n+52D5DF Compression Method    0000 (0) 'Stored'\n+52D5E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D5E5 CRC                   00000000 (0)\n+52D5E9 Compressed Size       00000000 (0)\n+52D5ED Uncompressed Size     00000000 (0)\n+52D5F1 Filename Length       0005 (5)\n+52D5F3 Extra Length          0009 (9)\n+52D5F5 Comment Length        0000 (0)\n+52D5F7 Disk Start            0000 (0)\n+52D5F9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D5FB Ext File Attributes   00000000 (0)\n+52D5FF Local Header Offset   00010CD1 (68817)\n+52D603 Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x52D603: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+52D608 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D60A   Length              0005 (5)\n+52D60C   Flags               01 (1) 'Modification'\n+52D60D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D611 CENTRAL HEADER #13    02014B50 (33639248)\n+52D615 Created Zip Spec      14 (20) '2.0'\n+52D616 Created OS            00 (0) 'MS-DOS'\n+52D617 Extract Zip Spec      14 (20) '2.0'\n+52D618 Extract OS            00 (0) 'MS-DOS'\n+52D619 General Purpose Flag  0000 (0)\n+52D61B Compression Method    0000 (0) 'Stored'\n+52D61D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D621 CRC                   00000000 (0)\n+52D625 Compressed Size       00000000 (0)\n+52D629 Uncompressed Size     00000000 (0)\n+52D62D Filename Length       0015 (21)\n+52D62F Extra Length          0009 (9)\n+52D631 Comment Length        0000 (0)\n+52D633 Disk Start            0000 (0)\n+52D635 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D637 Ext File Attributes   00000000 (0)\n+52D63B Local Header Offset   00010CFD (68861)\n+52D63F Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D63F: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D654 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D656   Length              0005 (5)\n+52D658   Flags               01 (1) 'Modification'\n+52D659   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D65D CENTRAL HEADER #14    02014B50 (33639248)\n+52D661 Created Zip Spec      14 (20) '2.0'\n+52D662 Created OS            00 (0) 'MS-DOS'\n+52D663 Extract Zip Spec      14 (20) '2.0'\n+52D664 Extract OS            00 (0) 'MS-DOS'\n+52D665 General Purpose Flag  0000 (0)\n+52D667 Compression Method    0000 (0) 'Stored'\n+52D669 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D66D CRC                   00000000 (0)\n+52D671 Compressed Size       00000000 (0)\n+52D675 Uncompressed Size     00000000 (0)\n+52D679 Filename Length       0027 (39)\n+52D67B Extra Length          0009 (9)\n+52D67D Comment Length        0000 (0)\n+52D67F Disk Start            0000 (0)\n+52D681 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D683 Ext File Attributes   00000000 (0)\n+52D687 Local Header Offset   00010D39 (68921)\n+52D68B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D68B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D6B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D6B4   Length              0005 (5)\n+52D6B6   Flags               01 (1) 'Modification'\n+52D6B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D6BB CENTRAL HEADER #15    02014B50 (33639248)\n+52D6BF Created Zip Spec      14 (20) '2.0'\n+52D6C0 Created OS            00 (0) 'MS-DOS'\n+52D6C1 Extract Zip Spec      14 (20) '2.0'\n+52D6C2 Extract OS            00 (0) 'MS-DOS'\n+52D6C3 General Purpose Flag  0000 (0)\n+52D6C5 Compression Method    0000 (0) 'Stored'\n+52D6C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D6CB CRC                   00000000 (0)\n+52D6CF Compressed Size       00000000 (0)\n+52D6D3 Uncompressed Size     00000000 (0)\n+52D6D7 Filename Length       0030 (48)\n+52D6D9 Extra Length          0009 (9)\n+52D6DB Comment Length        0000 (0)\n+52D6DD Disk Start            0000 (0)\n+52D6DF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D6E1 Ext File Attributes   00000000 (0)\n+52D6E5 Local Header Offset   00010D87 (68999)\n+52D6E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D6E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D719 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D71B   Length              0005 (5)\n+52D71D   Flags               01 (1) 'Modification'\n+52D71E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D722 CENTRAL HEADER #16    02014B50 (33639248)\n+52D726 Created Zip Spec      14 (20) '2.0'\n+52D727 Created OS            00 (0) 'MS-DOS'\n+52D728 Extract Zip Spec      14 (20) '2.0'\n+52D729 Extract OS            00 (0) 'MS-DOS'\n+52D72A General Purpose Flag  0000 (0)\n+52D72C Compression Method    0000 (0) 'Stored'\n+52D72E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D732 CRC                   00000000 (0)\n+52D736 Compressed Size       00000000 (0)\n+52D73A Uncompressed Size     00000000 (0)\n+52D73E Filename Length       0067 (103)\n+52D740 Extra Length          0009 (9)\n+52D742 Comment Length        0000 (0)\n+52D744 Disk Start            0000 (0)\n+52D746 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D748 Ext File Attributes   00000000 (0)\n+52D74C Local Header Offset   00010DDE (69086)\n+52D750 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D750: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D7B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D7B9   Length              0005 (5)\n+52D7BB   Flags               01 (1) 'Modification'\n+52D7BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D7C0 CENTRAL HEADER #17    02014B50 (33639248)\n+52D7C4 Created Zip Spec      14 (20) '2.0'\n+52D7C5 Created OS            00 (0) 'MS-DOS'\n+52D7C6 Extract Zip Spec      14 (20) '2.0'\n+52D7C7 Extract OS            00 (0) 'MS-DOS'\n+52D7C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D7CA Compression Method    0000 (0) 'Stored'\n+52D7CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D7D0 CRC                   9CB4EC6B (2629102699)\n+52D7D4 Compressed Size       00000AA2 (2722)\n+52D7D8 Uncompressed Size     00000AA2 (2722)\n+52D7DC Filename Length       007D (125)\n+52D7DE Extra Length          0009 (9)\n+52D7E0 Comment Length        0000 (0)\n+52D7E2 Disk Start            0000 (0)\n+52D7E4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D7E6 Ext File Attributes   00000000 (0)\n+52D7EA Local Header Offset   00010E6C (69228)\n+52D7EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D7EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D86B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D86D   Length              0005 (5)\n+52D86F   Flags               01 (1) 'Modification'\n+52D870   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D874 CENTRAL HEADER #18    02014B50 (33639248)\n+52D878 Created Zip Spec      14 (20) '2.0'\n+52D879 Created OS            00 (0) 'MS-DOS'\n+52D87A Extract Zip Spec      14 (20) '2.0'\n+52D87B Extract OS            00 (0) 'MS-DOS'\n+52D87C General Purpose Flag  0000 (0)\n+52D87E Compression Method    0000 (0) 'Stored'\n+52D880 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D884 CRC                   00000000 (0)\n+52D888 Compressed Size       00000000 (0)\n+52D88C Uncompressed Size     00000000 (0)\n+52D890 Filename Length       0023 (35)\n+52D892 Extra Length          0009 (9)\n+52D894 Comment Length        0000 (0)\n+52D896 Disk Start            0000 (0)\n+52D898 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D89A Ext File Attributes   00000000 (0)\n+52D89E Local Header Offset   000119C2 (72130)\n+52D8A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D8A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D8C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D8C7   Length              0005 (5)\n+52D8C9   Flags               01 (1) 'Modification'\n+52D8CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D8CE CENTRAL HEADER #19    02014B50 (33639248)\n+52D8D2 Created Zip Spec      14 (20) '2.0'\n+52D8D3 Created OS            00 (0) 'MS-DOS'\n+52D8D4 Extract Zip Spec      14 (20) '2.0'\n+52D8D5 Extract OS            00 (0) 'MS-DOS'\n+52D8D6 General Purpose Flag  0000 (0)\n+52D8D8 Compression Method    0000 (0) 'Stored'\n+52D8DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D8DE CRC                   00000000 (0)\n+52D8E2 Compressed Size       00000000 (0)\n+52D8E6 Uncompressed Size     00000000 (0)\n+52D8EA Filename Length       002C (44)\n+52D8EC Extra Length          0009 (9)\n+52D8EE Comment Length        0000 (0)\n+52D8F0 Disk Start            0000 (0)\n+52D8F2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D8F4 Ext File Attributes   00000000 (0)\n+52D8F8 Local Header Offset   00011A0C (72204)\n+52D8FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D8FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D928 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D92A   Length              0005 (5)\n+52D92C   Flags               01 (1) 'Modification'\n+52D92D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D931 CENTRAL HEADER #20    02014B50 (33639248)\n+52D935 Created Zip Spec      14 (20) '2.0'\n+52D936 Created OS            00 (0) 'MS-DOS'\n+52D937 Extract Zip Spec      14 (20) '2.0'\n+52D938 Extract OS            00 (0) 'MS-DOS'\n+52D939 General Purpose Flag  0000 (0)\n+52D93B Compression Method    0000 (0) 'Stored'\n+52D93D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D941 CRC                   00000000 (0)\n+52D945 Compressed Size       00000000 (0)\n+52D949 Uncompressed Size     00000000 (0)\n+52D94D Filename Length       0058 (88)\n+52D94F Extra Length          0009 (9)\n+52D951 Comment Length        0000 (0)\n+52D953 Disk Start            0000 (0)\n+52D955 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D957 Ext File Attributes   00000000 (0)\n+52D95B Local Header Offset   00011A5F (72287)\n+52D95F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D95F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52D9B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52D9B9   Length              0005 (5)\n+52D9BB   Flags               01 (1) 'Modification'\n+52D9BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52D9C0 CENTRAL HEADER #21    02014B50 (33639248)\n+52D9C4 Created Zip Spec      14 (20) '2.0'\n+52D9C5 Created OS            00 (0) 'MS-DOS'\n+52D9C6 Extract Zip Spec      14 (20) '2.0'\n+52D9C7 Extract OS            00 (0) 'MS-DOS'\n+52D9C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52D9CA Compression Method    0000 (0) 'Stored'\n+52D9CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52D9D0 CRC                   445AD7B2 (1146804146)\n+52D9D4 Compressed Size       00000FBF (4031)\n+52D9D8 Uncompressed Size     00000FBF (4031)\n+52D9DC Filename Length       006E (110)\n+52D9DE Extra Length          0009 (9)\n+52D9E0 Comment Length        0000 (0)\n+52D9E2 Disk Start            0000 (0)\n+52D9E4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52D9E6 Ext File Attributes   00000000 (0)\n+52D9EA Local Header Offset   00011ADE (72414)\n+52D9EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52D9EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DA5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DA5E   Length              0005 (5)\n+52DA60   Flags               01 (1) 'Modification'\n+52DA61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DA65 CENTRAL HEADER #22    02014B50 (33639248)\n+52DA69 Created Zip Spec      14 (20) '2.0'\n+52DA6A Created OS            00 (0) 'MS-DOS'\n+52DA6B Extract Zip Spec      14 (20) '2.0'\n+52DA6C Extract OS            00 (0) 'MS-DOS'\n+52DA6D General Purpose Flag  0000 (0)\n+52DA6F Compression Method    0000 (0) 'Stored'\n+52DA71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DA75 CRC                   00000000 (0)\n+52DA79 Compressed Size       00000000 (0)\n+52DA7D Uncompressed Size     00000000 (0)\n+52DA81 Filename Length       0058 (88)\n+52DA83 Extra Length          0009 (9)\n+52DA85 Comment Length        0000 (0)\n+52DA87 Disk Start            0000 (0)\n+52DA89 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DA8B Ext File Attributes   00000000 (0)\n+52DA8F Local Header Offset   00012B42 (76610)\n+52DA93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DA93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DAEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DAED   Length              0005 (5)\n+52DAEF   Flags               01 (1) 'Modification'\n+52DAF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DAF4 CENTRAL HEADER #23    02014B50 (33639248)\n+52DAF8 Created Zip Spec      14 (20) '2.0'\n+52DAF9 Created OS            00 (0) 'MS-DOS'\n+52DAFA Extract Zip Spec      14 (20) '2.0'\n+52DAFB Extract OS            00 (0) 'MS-DOS'\n+52DAFC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52DAFE Compression Method    0000 (0) 'Stored'\n+52DB00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DB04 CRC                   A2A96EA2 (2729012898)\n+52DB08 Compressed Size       000016DE (5854)\n+52DB0C Uncompressed Size     000016DE (5854)\n+52DB10 Filename Length       006E (110)\n+52DB12 Extra Length          0009 (9)\n+52DB14 Comment Length        0000 (0)\n+52DB16 Disk Start            0000 (0)\n+52DB18 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DB1A Ext File Attributes   00000000 (0)\n+52DB1E Local Header Offset   00012BC1 (76737)\n+52DB22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DB22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DB90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DB92   Length              0005 (5)\n+52DB94   Flags               01 (1) 'Modification'\n+52DB95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DB99 CENTRAL HEADER #24    02014B50 (33639248)\n+52DB9D Created Zip Spec      14 (20) '2.0'\n+52DB9E Created OS            00 (0) 'MS-DOS'\n+52DB9F Extract Zip Spec      14 (20) '2.0'\n+52DBA0 Extract OS            00 (0) 'MS-DOS'\n+52DBA1 General Purpose Flag  0000 (0)\n+52DBA3 Compression Method    0000 (0) 'Stored'\n+52DBA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DBA9 CRC                   00000000 (0)\n+52DBAD Compressed Size       00000000 (0)\n+52DBB1 Uncompressed Size     00000000 (0)\n+52DBB5 Filename Length       002F (47)\n+52DBB7 Extra Length          0009 (9)\n+52DBB9 Comment Length        0000 (0)\n+52DBBB Disk Start            0000 (0)\n+52DBBD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DBBF Ext File Attributes   00000000 (0)\n+52DBC3 Local Header Offset   00014344 (82756)\n+52DBC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DBC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DBF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DBF8   Length              0005 (5)\n+52DBFA   Flags               01 (1) 'Modification'\n+52DBFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DBFF CENTRAL HEADER #25    02014B50 (33639248)\n+52DC03 Created Zip Spec      14 (20) '2.0'\n+52DC04 Created OS            00 (0) 'MS-DOS'\n+52DC05 Extract Zip Spec      14 (20) '2.0'\n+52DC06 Extract OS            00 (0) 'MS-DOS'\n+52DC07 General Purpose Flag  0000 (0)\n+52DC09 Compression Method    0000 (0) 'Stored'\n+52DC0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DC0F CRC                   00000000 (0)\n+52DC13 Compressed Size       00000000 (0)\n+52DC17 Uncompressed Size     00000000 (0)\n+52DC1B Filename Length       0038 (56)\n+52DC1D Extra Length          0009 (9)\n+52DC1F Comment Length        0000 (0)\n+52DC21 Disk Start            0000 (0)\n+52DC23 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DC25 Ext File Attributes   00000000 (0)\n+52DC29 Local Header Offset   0001439A (82842)\n+52DC2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DC2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DC65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DC67   Length              0005 (5)\n+52DC69   Flags               01 (1) 'Modification'\n+52DC6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DC6E CENTRAL HEADER #26    02014B50 (33639248)\n+52DC72 Created Zip Spec      14 (20) '2.0'\n+52DC73 Created OS            00 (0) 'MS-DOS'\n+52DC74 Extract Zip Spec      14 (20) '2.0'\n+52DC75 Extract OS            00 (0) 'MS-DOS'\n+52DC76 General Purpose Flag  0000 (0)\n+52DC78 Compression Method    0000 (0) 'Stored'\n+52DC7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DC7E CRC                   00000000 (0)\n+52DC82 Compressed Size       00000000 (0)\n+52DC86 Uncompressed Size     00000000 (0)\n+52DC8A Filename Length       0068 (104)\n+52DC8C Extra Length          0009 (9)\n+52DC8E Comment Length        0000 (0)\n+52DC90 Disk Start            0000 (0)\n+52DC92 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DC94 Ext File Attributes   00000000 (0)\n+52DC98 Local Header Offset   000143F9 (82937)\n+52DC9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DC9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DD04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DD06   Length              0005 (5)\n+52DD08   Flags               01 (1) 'Modification'\n+52DD09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DD0D CENTRAL HEADER #27    02014B50 (33639248)\n+52DD11 Created Zip Spec      14 (20) '2.0'\n+52DD12 Created OS            00 (0) 'MS-DOS'\n+52DD13 Extract Zip Spec      14 (20) '2.0'\n+52DD14 Extract OS            00 (0) 'MS-DOS'\n+52DD15 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52DD17 Compression Method    0000 (0) 'Stored'\n+52DD19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DD1D CRC                   7416DF2A (1947655978)\n+52DD21 Compressed Size       00001512 (5394)\n+52DD25 Uncompressed Size     00001512 (5394)\n+52DD29 Filename Length       007E (126)\n+52DD2B Extra Length          0009 (9)\n+52DD2D Comment Length        0000 (0)\n+52DD2F Disk Start            0000 (0)\n+52DD31 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DD33 Ext File Attributes   00000000 (0)\n+52DD37 Local Header Offset   00014488 (83080)\n+52DD3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DD3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DDB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DDBB   Length              0005 (5)\n+52DDBD   Flags               01 (1) 'Modification'\n+52DDBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DDC2 CENTRAL HEADER #28    02014B50 (33639248)\n+52DDC6 Created Zip Spec      14 (20) '2.0'\n+52DDC7 Created OS            00 (0) 'MS-DOS'\n+52DDC8 Extract Zip Spec      14 (20) '2.0'\n+52DDC9 Extract OS            00 (0) 'MS-DOS'\n+52DDCA General Purpose Flag  0000 (0)\n+52DDCC Compression Method    0000 (0) 'Stored'\n+52DDCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DDD2 CRC                   00000000 (0)\n+52DDD6 Compressed Size       00000000 (0)\n+52DDDA Uncompressed Size     00000000 (0)\n+52DDDE Filename Length       0022 (34)\n+52DDE0 Extra Length          0009 (9)\n+52DDE2 Comment Length        0000 (0)\n+52DDE4 Disk Start            0000 (0)\n+52DDE6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DDE8 Ext File Attributes   00000000 (0)\n+52DDEC Local Header Offset   00015A4F (88655)\n+52DDF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DDF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DE12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DE14   Length              0005 (5)\n+52DE16   Flags               01 (1) 'Modification'\n+52DE17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DE1B CENTRAL HEADER #29    02014B50 (33639248)\n+52DE1F Created Zip Spec      14 (20) '2.0'\n+52DE20 Created OS            00 (0) 'MS-DOS'\n+52DE21 Extract Zip Spec      14 (20) '2.0'\n+52DE22 Extract OS            00 (0) 'MS-DOS'\n+52DE23 General Purpose Flag  0000 (0)\n+52DE25 Compression Method    0000 (0) 'Stored'\n+52DE27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DE2B CRC                   00000000 (0)\n+52DE2F Compressed Size       00000000 (0)\n+52DE33 Uncompressed Size     00000000 (0)\n+52DE37 Filename Length       002B (43)\n+52DE39 Extra Length          0009 (9)\n+52DE3B Comment Length        0000 (0)\n+52DE3D Disk Start            0000 (0)\n+52DE3F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DE41 Ext File Attributes   00000000 (0)\n+52DE45 Local Header Offset   00015A98 (88728)\n+52DE49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DE49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DE74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DE76   Length              0005 (5)\n+52DE78   Flags               01 (1) 'Modification'\n+52DE79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DE7D CENTRAL HEADER #30    02014B50 (33639248)\n+52DE81 Created Zip Spec      14 (20) '2.0'\n+52DE82 Created OS            00 (0) 'MS-DOS'\n+52DE83 Extract Zip Spec      14 (20) '2.0'\n+52DE84 Extract OS            00 (0) 'MS-DOS'\n+52DE85 General Purpose Flag  0000 (0)\n+52DE87 Compression Method    0000 (0) 'Stored'\n+52DE89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DE8D CRC                   00000000 (0)\n+52DE91 Compressed Size       00000000 (0)\n+52DE95 Uncompressed Size     00000000 (0)\n+52DE99 Filename Length       006C (108)\n+52DE9B Extra Length          0009 (9)\n+52DE9D Comment Length        0000 (0)\n+52DE9F Disk Start            0000 (0)\n+52DEA1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DEA3 Ext File Attributes   00000000 (0)\n+52DEA7 Local Header Offset   00015AEA (88810)\n+52DEAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DEAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DF17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DF19   Length              0005 (5)\n+52DF1B   Flags               01 (1) 'Modification'\n+52DF1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DF20 CENTRAL HEADER #31    02014B50 (33639248)\n+52DF24 Created Zip Spec      14 (20) '2.0'\n+52DF25 Created OS            00 (0) 'MS-DOS'\n+52DF26 Extract Zip Spec      14 (20) '2.0'\n+52DF27 Extract OS            00 (0) 'MS-DOS'\n+52DF28 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52DF2A Compression Method    0000 (0) 'Stored'\n+52DF2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DF30 CRC                   15D4B854 (366262356)\n+52DF34 Compressed Size       00000A25 (2597)\n+52DF38 Uncompressed Size     00000A25 (2597)\n+52DF3C Filename Length       0082 (130)\n+52DF3E Extra Length          0009 (9)\n+52DF40 Comment Length        0000 (0)\n+52DF42 Disk Start            0000 (0)\n+52DF44 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DF46 Ext File Attributes   00000000 (0)\n+52DF4A Local Header Offset   00015B7D (88957)\n+52DF4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52DF4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52DFD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52DFD2   Length              0005 (5)\n+52DFD4   Flags               01 (1) 'Modification'\n+52DFD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52DFD9 CENTRAL HEADER #32    02014B50 (33639248)\n+52DFDD Created Zip Spec      14 (20) '2.0'\n+52DFDE Created OS            00 (0) 'MS-DOS'\n+52DFDF Extract Zip Spec      14 (20) '2.0'\n+52DFE0 Extract OS            00 (0) 'MS-DOS'\n+52DFE1 General Purpose Flag  0000 (0)\n+52DFE3 Compression Method    0000 (0) 'Stored'\n+52DFE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52DFE9 CRC                   00000000 (0)\n+52DFED Compressed Size       00000000 (0)\n+52DFF1 Uncompressed Size     00000000 (0)\n+52DFF5 Filename Length       0065 (101)\n+52DFF7 Extra Length          0009 (9)\n+52DFF9 Comment Length        0000 (0)\n+52DFFB Disk Start            0000 (0)\n+52DFFD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52DFFF Ext File Attributes   00000000 (0)\n+52E003 Local Header Offset   0001665B (91739)\n+52E007 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E007: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E06C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E06E   Length              0005 (5)\n+52E070   Flags               01 (1) 'Modification'\n+52E071   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E075 CENTRAL HEADER #33    02014B50 (33639248)\n+52E079 Created Zip Spec      14 (20) '2.0'\n+52E07A Created OS            00 (0) 'MS-DOS'\n+52E07B Extract Zip Spec      14 (20) '2.0'\n+52E07C Extract OS            00 (0) 'MS-DOS'\n+52E07D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E07F Compression Method    0000 (0) 'Stored'\n+52E081 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E085 CRC                   826E1CC4 (2188254404)\n+52E089 Compressed Size       00002F90 (12176)\n+52E08D Uncompressed Size     00002F90 (12176)\n+52E091 Filename Length       007B (123)\n+52E093 Extra Length          0009 (9)\n+52E095 Comment Length        0000 (0)\n+52E097 Disk Start            0000 (0)\n+52E099 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E09B Ext File Attributes   00000000 (0)\n+52E09F Local Header Offset   000166E7 (91879)\n+52E0A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E0A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E11E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E120   Length              0005 (5)\n+52E122   Flags               01 (1) 'Modification'\n+52E123   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E127 CENTRAL HEADER #34    02014B50 (33639248)\n+52E12B Created Zip Spec      14 (20) '2.0'\n+52E12C Created OS            00 (0) 'MS-DOS'\n+52E12D Extract Zip Spec      14 (20) '2.0'\n+52E12E Extract OS            00 (0) 'MS-DOS'\n+52E12F General Purpose Flag  0000 (0)\n+52E131 Compression Method    0000 (0) 'Stored'\n+52E133 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E137 CRC                   00000000 (0)\n+52E13B Compressed Size       00000000 (0)\n+52E13F Uncompressed Size     00000000 (0)\n+52E143 Filename Length       006E (110)\n+52E145 Extra Length          0009 (9)\n+52E147 Comment Length        0000 (0)\n+52E149 Disk Start            0000 (0)\n+52E14B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E14D Ext File Attributes   00000000 (0)\n+52E151 Local Header Offset   00019729 (104233)\n+52E155 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E155: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E1C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E1C5   Length              0005 (5)\n+52E1C7   Flags               01 (1) 'Modification'\n+52E1C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E1CC CENTRAL HEADER #35    02014B50 (33639248)\n+52E1D0 Created Zip Spec      14 (20) '2.0'\n+52E1D1 Created OS            00 (0) 'MS-DOS'\n+52E1D2 Extract Zip Spec      14 (20) '2.0'\n+52E1D3 Extract OS            00 (0) 'MS-DOS'\n+52E1D4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E1D6 Compression Method    0000 (0) 'Stored'\n+52E1D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E1DC CRC                   1BE163AC (467755948)\n+52E1E0 Compressed Size       00000967 (2407)\n+52E1E4 Uncompressed Size     00000967 (2407)\n+52E1E8 Filename Length       0084 (132)\n+52E1EA Extra Length          0009 (9)\n+52E1EC Comment Length        0000 (0)\n+52E1EE Disk Start            0000 (0)\n+52E1F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E1F2 Ext File Attributes   00000000 (0)\n+52E1F6 Local Header Offset   000197BE (104382)\n+52E1FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x52E27B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52E1FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52E2FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E301   Length              0005 (5)\n-52E303   Flags               01 (1) 'Modification'\n-52E304   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E308 CENTRAL HEADER #36    02014B50 (33639248)\n-52E30C Created Zip Spec      14 (20) '2.0'\n-52E30D Created OS            00 (0) 'MS-DOS'\n-52E30E Extract Zip Spec      14 (20) '2.0'\n-52E30F Extract OS            00 (0) 'MS-DOS'\n-52E310 General Purpose Flag  0000 (0)\n-52E312 Compression Method    0000 (0) 'Stored'\n-52E314 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E318 CRC                   00000000 (0)\n-52E31C Compressed Size       00000000 (0)\n-52E320 Uncompressed Size     00000000 (0)\n-52E324 Filename Length       0068 (104)\n-52E326 Extra Length          0009 (9)\n-52E328 Comment Length        0000 (0)\n-52E32A Disk Start            0000 (0)\n-52E32C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E32E Ext File Attributes   00000000 (0)\n-52E332 Local Header Offset   0001A249 (107081)\n-52E336 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E336: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E39E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E3A0   Length              0005 (5)\n-52E3A2   Flags               01 (1) 'Modification'\n-52E3A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E3A7 CENTRAL HEADER #37    02014B50 (33639248)\n-52E3AB Created Zip Spec      14 (20) '2.0'\n-52E3AC Created OS            00 (0) 'MS-DOS'\n-52E3AD Extract Zip Spec      14 (20) '2.0'\n-52E3AE Extract OS            00 (0) 'MS-DOS'\n-52E3AF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52E3B1 Compression Method    0000 (0) 'Stored'\n-52E3B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E3B7 CRC                   11DB1110 (299569424)\n-52E3BB Compressed Size       0000080F (2063)\n-52E3BF Uncompressed Size     0000080F (2063)\n-52E3C3 Filename Length       007E (126)\n-52E3C5 Extra Length          0009 (9)\n-52E3C7 Comment Length        0000 (0)\n-52E3C9 Disk Start            0000 (0)\n-52E3CB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E3CD Ext File Attributes   00000000 (0)\n-52E3D1 Local Header Offset   0001A2D8 (107224)\n-52E3D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E3D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E453 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E455   Length              0005 (5)\n-52E457   Flags               01 (1) 'Modification'\n-52E458   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E45C CENTRAL HEADER #38    02014B50 (33639248)\n-52E460 Created Zip Spec      14 (20) '2.0'\n-52E461 Created OS            00 (0) 'MS-DOS'\n-52E462 Extract Zip Spec      14 (20) '2.0'\n-52E463 Extract OS            00 (0) 'MS-DOS'\n-52E464 General Purpose Flag  0000 (0)\n-52E466 Compression Method    0000 (0) 'Stored'\n-52E468 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E46C CRC                   00000000 (0)\n-52E470 Compressed Size       00000000 (0)\n-52E474 Uncompressed Size     00000000 (0)\n-52E478 Filename Length       0064 (100)\n-52E47A Extra Length          0009 (9)\n-52E47C Comment Length        0000 (0)\n-52E47E Disk Start            0000 (0)\n-52E480 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E482 Ext File Attributes   00000000 (0)\n-52E486 Local Header Offset   0001AB9C (109468)\n-52E48A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E48A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E4EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E4F0   Length              0005 (5)\n-52E4F2   Flags               01 (1) 'Modification'\n-52E4F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E4F7 CENTRAL HEADER #39    02014B50 (33639248)\n-52E4FB Created Zip Spec      14 (20) '2.0'\n-52E4FC Created OS            00 (0) 'MS-DOS'\n-52E4FD Extract Zip Spec      14 (20) '2.0'\n-52E4FE Extract OS            00 (0) 'MS-DOS'\n-52E4FF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52E501 Compression Method    0000 (0) 'Stored'\n-52E503 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E507 CRC                   30A69673 (816223859)\n-52E50B Compressed Size       00000C1C (3100)\n-52E50F Uncompressed Size     00000C1C (3100)\n-52E513 Filename Length       007A (122)\n-52E515 Extra Length          0009 (9)\n-52E517 Comment Length        0000 (0)\n-52E519 Disk Start            0000 (0)\n-52E51B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E51D Ext File Attributes   00000000 (0)\n-52E521 Local Header Offset   0001AC27 (109607)\n-52E525 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E525: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E59F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E5A1   Length              0005 (5)\n-52E5A3   Flags               01 (1) 'Modification'\n-52E5A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E5A8 CENTRAL HEADER #40    02014B50 (33639248)\n-52E5AC Created Zip Spec      14 (20) '2.0'\n-52E5AD Created OS            00 (0) 'MS-DOS'\n-52E5AE Extract Zip Spec      14 (20) '2.0'\n-52E5AF Extract OS            00 (0) 'MS-DOS'\n-52E5B0 General Purpose Flag  0000 (0)\n-52E5B2 Compression Method    0000 (0) 'Stored'\n-52E5B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E5B8 CRC                   00000000 (0)\n-52E5BC Compressed Size       00000000 (0)\n-52E5C0 Uncompressed Size     00000000 (0)\n-52E5C4 Filename Length       006E (110)\n-52E5C6 Extra Length          0009 (9)\n-52E5C8 Comment Length        0000 (0)\n-52E5CA Disk Start            0000 (0)\n-52E5CC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E5CE Ext File Attributes   00000000 (0)\n-52E5D2 Local Header Offset   0001B8F4 (112884)\n-52E5D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E5D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E644 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E646   Length              0005 (5)\n-52E648   Flags               01 (1) 'Modification'\n-52E649   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E64D CENTRAL HEADER #41    02014B50 (33639248)\n-52E651 Created Zip Spec      14 (20) '2.0'\n-52E652 Created OS            00 (0) 'MS-DOS'\n-52E653 Extract Zip Spec      14 (20) '2.0'\n-52E654 Extract OS            00 (0) 'MS-DOS'\n-52E655 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52E657 Compression Method    0000 (0) 'Stored'\n-52E659 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E65D CRC                   0C316B32 (204565298)\n-52E661 Compressed Size       000006D7 (1751)\n-52E665 Uncompressed Size     000006D7 (1751)\n-52E669 Filename Length       0084 (132)\n-52E66B Extra Length          0009 (9)\n-52E66D Comment Length        0000 (0)\n-52E66F Disk Start            0000 (0)\n-52E671 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E673 Ext File Attributes   00000000 (0)\n-52E677 Local Header Offset   0001B989 (113033)\n-52E67B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52E27E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E280   Length              0005 (5)\n+52E282   Flags               01 (1) 'Modification'\n+52E283   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E287 CENTRAL HEADER #36    02014B50 (33639248)\n+52E28B Created Zip Spec      14 (20) '2.0'\n+52E28C Created OS            00 (0) 'MS-DOS'\n+52E28D Extract Zip Spec      14 (20) '2.0'\n+52E28E Extract OS            00 (0) 'MS-DOS'\n+52E28F General Purpose Flag  0000 (0)\n+52E291 Compression Method    0000 (0) 'Stored'\n+52E293 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E297 CRC                   00000000 (0)\n+52E29B Compressed Size       00000000 (0)\n+52E29F Uncompressed Size     00000000 (0)\n+52E2A3 Filename Length       0068 (104)\n+52E2A5 Extra Length          0009 (9)\n+52E2A7 Comment Length        0000 (0)\n+52E2A9 Disk Start            0000 (0)\n+52E2AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E2AD Ext File Attributes   00000000 (0)\n+52E2B1 Local Header Offset   0001A1E0 (106976)\n+52E2B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E2B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E31D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E31F   Length              0005 (5)\n+52E321   Flags               01 (1) 'Modification'\n+52E322   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E326 CENTRAL HEADER #37    02014B50 (33639248)\n+52E32A Created Zip Spec      14 (20) '2.0'\n+52E32B Created OS            00 (0) 'MS-DOS'\n+52E32C Extract Zip Spec      14 (20) '2.0'\n+52E32D Extract OS            00 (0) 'MS-DOS'\n+52E32E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E330 Compression Method    0000 (0) 'Stored'\n+52E332 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E336 CRC                   11DB1110 (299569424)\n+52E33A Compressed Size       0000080F (2063)\n+52E33E Uncompressed Size     0000080F (2063)\n+52E342 Filename Length       007E (126)\n+52E344 Extra Length          0009 (9)\n+52E346 Comment Length        0000 (0)\n+52E348 Disk Start            0000 (0)\n+52E34A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E34C Ext File Attributes   00000000 (0)\n+52E350 Local Header Offset   0001A26F (107119)\n+52E354 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E354: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E3D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E3D4   Length              0005 (5)\n+52E3D6   Flags               01 (1) 'Modification'\n+52E3D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E3DB CENTRAL HEADER #38    02014B50 (33639248)\n+52E3DF Created Zip Spec      14 (20) '2.0'\n+52E3E0 Created OS            00 (0) 'MS-DOS'\n+52E3E1 Extract Zip Spec      14 (20) '2.0'\n+52E3E2 Extract OS            00 (0) 'MS-DOS'\n+52E3E3 General Purpose Flag  0000 (0)\n+52E3E5 Compression Method    0000 (0) 'Stored'\n+52E3E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E3EB CRC                   00000000 (0)\n+52E3EF Compressed Size       00000000 (0)\n+52E3F3 Uncompressed Size     00000000 (0)\n+52E3F7 Filename Length       0064 (100)\n+52E3F9 Extra Length          0009 (9)\n+52E3FB Comment Length        0000 (0)\n+52E3FD Disk Start            0000 (0)\n+52E3FF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E401 Ext File Attributes   00000000 (0)\n+52E405 Local Header Offset   0001AB33 (109363)\n+52E409 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E409: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E46D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E46F   Length              0005 (5)\n+52E471   Flags               01 (1) 'Modification'\n+52E472   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E476 CENTRAL HEADER #39    02014B50 (33639248)\n+52E47A Created Zip Spec      14 (20) '2.0'\n+52E47B Created OS            00 (0) 'MS-DOS'\n+52E47C Extract Zip Spec      14 (20) '2.0'\n+52E47D Extract OS            00 (0) 'MS-DOS'\n+52E47E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E480 Compression Method    0000 (0) 'Stored'\n+52E482 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E486 CRC                   30A69673 (816223859)\n+52E48A Compressed Size       00000C1C (3100)\n+52E48E Uncompressed Size     00000C1C (3100)\n+52E492 Filename Length       007A (122)\n+52E494 Extra Length          0009 (9)\n+52E496 Comment Length        0000 (0)\n+52E498 Disk Start            0000 (0)\n+52E49A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E49C Ext File Attributes   00000000 (0)\n+52E4A0 Local Header Offset   0001ABBE (109502)\n+52E4A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E4A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E51E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E520   Length              0005 (5)\n+52E522   Flags               01 (1) 'Modification'\n+52E523   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E527 CENTRAL HEADER #40    02014B50 (33639248)\n+52E52B Created Zip Spec      14 (20) '2.0'\n+52E52C Created OS            00 (0) 'MS-DOS'\n+52E52D Extract Zip Spec      14 (20) '2.0'\n+52E52E Extract OS            00 (0) 'MS-DOS'\n+52E52F General Purpose Flag  0000 (0)\n+52E531 Compression Method    0000 (0) 'Stored'\n+52E533 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E537 CRC                   00000000 (0)\n+52E53B Compressed Size       00000000 (0)\n+52E53F Uncompressed Size     00000000 (0)\n+52E543 Filename Length       006E (110)\n+52E545 Extra Length          0009 (9)\n+52E547 Comment Length        0000 (0)\n+52E549 Disk Start            0000 (0)\n+52E54B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E54D Ext File Attributes   00000000 (0)\n+52E551 Local Header Offset   0001B88B (112779)\n+52E555 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E555: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E5C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E5C5   Length              0005 (5)\n+52E5C7   Flags               01 (1) 'Modification'\n+52E5C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E5CC CENTRAL HEADER #41    02014B50 (33639248)\n+52E5D0 Created Zip Spec      14 (20) '2.0'\n+52E5D1 Created OS            00 (0) 'MS-DOS'\n+52E5D2 Extract Zip Spec      14 (20) '2.0'\n+52E5D3 Extract OS            00 (0) 'MS-DOS'\n+52E5D4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E5D6 Compression Method    0000 (0) 'Stored'\n+52E5D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E5DC CRC                   0C316B32 (204565298)\n+52E5E0 Compressed Size       000006D7 (1751)\n+52E5E4 Uncompressed Size     000006D7 (1751)\n+52E5E8 Filename Length       0084 (132)\n+52E5EA Extra Length          0009 (9)\n+52E5EC Comment Length        0000 (0)\n+52E5EE Disk Start            0000 (0)\n+52E5F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E5F2 Ext File Attributes   00000000 (0)\n+52E5F6 Local Header Offset   0001B920 (112928)\n+52E5FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x52E67B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52E5FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52E6FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E701   Length              0005 (5)\n-52E703   Flags               01 (1) 'Modification'\n-52E704   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E708 CENTRAL HEADER #42    02014B50 (33639248)\n-52E70C Created Zip Spec      14 (20) '2.0'\n-52E70D Created OS            00 (0) 'MS-DOS'\n-52E70E Extract Zip Spec      14 (20) '2.0'\n-52E70F Extract OS            00 (0) 'MS-DOS'\n-52E710 General Purpose Flag  0000 (0)\n-52E712 Compression Method    0000 (0) 'Stored'\n-52E714 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E718 CRC                   00000000 (0)\n-52E71C Compressed Size       00000000 (0)\n-52E720 Uncompressed Size     00000000 (0)\n-52E724 Filename Length       006A (106)\n-52E726 Extra Length          0009 (9)\n-52E728 Comment Length        0000 (0)\n-52E72A Disk Start            0000 (0)\n-52E72C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E72E Ext File Attributes   00000000 (0)\n-52E732 Local Header Offset   0001C11B (114971)\n-52E736 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E736: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E7A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E7A2   Length              0005 (5)\n-52E7A4   Flags               01 (1) 'Modification'\n-52E7A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E7A9 CENTRAL HEADER #43    02014B50 (33639248)\n-52E7AD Created Zip Spec      14 (20) '2.0'\n-52E7AE Created OS            00 (0) 'MS-DOS'\n-52E7AF Extract Zip Spec      14 (20) '2.0'\n-52E7B0 Extract OS            00 (0) 'MS-DOS'\n-52E7B1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52E7B3 Compression Method    0000 (0) 'Stored'\n-52E7B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E7B9 CRC                   37BEEC96 (935259286)\n-52E7BD Compressed Size       0000133B (4923)\n-52E7C1 Uncompressed Size     0000133B (4923)\n-52E7C5 Filename Length       0080 (128)\n-52E7C7 Extra Length          0009 (9)\n-52E7C9 Comment Length        0000 (0)\n-52E7CB Disk Start            0000 (0)\n-52E7CD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E7CF Ext File Attributes   00000000 (0)\n-52E7D3 Local Header Offset   0001C1AC (115116)\n-52E7D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E7D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E857 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E859   Length              0005 (5)\n-52E85B   Flags               01 (1) 'Modification'\n-52E85C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E860 CENTRAL HEADER #44    02014B50 (33639248)\n-52E864 Created Zip Spec      14 (20) '2.0'\n-52E865 Created OS            00 (0) 'MS-DOS'\n-52E866 Extract Zip Spec      14 (20) '2.0'\n-52E867 Extract OS            00 (0) 'MS-DOS'\n-52E868 General Purpose Flag  0000 (0)\n-52E86A Compression Method    0000 (0) 'Stored'\n-52E86C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E870 CRC                   00000000 (0)\n-52E874 Compressed Size       00000000 (0)\n-52E878 Uncompressed Size     00000000 (0)\n-52E87C Filename Length       0072 (114)\n-52E87E Extra Length          0009 (9)\n-52E880 Comment Length        0000 (0)\n-52E882 Disk Start            0000 (0)\n-52E884 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E886 Ext File Attributes   00000000 (0)\n-52E88A Local Header Offset   0001D59E (120222)\n-52E88E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E88E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52E900 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E902   Length              0005 (5)\n-52E904   Flags               01 (1) 'Modification'\n-52E905   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E909 CENTRAL HEADER #45    02014B50 (33639248)\n-52E90D Created Zip Spec      14 (20) '2.0'\n-52E90E Created OS            00 (0) 'MS-DOS'\n-52E90F Extract Zip Spec      14 (20) '2.0'\n-52E910 Extract OS            00 (0) 'MS-DOS'\n-52E911 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52E913 Compression Method    0000 (0) 'Stored'\n-52E915 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E919 CRC                   D0AE7BE4 (3501095908)\n-52E91D Compressed Size       0000074C (1868)\n-52E921 Uncompressed Size     0000074C (1868)\n-52E925 Filename Length       0088 (136)\n-52E927 Extra Length          0009 (9)\n-52E929 Comment Length        0000 (0)\n-52E92B Disk Start            0000 (0)\n-52E92D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E92F Ext File Attributes   00000000 (0)\n-52E933 Local Header Offset   0001D637 (120375)\n-52E937 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52E67E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E680   Length              0005 (5)\n+52E682   Flags               01 (1) 'Modification'\n+52E683   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E687 CENTRAL HEADER #42    02014B50 (33639248)\n+52E68B Created Zip Spec      14 (20) '2.0'\n+52E68C Created OS            00 (0) 'MS-DOS'\n+52E68D Extract Zip Spec      14 (20) '2.0'\n+52E68E Extract OS            00 (0) 'MS-DOS'\n+52E68F General Purpose Flag  0000 (0)\n+52E691 Compression Method    0000 (0) 'Stored'\n+52E693 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E697 CRC                   00000000 (0)\n+52E69B Compressed Size       00000000 (0)\n+52E69F Uncompressed Size     00000000 (0)\n+52E6A3 Filename Length       006A (106)\n+52E6A5 Extra Length          0009 (9)\n+52E6A7 Comment Length        0000 (0)\n+52E6A9 Disk Start            0000 (0)\n+52E6AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E6AD Ext File Attributes   00000000 (0)\n+52E6B1 Local Header Offset   0001C0B2 (114866)\n+52E6B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E6B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E71F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E721   Length              0005 (5)\n+52E723   Flags               01 (1) 'Modification'\n+52E724   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E728 CENTRAL HEADER #43    02014B50 (33639248)\n+52E72C Created Zip Spec      14 (20) '2.0'\n+52E72D Created OS            00 (0) 'MS-DOS'\n+52E72E Extract Zip Spec      14 (20) '2.0'\n+52E72F Extract OS            00 (0) 'MS-DOS'\n+52E730 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E732 Compression Method    0000 (0) 'Stored'\n+52E734 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E738 CRC                   37BEEC96 (935259286)\n+52E73C Compressed Size       0000133B (4923)\n+52E740 Uncompressed Size     0000133B (4923)\n+52E744 Filename Length       0080 (128)\n+52E746 Extra Length          0009 (9)\n+52E748 Comment Length        0000 (0)\n+52E74A Disk Start            0000 (0)\n+52E74C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E74E Ext File Attributes   00000000 (0)\n+52E752 Local Header Offset   0001C143 (115011)\n+52E756 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E756: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E7D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E7D8   Length              0005 (5)\n+52E7DA   Flags               01 (1) 'Modification'\n+52E7DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E7DF CENTRAL HEADER #44    02014B50 (33639248)\n+52E7E3 Created Zip Spec      14 (20) '2.0'\n+52E7E4 Created OS            00 (0) 'MS-DOS'\n+52E7E5 Extract Zip Spec      14 (20) '2.0'\n+52E7E6 Extract OS            00 (0) 'MS-DOS'\n+52E7E7 General Purpose Flag  0000 (0)\n+52E7E9 Compression Method    0000 (0) 'Stored'\n+52E7EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E7EF CRC                   00000000 (0)\n+52E7F3 Compressed Size       00000000 (0)\n+52E7F7 Uncompressed Size     00000000 (0)\n+52E7FB Filename Length       0072 (114)\n+52E7FD Extra Length          0009 (9)\n+52E7FF Comment Length        0000 (0)\n+52E801 Disk Start            0000 (0)\n+52E803 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E805 Ext File Attributes   00000000 (0)\n+52E809 Local Header Offset   0001D535 (120117)\n+52E80D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E80D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E87F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E881   Length              0005 (5)\n+52E883   Flags               01 (1) 'Modification'\n+52E884   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E888 CENTRAL HEADER #45    02014B50 (33639248)\n+52E88C Created Zip Spec      14 (20) '2.0'\n+52E88D Created OS            00 (0) 'MS-DOS'\n+52E88E Extract Zip Spec      14 (20) '2.0'\n+52E88F Extract OS            00 (0) 'MS-DOS'\n+52E890 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E892 Compression Method    0000 (0) 'Stored'\n+52E894 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E898 CRC                   D0AE7BE4 (3501095908)\n+52E89C Compressed Size       0000074C (1868)\n+52E8A0 Uncompressed Size     0000074C (1868)\n+52E8A4 Filename Length       0088 (136)\n+52E8A6 Extra Length          0009 (9)\n+52E8A8 Comment Length        0000 (0)\n+52E8AA Disk Start            0000 (0)\n+52E8AC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E8AE Ext File Attributes   00000000 (0)\n+52E8B2 Local Header Offset   0001D5CE (120270)\n+52E8B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x52E937: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52E8B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52E9BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52E9C1   Length              0005 (5)\n-52E9C3   Flags               01 (1) 'Modification'\n-52E9C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52E9C8 CENTRAL HEADER #46    02014B50 (33639248)\n-52E9CC Created Zip Spec      14 (20) '2.0'\n-52E9CD Created OS            00 (0) 'MS-DOS'\n-52E9CE Extract Zip Spec      14 (20) '2.0'\n-52E9CF Extract OS            00 (0) 'MS-DOS'\n-52E9D0 General Purpose Flag  0000 (0)\n-52E9D2 Compression Method    0000 (0) 'Stored'\n-52E9D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52E9D8 CRC                   00000000 (0)\n-52E9DC Compressed Size       00000000 (0)\n-52E9E0 Uncompressed Size     00000000 (0)\n-52E9E4 Filename Length       006E (110)\n-52E9E6 Extra Length          0009 (9)\n-52E9E8 Comment Length        0000 (0)\n-52E9EA Disk Start            0000 (0)\n-52E9EC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52E9EE Ext File Attributes   00000000 (0)\n-52E9F2 Local Header Offset   0001DE42 (122434)\n-52E9F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52E9F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52EA64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EA66   Length              0005 (5)\n-52EA68   Flags               01 (1) 'Modification'\n-52EA69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EA6D CENTRAL HEADER #47    02014B50 (33639248)\n-52EA71 Created Zip Spec      14 (20) '2.0'\n-52EA72 Created OS            00 (0) 'MS-DOS'\n-52EA73 Extract Zip Spec      14 (20) '2.0'\n-52EA74 Extract OS            00 (0) 'MS-DOS'\n-52EA75 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52EA77 Compression Method    0000 (0) 'Stored'\n-52EA79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EA7D CRC                   4C134CE6 (1276333286)\n-52EA81 Compressed Size       0000103C (4156)\n-52EA85 Uncompressed Size     0000103C (4156)\n-52EA89 Filename Length       0084 (132)\n-52EA8B Extra Length          0009 (9)\n-52EA8D Comment Length        0000 (0)\n-52EA8F Disk Start            0000 (0)\n-52EA91 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52EA93 Ext File Attributes   00000000 (0)\n-52EA97 Local Header Offset   0001DED7 (122583)\n-52EA9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52E93E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E940   Length              0005 (5)\n+52E942   Flags               01 (1) 'Modification'\n+52E943   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E947 CENTRAL HEADER #46    02014B50 (33639248)\n+52E94B Created Zip Spec      14 (20) '2.0'\n+52E94C Created OS            00 (0) 'MS-DOS'\n+52E94D Extract Zip Spec      14 (20) '2.0'\n+52E94E Extract OS            00 (0) 'MS-DOS'\n+52E94F General Purpose Flag  0000 (0)\n+52E951 Compression Method    0000 (0) 'Stored'\n+52E953 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E957 CRC                   00000000 (0)\n+52E95B Compressed Size       00000000 (0)\n+52E95F Uncompressed Size     00000000 (0)\n+52E963 Filename Length       006E (110)\n+52E965 Extra Length          0009 (9)\n+52E967 Comment Length        0000 (0)\n+52E969 Disk Start            0000 (0)\n+52E96B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52E96D Ext File Attributes   00000000 (0)\n+52E971 Local Header Offset   0001DDD9 (122329)\n+52E975 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52E975: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52E9E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52E9E5   Length              0005 (5)\n+52E9E7   Flags               01 (1) 'Modification'\n+52E9E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52E9EC CENTRAL HEADER #47    02014B50 (33639248)\n+52E9F0 Created Zip Spec      14 (20) '2.0'\n+52E9F1 Created OS            00 (0) 'MS-DOS'\n+52E9F2 Extract Zip Spec      14 (20) '2.0'\n+52E9F3 Extract OS            00 (0) 'MS-DOS'\n+52E9F4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52E9F6 Compression Method    0000 (0) 'Stored'\n+52E9F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52E9FC CRC                   4C134CE6 (1276333286)\n+52EA00 Compressed Size       0000103C (4156)\n+52EA04 Uncompressed Size     0000103C (4156)\n+52EA08 Filename Length       0084 (132)\n+52EA0A Extra Length          0009 (9)\n+52EA0C Comment Length        0000 (0)\n+52EA0E Disk Start            0000 (0)\n+52EA10 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EA12 Ext File Attributes   00000000 (0)\n+52EA16 Local Header Offset   0001DE6E (122478)\n+52EA1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x52EA9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52EA1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52EB1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EB21   Length              0005 (5)\n-52EB23   Flags               01 (1) 'Modification'\n-52EB24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EB28 CENTRAL HEADER #48    02014B50 (33639248)\n-52EB2C Created Zip Spec      14 (20) '2.0'\n-52EB2D Created OS            00 (0) 'MS-DOS'\n-52EB2E Extract Zip Spec      14 (20) '2.0'\n-52EB2F Extract OS            00 (0) 'MS-DOS'\n-52EB30 General Purpose Flag  0000 (0)\n-52EB32 Compression Method    0000 (0) 'Stored'\n-52EB34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EB38 CRC                   00000000 (0)\n-52EB3C Compressed Size       00000000 (0)\n-52EB40 Uncompressed Size     00000000 (0)\n-52EB44 Filename Length       0070 (112)\n-52EB46 Extra Length          0009 (9)\n-52EB48 Comment Length        0000 (0)\n-52EB4A Disk Start            0000 (0)\n-52EB4C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52EB4E Ext File Attributes   00000000 (0)\n-52EB52 Local Header Offset   0001EFCE (126926)\n-52EB56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52EB56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52EBC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EBC8   Length              0005 (5)\n-52EBCA   Flags               01 (1) 'Modification'\n-52EBCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EBCF CENTRAL HEADER #49    02014B50 (33639248)\n-52EBD3 Created Zip Spec      14 (20) '2.0'\n-52EBD4 Created OS            00 (0) 'MS-DOS'\n-52EBD5 Extract Zip Spec      14 (20) '2.0'\n-52EBD6 Extract OS            00 (0) 'MS-DOS'\n-52EBD7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52EBD9 Compression Method    0000 (0) 'Stored'\n-52EBDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EBDF CRC                   63086228 (1661493800)\n-52EBE3 Compressed Size       00000838 (2104)\n-52EBE7 Uncompressed Size     00000838 (2104)\n-52EBEB Filename Length       0086 (134)\n-52EBED Extra Length          0009 (9)\n-52EBEF Comment Length        0000 (0)\n-52EBF1 Disk Start            0000 (0)\n-52EBF3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52EBF5 Ext File Attributes   00000000 (0)\n-52EBF9 Local Header Offset   0001F065 (127077)\n-52EBFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52EA9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52EAA0   Length              0005 (5)\n+52EAA2   Flags               01 (1) 'Modification'\n+52EAA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52EAA7 CENTRAL HEADER #48    02014B50 (33639248)\n+52EAAB Created Zip Spec      14 (20) '2.0'\n+52EAAC Created OS            00 (0) 'MS-DOS'\n+52EAAD Extract Zip Spec      14 (20) '2.0'\n+52EAAE Extract OS            00 (0) 'MS-DOS'\n+52EAAF General Purpose Flag  0000 (0)\n+52EAB1 Compression Method    0000 (0) 'Stored'\n+52EAB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52EAB7 CRC                   00000000 (0)\n+52EABB Compressed Size       00000000 (0)\n+52EABF Uncompressed Size     00000000 (0)\n+52EAC3 Filename Length       0070 (112)\n+52EAC5 Extra Length          0009 (9)\n+52EAC7 Comment Length        0000 (0)\n+52EAC9 Disk Start            0000 (0)\n+52EACB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EACD Ext File Attributes   00000000 (0)\n+52EAD1 Local Header Offset   0001EF65 (126821)\n+52EAD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52EAD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52EB45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52EB47   Length              0005 (5)\n+52EB49   Flags               01 (1) 'Modification'\n+52EB4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52EB4E CENTRAL HEADER #49    02014B50 (33639248)\n+52EB52 Created Zip Spec      14 (20) '2.0'\n+52EB53 Created OS            00 (0) 'MS-DOS'\n+52EB54 Extract Zip Spec      14 (20) '2.0'\n+52EB55 Extract OS            00 (0) 'MS-DOS'\n+52EB56 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52EB58 Compression Method    0000 (0) 'Stored'\n+52EB5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52EB5E CRC                   63086228 (1661493800)\n+52EB62 Compressed Size       00000838 (2104)\n+52EB66 Uncompressed Size     00000838 (2104)\n+52EB6A Filename Length       0086 (134)\n+52EB6C Extra Length          0009 (9)\n+52EB6E Comment Length        0000 (0)\n+52EB70 Disk Start            0000 (0)\n+52EB72 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EB74 Ext File Attributes   00000000 (0)\n+52EB78 Local Header Offset   0001EFFC (126972)\n+52EB7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x52EBFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52EB7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52EC83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EC85   Length              0005 (5)\n-52EC87   Flags               01 (1) 'Modification'\n-52EC88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EC8C CENTRAL HEADER #50    02014B50 (33639248)\n-52EC90 Created Zip Spec      14 (20) '2.0'\n-52EC91 Created OS            00 (0) 'MS-DOS'\n-52EC92 Extract Zip Spec      14 (20) '2.0'\n-52EC93 Extract OS            00 (0) 'MS-DOS'\n-52EC94 General Purpose Flag  0000 (0)\n-52EC96 Compression Method    0000 (0) 'Stored'\n-52EC98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EC9C CRC                   00000000 (0)\n-52ECA0 Compressed Size       00000000 (0)\n-52ECA4 Uncompressed Size     00000000 (0)\n-52ECA8 Filename Length       006C (108)\n-52ECAA Extra Length          0009 (9)\n-52ECAC Comment Length        0000 (0)\n-52ECAE Disk Start            0000 (0)\n-52ECB0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52ECB2 Ext File Attributes   00000000 (0)\n-52ECB6 Local Header Offset   0001F95A (129370)\n-52ECBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52ECBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52ED26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52ED28   Length              0005 (5)\n-52ED2A   Flags               01 (1) 'Modification'\n-52ED2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52ED2F CENTRAL HEADER #51    02014B50 (33639248)\n-52ED33 Created Zip Spec      14 (20) '2.0'\n-52ED34 Created OS            00 (0) 'MS-DOS'\n-52ED35 Extract Zip Spec      14 (20) '2.0'\n-52ED36 Extract OS            00 (0) 'MS-DOS'\n-52ED37 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52ED39 Compression Method    0000 (0) 'Stored'\n-52ED3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52ED3F CRC                   9EF621C1 (2666930625)\n-52ED43 Compressed Size       00000C90 (3216)\n-52ED47 Uncompressed Size     00000C90 (3216)\n-52ED4B Filename Length       0082 (130)\n-52ED4D Extra Length          0009 (9)\n-52ED4F Comment Length        0000 (0)\n-52ED51 Disk Start            0000 (0)\n-52ED53 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52ED55 Ext File Attributes   00000000 (0)\n-52ED59 Local Header Offset   0001F9ED (129517)\n-52ED5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52ED5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52EDDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EDE1   Length              0005 (5)\n-52EDE3   Flags               01 (1) 'Modification'\n-52EDE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EDE8 CENTRAL HEADER #52    02014B50 (33639248)\n-52EDEC Created Zip Spec      14 (20) '2.0'\n-52EDED Created OS            00 (0) 'MS-DOS'\n-52EDEE Extract Zip Spec      14 (20) '2.0'\n-52EDEF Extract OS            00 (0) 'MS-DOS'\n-52EDF0 General Purpose Flag  0000 (0)\n-52EDF2 Compression Method    0000 (0) 'Stored'\n-52EDF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EDF8 CRC                   00000000 (0)\n-52EDFC Compressed Size       00000000 (0)\n-52EE00 Uncompressed Size     00000000 (0)\n-52EE04 Filename Length       0054 (84)\n-52EE06 Extra Length          0009 (9)\n-52EE08 Comment Length        0000 (0)\n-52EE0A Disk Start            0000 (0)\n-52EE0C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52EE0E Ext File Attributes   00000000 (0)\n-52EE12 Local Header Offset   00020736 (132918)\n-52EE16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52EE16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52EE6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EE6C   Length              0005 (5)\n-52EE6E   Flags               01 (1) 'Modification'\n-52EE6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EE73 CENTRAL HEADER #53    02014B50 (33639248)\n-52EE77 Created Zip Spec      14 (20) '2.0'\n-52EE78 Created OS            00 (0) 'MS-DOS'\n-52EE79 Extract Zip Spec      14 (20) '2.0'\n-52EE7A Extract OS            00 (0) 'MS-DOS'\n-52EE7B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52EE7D Compression Method    0000 (0) 'Stored'\n-52EE7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EE83 CRC                   6BE0FFE8 (1809907688)\n-52EE87 Compressed Size       00000EF6 (3830)\n-52EE8B Uncompressed Size     00000EF6 (3830)\n-52EE8F Filename Length       006A (106)\n-52EE91 Extra Length          0009 (9)\n-52EE93 Comment Length        0000 (0)\n-52EE95 Disk Start            0000 (0)\n-52EE97 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52EE99 Ext File Attributes   00000000 (0)\n-52EE9D Local Header Offset   000207B1 (133041)\n-52EEA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52EEA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52EF0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EF0D   Length              0005 (5)\n-52EF0F   Flags               01 (1) 'Modification'\n-52EF10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EF14 CENTRAL HEADER #54    02014B50 (33639248)\n-52EF18 Created Zip Spec      14 (20) '2.0'\n-52EF19 Created OS            00 (0) 'MS-DOS'\n-52EF1A Extract Zip Spec      14 (20) '2.0'\n-52EF1B Extract OS            00 (0) 'MS-DOS'\n-52EF1C General Purpose Flag  0000 (0)\n-52EF1E Compression Method    0000 (0) 'Stored'\n-52EF20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EF24 CRC                   00000000 (0)\n-52EF28 Compressed Size       00000000 (0)\n-52EF2C Uncompressed Size     00000000 (0)\n-52EF30 Filename Length       0059 (89)\n-52EF32 Extra Length          0009 (9)\n-52EF34 Comment Length        0000 (0)\n-52EF36 Disk Start            0000 (0)\n-52EF38 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52EF3A Ext File Attributes   00000000 (0)\n-52EF3E Local Header Offset   00021748 (137032)\n-52EF42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52EF42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52EF9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52EF9D   Length              0005 (5)\n-52EF9F   Flags               01 (1) 'Modification'\n-52EFA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52EFA4 CENTRAL HEADER #55    02014B50 (33639248)\n-52EFA8 Created Zip Spec      14 (20) '2.0'\n-52EFA9 Created OS            00 (0) 'MS-DOS'\n-52EFAA Extract Zip Spec      14 (20) '2.0'\n-52EFAB Extract OS            00 (0) 'MS-DOS'\n-52EFAC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52EFAE Compression Method    0000 (0) 'Stored'\n-52EFB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52EFB4 CRC                   8743913D (2269352253)\n-52EFB8 Compressed Size       00000C44 (3140)\n-52EFBC Uncompressed Size     00000C44 (3140)\n-52EFC0 Filename Length       006F (111)\n-52EFC2 Extra Length          0009 (9)\n-52EFC4 Comment Length        0000 (0)\n-52EFC6 Disk Start            0000 (0)\n-52EFC8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52EFCA Ext File Attributes   00000000 (0)\n-52EFCE Local Header Offset   000217C8 (137160)\n-52EFD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52EFD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F041 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F043   Length              0005 (5)\n-52F045   Flags               01 (1) 'Modification'\n-52F046   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F04A CENTRAL HEADER #56    02014B50 (33639248)\n-52F04E Created Zip Spec      14 (20) '2.0'\n-52F04F Created OS            00 (0) 'MS-DOS'\n-52F050 Extract Zip Spec      14 (20) '2.0'\n-52F051 Extract OS            00 (0) 'MS-DOS'\n-52F052 General Purpose Flag  0000 (0)\n-52F054 Compression Method    0000 (0) 'Stored'\n-52F056 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F05A CRC                   00000000 (0)\n-52F05E Compressed Size       00000000 (0)\n-52F062 Uncompressed Size     00000000 (0)\n-52F066 Filename Length       0074 (116)\n-52F068 Extra Length          0009 (9)\n-52F06A Comment Length        0000 (0)\n-52F06C Disk Start            0000 (0)\n-52F06E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F070 Ext File Attributes   00000000 (0)\n-52F074 Local Header Offset   000224B2 (140466)\n-52F078 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F078: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F0EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F0EE   Length              0005 (5)\n-52F0F0   Flags               01 (1) 'Modification'\n-52F0F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F0F5 CENTRAL HEADER #57    02014B50 (33639248)\n-52F0F9 Created Zip Spec      14 (20) '2.0'\n-52F0FA Created OS            00 (0) 'MS-DOS'\n-52F0FB Extract Zip Spec      14 (20) '2.0'\n-52F0FC Extract OS            00 (0) 'MS-DOS'\n-52F0FD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52F0FF Compression Method    0000 (0) 'Stored'\n-52F101 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F105 CRC                   07A59EC9 (128294601)\n-52F109 Compressed Size       00000C29 (3113)\n-52F10D Uncompressed Size     00000C29 (3113)\n-52F111 Filename Length       008A (138)\n-52F113 Extra Length          0009 (9)\n-52F115 Comment Length        0000 (0)\n-52F117 Disk Start            0000 (0)\n-52F119 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F11B Ext File Attributes   00000000 (0)\n-52F11F Local Header Offset   0002254D (140621)\n-52F123 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52EC02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52EC04   Length              0005 (5)\n+52EC06   Flags               01 (1) 'Modification'\n+52EC07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52EC0B CENTRAL HEADER #50    02014B50 (33639248)\n+52EC0F Created Zip Spec      14 (20) '2.0'\n+52EC10 Created OS            00 (0) 'MS-DOS'\n+52EC11 Extract Zip Spec      14 (20) '2.0'\n+52EC12 Extract OS            00 (0) 'MS-DOS'\n+52EC13 General Purpose Flag  0000 (0)\n+52EC15 Compression Method    0000 (0) 'Stored'\n+52EC17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52EC1B CRC                   00000000 (0)\n+52EC1F Compressed Size       00000000 (0)\n+52EC23 Uncompressed Size     00000000 (0)\n+52EC27 Filename Length       006C (108)\n+52EC29 Extra Length          0009 (9)\n+52EC2B Comment Length        0000 (0)\n+52EC2D Disk Start            0000 (0)\n+52EC2F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EC31 Ext File Attributes   00000000 (0)\n+52EC35 Local Header Offset   0001F8F1 (129265)\n+52EC39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52EC39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52ECA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52ECA7   Length              0005 (5)\n+52ECA9   Flags               01 (1) 'Modification'\n+52ECAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52ECAE CENTRAL HEADER #51    02014B50 (33639248)\n+52ECB2 Created Zip Spec      14 (20) '2.0'\n+52ECB3 Created OS            00 (0) 'MS-DOS'\n+52ECB4 Extract Zip Spec      14 (20) '2.0'\n+52ECB5 Extract OS            00 (0) 'MS-DOS'\n+52ECB6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52ECB8 Compression Method    0000 (0) 'Stored'\n+52ECBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52ECBE CRC                   9EF621C1 (2666930625)\n+52ECC2 Compressed Size       00000C90 (3216)\n+52ECC6 Uncompressed Size     00000C90 (3216)\n+52ECCA Filename Length       0082 (130)\n+52ECCC Extra Length          0009 (9)\n+52ECCE Comment Length        0000 (0)\n+52ECD0 Disk Start            0000 (0)\n+52ECD2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52ECD4 Ext File Attributes   00000000 (0)\n+52ECD8 Local Header Offset   0001F984 (129412)\n+52ECDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52ECDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52ED5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52ED60   Length              0005 (5)\n+52ED62   Flags               01 (1) 'Modification'\n+52ED63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52ED67 CENTRAL HEADER #52    02014B50 (33639248)\n+52ED6B Created Zip Spec      14 (20) '2.0'\n+52ED6C Created OS            00 (0) 'MS-DOS'\n+52ED6D Extract Zip Spec      14 (20) '2.0'\n+52ED6E Extract OS            00 (0) 'MS-DOS'\n+52ED6F General Purpose Flag  0000 (0)\n+52ED71 Compression Method    0000 (0) 'Stored'\n+52ED73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52ED77 CRC                   00000000 (0)\n+52ED7B Compressed Size       00000000 (0)\n+52ED7F Uncompressed Size     00000000 (0)\n+52ED83 Filename Length       0054 (84)\n+52ED85 Extra Length          0009 (9)\n+52ED87 Comment Length        0000 (0)\n+52ED89 Disk Start            0000 (0)\n+52ED8B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52ED8D Ext File Attributes   00000000 (0)\n+52ED91 Local Header Offset   000206CD (132813)\n+52ED95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52ED95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52EDE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52EDEB   Length              0005 (5)\n+52EDED   Flags               01 (1) 'Modification'\n+52EDEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52EDF2 CENTRAL HEADER #53    02014B50 (33639248)\n+52EDF6 Created Zip Spec      14 (20) '2.0'\n+52EDF7 Created OS            00 (0) 'MS-DOS'\n+52EDF8 Extract Zip Spec      14 (20) '2.0'\n+52EDF9 Extract OS            00 (0) 'MS-DOS'\n+52EDFA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52EDFC Compression Method    0000 (0) 'Stored'\n+52EDFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52EE02 CRC                   6BE0FFE8 (1809907688)\n+52EE06 Compressed Size       00000EF6 (3830)\n+52EE0A Uncompressed Size     00000EF6 (3830)\n+52EE0E Filename Length       006A (106)\n+52EE10 Extra Length          0009 (9)\n+52EE12 Comment Length        0000 (0)\n+52EE14 Disk Start            0000 (0)\n+52EE16 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EE18 Ext File Attributes   00000000 (0)\n+52EE1C Local Header Offset   00020748 (132936)\n+52EE20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52EE20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52EE8A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52EE8C   Length              0005 (5)\n+52EE8E   Flags               01 (1) 'Modification'\n+52EE8F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52EE93 CENTRAL HEADER #54    02014B50 (33639248)\n+52EE97 Created Zip Spec      14 (20) '2.0'\n+52EE98 Created OS            00 (0) 'MS-DOS'\n+52EE99 Extract Zip Spec      14 (20) '2.0'\n+52EE9A Extract OS            00 (0) 'MS-DOS'\n+52EE9B General Purpose Flag  0000 (0)\n+52EE9D Compression Method    0000 (0) 'Stored'\n+52EE9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52EEA3 CRC                   00000000 (0)\n+52EEA7 Compressed Size       00000000 (0)\n+52EEAB Uncompressed Size     00000000 (0)\n+52EEAF Filename Length       0059 (89)\n+52EEB1 Extra Length          0009 (9)\n+52EEB3 Comment Length        0000 (0)\n+52EEB5 Disk Start            0000 (0)\n+52EEB7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EEB9 Ext File Attributes   00000000 (0)\n+52EEBD Local Header Offset   000216DF (136927)\n+52EEC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52EEC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52EF1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52EF1C   Length              0005 (5)\n+52EF1E   Flags               01 (1) 'Modification'\n+52EF1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52EF23 CENTRAL HEADER #55    02014B50 (33639248)\n+52EF27 Created Zip Spec      14 (20) '2.0'\n+52EF28 Created OS            00 (0) 'MS-DOS'\n+52EF29 Extract Zip Spec      14 (20) '2.0'\n+52EF2A Extract OS            00 (0) 'MS-DOS'\n+52EF2B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52EF2D Compression Method    0000 (0) 'Stored'\n+52EF2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52EF33 CRC                   8743913D (2269352253)\n+52EF37 Compressed Size       00000C44 (3140)\n+52EF3B Uncompressed Size     00000C44 (3140)\n+52EF3F Filename Length       006F (111)\n+52EF41 Extra Length          0009 (9)\n+52EF43 Comment Length        0000 (0)\n+52EF45 Disk Start            0000 (0)\n+52EF47 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EF49 Ext File Attributes   00000000 (0)\n+52EF4D Local Header Offset   0002175F (137055)\n+52EF51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52EF51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52EFC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52EFC2   Length              0005 (5)\n+52EFC4   Flags               01 (1) 'Modification'\n+52EFC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52EFC9 CENTRAL HEADER #56    02014B50 (33639248)\n+52EFCD Created Zip Spec      14 (20) '2.0'\n+52EFCE Created OS            00 (0) 'MS-DOS'\n+52EFCF Extract Zip Spec      14 (20) '2.0'\n+52EFD0 Extract OS            00 (0) 'MS-DOS'\n+52EFD1 General Purpose Flag  0000 (0)\n+52EFD3 Compression Method    0000 (0) 'Stored'\n+52EFD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52EFD9 CRC                   00000000 (0)\n+52EFDD Compressed Size       00000000 (0)\n+52EFE1 Uncompressed Size     00000000 (0)\n+52EFE5 Filename Length       0074 (116)\n+52EFE7 Extra Length          0009 (9)\n+52EFE9 Comment Length        0000 (0)\n+52EFEB Disk Start            0000 (0)\n+52EFED Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52EFEF Ext File Attributes   00000000 (0)\n+52EFF3 Local Header Offset   00022449 (140361)\n+52EFF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52EFF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F06B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F06D   Length              0005 (5)\n+52F06F   Flags               01 (1) 'Modification'\n+52F070   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F074 CENTRAL HEADER #57    02014B50 (33639248)\n+52F078 Created Zip Spec      14 (20) '2.0'\n+52F079 Created OS            00 (0) 'MS-DOS'\n+52F07A Extract Zip Spec      14 (20) '2.0'\n+52F07B Extract OS            00 (0) 'MS-DOS'\n+52F07C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52F07E Compression Method    0000 (0) 'Stored'\n+52F080 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F084 CRC                   07A59EC9 (128294601)\n+52F088 Compressed Size       00000C29 (3113)\n+52F08C Uncompressed Size     00000C29 (3113)\n+52F090 Filename Length       008A (138)\n+52F092 Extra Length          0009 (9)\n+52F094 Comment Length        0000 (0)\n+52F096 Disk Start            0000 (0)\n+52F098 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F09A Ext File Attributes   00000000 (0)\n+52F09E Local Header Offset   000224E4 (140516)\n+52F0A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0x52F123: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52F0A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52F1AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F1AF   Length              0005 (5)\n-52F1B1   Flags               01 (1) 'Modification'\n-52F1B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F1B6 CENTRAL HEADER #58    02014B50 (33639248)\n-52F1BA Created Zip Spec      14 (20) '2.0'\n-52F1BB Created OS            00 (0) 'MS-DOS'\n-52F1BC Extract Zip Spec      14 (20) '2.0'\n-52F1BD Extract OS            00 (0) 'MS-DOS'\n-52F1BE General Purpose Flag  0000 (0)\n-52F1C0 Compression Method    0000 (0) 'Stored'\n-52F1C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F1C6 CRC                   00000000 (0)\n-52F1CA Compressed Size       00000000 (0)\n-52F1CE Uncompressed Size     00000000 (0)\n-52F1D2 Filename Length       0024 (36)\n-52F1D4 Extra Length          0009 (9)\n-52F1D6 Comment Length        0000 (0)\n-52F1D8 Disk Start            0000 (0)\n-52F1DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F1DC Ext File Attributes   00000000 (0)\n-52F1E0 Local Header Offset   00023237 (143927)\n-52F1E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F1E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F208 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F20A   Length              0005 (5)\n-52F20C   Flags               01 (1) 'Modification'\n-52F20D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F211 CENTRAL HEADER #59    02014B50 (33639248)\n-52F215 Created Zip Spec      14 (20) '2.0'\n-52F216 Created OS            00 (0) 'MS-DOS'\n-52F217 Extract Zip Spec      14 (20) '2.0'\n-52F218 Extract OS            00 (0) 'MS-DOS'\n-52F219 General Purpose Flag  0000 (0)\n-52F21B Compression Method    0000 (0) 'Stored'\n-52F21D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F221 CRC                   00000000 (0)\n-52F225 Compressed Size       00000000 (0)\n-52F229 Uncompressed Size     00000000 (0)\n-52F22D Filename Length       002D (45)\n-52F22F Extra Length          0009 (9)\n-52F231 Comment Length        0000 (0)\n-52F233 Disk Start            0000 (0)\n-52F235 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F237 Ext File Attributes   00000000 (0)\n-52F23B Local Header Offset   00023282 (144002)\n-52F23F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F23F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F26C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F26E   Length              0005 (5)\n-52F270   Flags               01 (1) 'Modification'\n-52F271   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F275 CENTRAL HEADER #60    02014B50 (33639248)\n-52F279 Created Zip Spec      14 (20) '2.0'\n-52F27A Created OS            00 (0) 'MS-DOS'\n-52F27B Extract Zip Spec      14 (20) '2.0'\n-52F27C Extract OS            00 (0) 'MS-DOS'\n-52F27D General Purpose Flag  0000 (0)\n-52F27F Compression Method    0000 (0) 'Stored'\n-52F281 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F285 CRC                   00000000 (0)\n-52F289 Compressed Size       00000000 (0)\n-52F28D Uncompressed Size     00000000 (0)\n-52F291 Filename Length       0073 (115)\n-52F293 Extra Length          0009 (9)\n-52F295 Comment Length        0000 (0)\n-52F297 Disk Start            0000 (0)\n-52F299 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F29B Ext File Attributes   00000000 (0)\n-52F29F Local Header Offset   000232D6 (144086)\n-52F2A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F2A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F316 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F318   Length              0005 (5)\n-52F31A   Flags               01 (1) 'Modification'\n-52F31B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F31F CENTRAL HEADER #61    02014B50 (33639248)\n-52F323 Created Zip Spec      14 (20) '2.0'\n-52F324 Created OS            00 (0) 'MS-DOS'\n-52F325 Extract Zip Spec      14 (20) '2.0'\n-52F326 Extract OS            00 (0) 'MS-DOS'\n-52F327 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52F329 Compression Method    0000 (0) 'Stored'\n-52F32B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F32F CRC                   FD79F819 (4252629017)\n-52F333 Compressed Size       00000A3A (2618)\n-52F337 Uncompressed Size     00000A3A (2618)\n-52F33B Filename Length       0089 (137)\n-52F33D Extra Length          0009 (9)\n-52F33F Comment Length        0000 (0)\n-52F341 Disk Start            0000 (0)\n-52F343 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F345 Ext File Attributes   00000000 (0)\n-52F349 Local Header Offset   00023370 (144240)\n-52F34D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52F12C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F12E   Length              0005 (5)\n+52F130   Flags               01 (1) 'Modification'\n+52F131   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F135 CENTRAL HEADER #58    02014B50 (33639248)\n+52F139 Created Zip Spec      14 (20) '2.0'\n+52F13A Created OS            00 (0) 'MS-DOS'\n+52F13B Extract Zip Spec      14 (20) '2.0'\n+52F13C Extract OS            00 (0) 'MS-DOS'\n+52F13D General Purpose Flag  0000 (0)\n+52F13F Compression Method    0000 (0) 'Stored'\n+52F141 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F145 CRC                   00000000 (0)\n+52F149 Compressed Size       00000000 (0)\n+52F14D Uncompressed Size     00000000 (0)\n+52F151 Filename Length       0024 (36)\n+52F153 Extra Length          0009 (9)\n+52F155 Comment Length        0000 (0)\n+52F157 Disk Start            0000 (0)\n+52F159 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F15B Ext File Attributes   00000000 (0)\n+52F15F Local Header Offset   000231CE (143822)\n+52F163 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F163: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F187 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F189   Length              0005 (5)\n+52F18B   Flags               01 (1) 'Modification'\n+52F18C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F190 CENTRAL HEADER #59    02014B50 (33639248)\n+52F194 Created Zip Spec      14 (20) '2.0'\n+52F195 Created OS            00 (0) 'MS-DOS'\n+52F196 Extract Zip Spec      14 (20) '2.0'\n+52F197 Extract OS            00 (0) 'MS-DOS'\n+52F198 General Purpose Flag  0000 (0)\n+52F19A Compression Method    0000 (0) 'Stored'\n+52F19C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F1A0 CRC                   00000000 (0)\n+52F1A4 Compressed Size       00000000 (0)\n+52F1A8 Uncompressed Size     00000000 (0)\n+52F1AC Filename Length       002D (45)\n+52F1AE Extra Length          0009 (9)\n+52F1B0 Comment Length        0000 (0)\n+52F1B2 Disk Start            0000 (0)\n+52F1B4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F1B6 Ext File Attributes   00000000 (0)\n+52F1BA Local Header Offset   00023219 (143897)\n+52F1BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F1BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F1EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F1ED   Length              0005 (5)\n+52F1EF   Flags               01 (1) 'Modification'\n+52F1F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F1F4 CENTRAL HEADER #60    02014B50 (33639248)\n+52F1F8 Created Zip Spec      14 (20) '2.0'\n+52F1F9 Created OS            00 (0) 'MS-DOS'\n+52F1FA Extract Zip Spec      14 (20) '2.0'\n+52F1FB Extract OS            00 (0) 'MS-DOS'\n+52F1FC General Purpose Flag  0000 (0)\n+52F1FE Compression Method    0000 (0) 'Stored'\n+52F200 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F204 CRC                   00000000 (0)\n+52F208 Compressed Size       00000000 (0)\n+52F20C Uncompressed Size     00000000 (0)\n+52F210 Filename Length       0073 (115)\n+52F212 Extra Length          0009 (9)\n+52F214 Comment Length        0000 (0)\n+52F216 Disk Start            0000 (0)\n+52F218 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F21A Ext File Attributes   00000000 (0)\n+52F21E Local Header Offset   0002326D (143981)\n+52F222 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F222: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F295 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F297   Length              0005 (5)\n+52F299   Flags               01 (1) 'Modification'\n+52F29A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F29E CENTRAL HEADER #61    02014B50 (33639248)\n+52F2A2 Created Zip Spec      14 (20) '2.0'\n+52F2A3 Created OS            00 (0) 'MS-DOS'\n+52F2A4 Extract Zip Spec      14 (20) '2.0'\n+52F2A5 Extract OS            00 (0) 'MS-DOS'\n+52F2A6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52F2A8 Compression Method    0000 (0) 'Stored'\n+52F2AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F2AE CRC                   FD79F819 (4252629017)\n+52F2B2 Compressed Size       00000A3A (2618)\n+52F2B6 Uncompressed Size     00000A3A (2618)\n+52F2BA Filename Length       0089 (137)\n+52F2BC Extra Length          0009 (9)\n+52F2BE Comment Length        0000 (0)\n+52F2C0 Disk Start            0000 (0)\n+52F2C2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F2C4 Ext File Attributes   00000000 (0)\n+52F2C8 Local Header Offset   00023307 (144135)\n+52F2CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXX'\n #\n-# WARNING: Offset 0x52F34D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52F2CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52F3D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F3D8   Length              0005 (5)\n-52F3DA   Flags               01 (1) 'Modification'\n-52F3DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F3DF CENTRAL HEADER #62    02014B50 (33639248)\n-52F3E3 Created Zip Spec      14 (20) '2.0'\n-52F3E4 Created OS            00 (0) 'MS-DOS'\n-52F3E5 Extract Zip Spec      14 (20) '2.0'\n-52F3E6 Extract OS            00 (0) 'MS-DOS'\n-52F3E7 General Purpose Flag  0000 (0)\n-52F3E9 Compression Method    0000 (0) 'Stored'\n-52F3EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F3EF CRC                   00000000 (0)\n-52F3F3 Compressed Size       00000000 (0)\n-52F3F7 Uncompressed Size     00000000 (0)\n-52F3FB Filename Length       006E (110)\n-52F3FD Extra Length          0009 (9)\n-52F3FF Comment Length        0000 (0)\n-52F401 Disk Start            0000 (0)\n-52F403 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F405 Ext File Attributes   00000000 (0)\n-52F409 Local Header Offset   00023E6A (147050)\n-52F40D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F40D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F47B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F47D   Length              0005 (5)\n-52F47F   Flags               01 (1) 'Modification'\n-52F480   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F484 CENTRAL HEADER #63    02014B50 (33639248)\n-52F488 Created Zip Spec      14 (20) '2.0'\n-52F489 Created OS            00 (0) 'MS-DOS'\n-52F48A Extract Zip Spec      14 (20) '2.0'\n-52F48B Extract OS            00 (0) 'MS-DOS'\n-52F48C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52F48E Compression Method    0000 (0) 'Stored'\n-52F490 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F494 CRC                   63D24DDE (1674726878)\n-52F498 Compressed Size       00000E46 (3654)\n-52F49C Uncompressed Size     00000E46 (3654)\n-52F4A0 Filename Length       0084 (132)\n-52F4A2 Extra Length          0009 (9)\n-52F4A4 Comment Length        0000 (0)\n-52F4A6 Disk Start            0000 (0)\n-52F4A8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F4AA Ext File Attributes   00000000 (0)\n-52F4AE Local Header Offset   00023EFF (147199)\n-52F4B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52F355 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F357   Length              0005 (5)\n+52F359   Flags               01 (1) 'Modification'\n+52F35A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F35E CENTRAL HEADER #62    02014B50 (33639248)\n+52F362 Created Zip Spec      14 (20) '2.0'\n+52F363 Created OS            00 (0) 'MS-DOS'\n+52F364 Extract Zip Spec      14 (20) '2.0'\n+52F365 Extract OS            00 (0) 'MS-DOS'\n+52F366 General Purpose Flag  0000 (0)\n+52F368 Compression Method    0000 (0) 'Stored'\n+52F36A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F36E CRC                   00000000 (0)\n+52F372 Compressed Size       00000000 (0)\n+52F376 Uncompressed Size     00000000 (0)\n+52F37A Filename Length       006E (110)\n+52F37C Extra Length          0009 (9)\n+52F37E Comment Length        0000 (0)\n+52F380 Disk Start            0000 (0)\n+52F382 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F384 Ext File Attributes   00000000 (0)\n+52F388 Local Header Offset   00023E01 (146945)\n+52F38C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F38C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F3FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F3FC   Length              0005 (5)\n+52F3FE   Flags               01 (1) 'Modification'\n+52F3FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F403 CENTRAL HEADER #63    02014B50 (33639248)\n+52F407 Created Zip Spec      14 (20) '2.0'\n+52F408 Created OS            00 (0) 'MS-DOS'\n+52F409 Extract Zip Spec      14 (20) '2.0'\n+52F40A Extract OS            00 (0) 'MS-DOS'\n+52F40B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52F40D Compression Method    0000 (0) 'Stored'\n+52F40F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F413 CRC                   63D24DDE (1674726878)\n+52F417 Compressed Size       00000E46 (3654)\n+52F41B Uncompressed Size     00000E46 (3654)\n+52F41F Filename Length       0084 (132)\n+52F421 Extra Length          0009 (9)\n+52F423 Comment Length        0000 (0)\n+52F425 Disk Start            0000 (0)\n+52F427 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F429 Ext File Attributes   00000000 (0)\n+52F42D Local Header Offset   00023E96 (147094)\n+52F431 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x52F4B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52F431: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52F536 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F538   Length              0005 (5)\n-52F53A   Flags               01 (1) 'Modification'\n-52F53B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F53F CENTRAL HEADER #64    02014B50 (33639248)\n-52F543 Created Zip Spec      14 (20) '2.0'\n-52F544 Created OS            00 (0) 'MS-DOS'\n-52F545 Extract Zip Spec      14 (20) '2.0'\n-52F546 Extract OS            00 (0) 'MS-DOS'\n-52F547 General Purpose Flag  0000 (0)\n-52F549 Compression Method    0000 (0) 'Stored'\n-52F54B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F54F CRC                   00000000 (0)\n-52F553 Compressed Size       00000000 (0)\n-52F557 Uncompressed Size     00000000 (0)\n-52F55B Filename Length       0075 (117)\n-52F55D Extra Length          0009 (9)\n-52F55F Comment Length        0000 (0)\n-52F561 Disk Start            0000 (0)\n-52F563 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F565 Ext File Attributes   00000000 (0)\n-52F569 Local Header Offset   00024E00 (151040)\n-52F56D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F56D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F5E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F5E4   Length              0005 (5)\n-52F5E6   Flags               01 (1) 'Modification'\n-52F5E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F5EB CENTRAL HEADER #65    02014B50 (33639248)\n-52F5EF Created Zip Spec      14 (20) '2.0'\n-52F5F0 Created OS            00 (0) 'MS-DOS'\n-52F5F1 Extract Zip Spec      14 (20) '2.0'\n-52F5F2 Extract OS            00 (0) 'MS-DOS'\n-52F5F3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52F5F5 Compression Method    0000 (0) 'Stored'\n-52F5F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F5FB CRC                   2E17013D (773259581)\n-52F5FF Compressed Size       00000888 (2184)\n-52F603 Uncompressed Size     00000888 (2184)\n-52F607 Filename Length       008B (139)\n-52F609 Extra Length          0009 (9)\n-52F60B Comment Length        0000 (0)\n-52F60D Disk Start            0000 (0)\n-52F60F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F611 Ext File Attributes   00000000 (0)\n-52F615 Local Header Offset   00024E9C (151196)\n-52F619 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52F4B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F4B7   Length              0005 (5)\n+52F4B9   Flags               01 (1) 'Modification'\n+52F4BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F4BE CENTRAL HEADER #64    02014B50 (33639248)\n+52F4C2 Created Zip Spec      14 (20) '2.0'\n+52F4C3 Created OS            00 (0) 'MS-DOS'\n+52F4C4 Extract Zip Spec      14 (20) '2.0'\n+52F4C5 Extract OS            00 (0) 'MS-DOS'\n+52F4C6 General Purpose Flag  0000 (0)\n+52F4C8 Compression Method    0000 (0) 'Stored'\n+52F4CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F4CE CRC                   00000000 (0)\n+52F4D2 Compressed Size       00000000 (0)\n+52F4D6 Uncompressed Size     00000000 (0)\n+52F4DA Filename Length       0075 (117)\n+52F4DC Extra Length          0009 (9)\n+52F4DE Comment Length        0000 (0)\n+52F4E0 Disk Start            0000 (0)\n+52F4E2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F4E4 Ext File Attributes   00000000 (0)\n+52F4E8 Local Header Offset   00024D97 (150935)\n+52F4EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F4EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F561 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F563   Length              0005 (5)\n+52F565   Flags               01 (1) 'Modification'\n+52F566   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F56A CENTRAL HEADER #65    02014B50 (33639248)\n+52F56E Created Zip Spec      14 (20) '2.0'\n+52F56F Created OS            00 (0) 'MS-DOS'\n+52F570 Extract Zip Spec      14 (20) '2.0'\n+52F571 Extract OS            00 (0) 'MS-DOS'\n+52F572 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52F574 Compression Method    0000 (0) 'Stored'\n+52F576 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F57A CRC                   2E17013D (773259581)\n+52F57E Compressed Size       00000888 (2184)\n+52F582 Uncompressed Size     00000888 (2184)\n+52F586 Filename Length       008B (139)\n+52F588 Extra Length          0009 (9)\n+52F58A Comment Length        0000 (0)\n+52F58C Disk Start            0000 (0)\n+52F58E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F590 Ext File Attributes   00000000 (0)\n+52F594 Local Header Offset   00024E33 (151091)\n+52F598 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0x52F619: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52F598: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52F6A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F6A6   Length              0005 (5)\n-52F6A8   Flags               01 (1) 'Modification'\n-52F6A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F6AD CENTRAL HEADER #66    02014B50 (33639248)\n-52F6B1 Created Zip Spec      14 (20) '2.0'\n-52F6B2 Created OS            00 (0) 'MS-DOS'\n-52F6B3 Extract Zip Spec      14 (20) '2.0'\n-52F6B4 Extract OS            00 (0) 'MS-DOS'\n-52F6B5 General Purpose Flag  0000 (0)\n-52F6B7 Compression Method    0000 (0) 'Stored'\n-52F6B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F6BD CRC                   00000000 (0)\n-52F6C1 Compressed Size       00000000 (0)\n-52F6C5 Uncompressed Size     00000000 (0)\n-52F6C9 Filename Length       0022 (34)\n-52F6CB Extra Length          0009 (9)\n-52F6CD Comment Length        0000 (0)\n-52F6CF Disk Start            0000 (0)\n-52F6D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F6D3 Ext File Attributes   00000000 (0)\n-52F6D7 Local Header Offset   000257E6 (153574)\n-52F6DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F6DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F6FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F6FF   Length              0005 (5)\n-52F701   Flags               01 (1) 'Modification'\n-52F702   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F706 CENTRAL HEADER #67    02014B50 (33639248)\n-52F70A Created Zip Spec      14 (20) '2.0'\n-52F70B Created OS            00 (0) 'MS-DOS'\n-52F70C Extract Zip Spec      14 (20) '2.0'\n-52F70D Extract OS            00 (0) 'MS-DOS'\n-52F70E General Purpose Flag  0000 (0)\n-52F710 Compression Method    0000 (0) 'Stored'\n-52F712 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F716 CRC                   00000000 (0)\n-52F71A Compressed Size       00000000 (0)\n-52F71E Uncompressed Size     00000000 (0)\n-52F722 Filename Length       002B (43)\n-52F724 Extra Length          0009 (9)\n-52F726 Comment Length        0000 (0)\n-52F728 Disk Start            0000 (0)\n-52F72A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F72C Ext File Attributes   00000000 (0)\n-52F730 Local Header Offset   0002582F (153647)\n-52F734 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F734: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F75F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F761   Length              0005 (5)\n-52F763   Flags               01 (1) 'Modification'\n-52F764   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F768 CENTRAL HEADER #68    02014B50 (33639248)\n-52F76C Created Zip Spec      14 (20) '2.0'\n-52F76D Created OS            00 (0) 'MS-DOS'\n-52F76E Extract Zip Spec      14 (20) '2.0'\n-52F76F Extract OS            00 (0) 'MS-DOS'\n-52F770 General Purpose Flag  0000 (0)\n-52F772 Compression Method    0000 (0) 'Stored'\n-52F774 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F778 CRC                   00000000 (0)\n-52F77C Compressed Size       00000000 (0)\n-52F780 Uncompressed Size     00000000 (0)\n-52F784 Filename Length       0057 (87)\n-52F786 Extra Length          0009 (9)\n-52F788 Comment Length        0000 (0)\n-52F78A Disk Start            0000 (0)\n-52F78C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F78E Ext File Attributes   00000000 (0)\n-52F792 Local Header Offset   00025881 (153729)\n-52F796 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F796: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F7ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F7EF   Length              0005 (5)\n-52F7F1   Flags               01 (1) 'Modification'\n-52F7F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F7F6 CENTRAL HEADER #69    02014B50 (33639248)\n-52F7FA Created Zip Spec      14 (20) '2.0'\n-52F7FB Created OS            00 (0) 'MS-DOS'\n-52F7FC Extract Zip Spec      14 (20) '2.0'\n-52F7FD Extract OS            00 (0) 'MS-DOS'\n-52F7FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52F800 Compression Method    0000 (0) 'Stored'\n-52F802 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F806 CRC                   C1E5A225 (3253051941)\n-52F80A Compressed Size       0000070B (1803)\n-52F80E Uncompressed Size     0000070B (1803)\n-52F812 Filename Length       006D (109)\n-52F814 Extra Length          0009 (9)\n-52F816 Comment Length        0000 (0)\n-52F818 Disk Start            0000 (0)\n-52F81A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F81C Ext File Attributes   00000000 (0)\n-52F820 Local Header Offset   000258FF (153855)\n-52F824 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F824: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F891 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F893   Length              0005 (5)\n-52F895   Flags               01 (1) 'Modification'\n-52F896   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F89A CENTRAL HEADER #70    02014B50 (33639248)\n-52F89E Created Zip Spec      14 (20) '2.0'\n-52F89F Created OS            00 (0) 'MS-DOS'\n-52F8A0 Extract Zip Spec      14 (20) '2.0'\n-52F8A1 Extract OS            00 (0) 'MS-DOS'\n-52F8A2 General Purpose Flag  0000 (0)\n-52F8A4 Compression Method    0000 (0) 'Stored'\n-52F8A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F8AA CRC                   00000000 (0)\n-52F8AE Compressed Size       00000000 (0)\n-52F8B2 Uncompressed Size     00000000 (0)\n-52F8B6 Filename Length       0056 (86)\n-52F8B8 Extra Length          0009 (9)\n-52F8BA Comment Length        0000 (0)\n-52F8BC Disk Start            0000 (0)\n-52F8BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F8C0 Ext File Attributes   00000000 (0)\n-52F8C4 Local Header Offset   000260AE (155822)\n-52F8C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F8C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F91E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F920   Length              0005 (5)\n-52F922   Flags               01 (1) 'Modification'\n-52F923   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F927 CENTRAL HEADER #71    02014B50 (33639248)\n-52F92B Created Zip Spec      14 (20) '2.0'\n-52F92C Created OS            00 (0) 'MS-DOS'\n-52F92D Extract Zip Spec      14 (20) '2.0'\n-52F92E Extract OS            00 (0) 'MS-DOS'\n-52F92F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52F931 Compression Method    0000 (0) 'Stored'\n-52F933 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F937 CRC                   8950733E (2303750974)\n-52F93B Compressed Size       0000064D (1613)\n-52F93F Uncompressed Size     0000064D (1613)\n-52F943 Filename Length       006C (108)\n-52F945 Extra Length          0009 (9)\n-52F947 Comment Length        0000 (0)\n-52F949 Disk Start            0000 (0)\n-52F94B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F94D Ext File Attributes   00000000 (0)\n-52F951 Local Header Offset   0002612B (155947)\n-52F955 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F955: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52F9C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52F9C3   Length              0005 (5)\n-52F9C5   Flags               01 (1) 'Modification'\n-52F9C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52F9CA CENTRAL HEADER #72    02014B50 (33639248)\n-52F9CE Created Zip Spec      14 (20) '2.0'\n-52F9CF Created OS            00 (0) 'MS-DOS'\n-52F9D0 Extract Zip Spec      14 (20) '2.0'\n-52F9D1 Extract OS            00 (0) 'MS-DOS'\n-52F9D2 General Purpose Flag  0000 (0)\n-52F9D4 Compression Method    0000 (0) 'Stored'\n-52F9D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F9DA CRC                   00000000 (0)\n-52F9DE Compressed Size       00000000 (0)\n-52F9E2 Uncompressed Size     00000000 (0)\n-52F9E6 Filename Length       0055 (85)\n-52F9E8 Extra Length          0009 (9)\n-52F9EA Comment Length        0000 (0)\n-52F9EC Disk Start            0000 (0)\n-52F9EE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52F9F0 Ext File Attributes   00000000 (0)\n-52F9F4 Local Header Offset   0002681B (157723)\n-52F9F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F9F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FA4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FA4F   Length              0005 (5)\n-52FA51   Flags               01 (1) 'Modification'\n-52FA52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FA56 CENTRAL HEADER #73    02014B50 (33639248)\n-52FA5A Created Zip Spec      14 (20) '2.0'\n-52FA5B Created OS            00 (0) 'MS-DOS'\n-52FA5C Extract Zip Spec      14 (20) '2.0'\n-52FA5D Extract OS            00 (0) 'MS-DOS'\n-52FA5E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52FA60 Compression Method    0000 (0) 'Stored'\n-52FA62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FA66 CRC                   A0157ABE (2685762238)\n-52FA6A Compressed Size       00000643 (1603)\n-52FA6E Uncompressed Size     00000643 (1603)\n-52FA72 Filename Length       006B (107)\n-52FA74 Extra Length          0009 (9)\n-52FA76 Comment Length        0000 (0)\n-52FA78 Disk Start            0000 (0)\n-52FA7A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FA7C Ext File Attributes   00000000 (0)\n-52FA80 Local Header Offset   00026897 (157847)\n-52FA84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FA84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FAEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FAF1   Length              0005 (5)\n-52FAF3   Flags               01 (1) 'Modification'\n-52FAF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FAF8 CENTRAL HEADER #74    02014B50 (33639248)\n-52FAFC Created Zip Spec      14 (20) '2.0'\n-52FAFD Created OS            00 (0) 'MS-DOS'\n-52FAFE Extract Zip Spec      14 (20) '2.0'\n-52FAFF Extract OS            00 (0) 'MS-DOS'\n-52FB00 General Purpose Flag  0000 (0)\n-52FB02 Compression Method    0000 (0) 'Stored'\n-52FB04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FB08 CRC                   00000000 (0)\n-52FB0C Compressed Size       00000000 (0)\n-52FB10 Uncompressed Size     00000000 (0)\n-52FB14 Filename Length       002B (43)\n-52FB16 Extra Length          0009 (9)\n-52FB18 Comment Length        0000 (0)\n-52FB1A Disk Start            0000 (0)\n-52FB1C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FB1E Ext File Attributes   00000000 (0)\n-52FB22 Local Header Offset   00026F7C (159612)\n-52FB26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FB26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FB51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FB53   Length              0005 (5)\n-52FB55   Flags               01 (1) 'Modification'\n-52FB56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FB5A CENTRAL HEADER #75    02014B50 (33639248)\n-52FB5E Created Zip Spec      14 (20) '2.0'\n-52FB5F Created OS            00 (0) 'MS-DOS'\n-52FB60 Extract Zip Spec      14 (20) '2.0'\n-52FB61 Extract OS            00 (0) 'MS-DOS'\n-52FB62 General Purpose Flag  0000 (0)\n-52FB64 Compression Method    0000 (0) 'Stored'\n-52FB66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FB6A CRC                   00000000 (0)\n-52FB6E Compressed Size       00000000 (0)\n-52FB72 Uncompressed Size     00000000 (0)\n-52FB76 Filename Length       0034 (52)\n-52FB78 Extra Length          0009 (9)\n-52FB7A Comment Length        0000 (0)\n-52FB7C Disk Start            0000 (0)\n-52FB7E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FB80 Ext File Attributes   00000000 (0)\n-52FB84 Local Header Offset   00026FCE (159694)\n-52FB88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FB88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FBBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FBBE   Length              0005 (5)\n-52FBC0   Flags               01 (1) 'Modification'\n-52FBC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FBC5 CENTRAL HEADER #76    02014B50 (33639248)\n-52FBC9 Created Zip Spec      14 (20) '2.0'\n-52FBCA Created OS            00 (0) 'MS-DOS'\n-52FBCB Extract Zip Spec      14 (20) '2.0'\n-52FBCC Extract OS            00 (0) 'MS-DOS'\n-52FBCD General Purpose Flag  0000 (0)\n-52FBCF Compression Method    0000 (0) 'Stored'\n-52FBD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FBD5 CRC                   00000000 (0)\n-52FBD9 Compressed Size       00000000 (0)\n-52FBDD Uncompressed Size     00000000 (0)\n-52FBE1 Filename Length       007B (123)\n-52FBE3 Extra Length          0009 (9)\n-52FBE5 Comment Length        0000 (0)\n-52FBE7 Disk Start            0000 (0)\n-52FBE9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FBEB Ext File Attributes   00000000 (0)\n-52FBEF Local Header Offset   00027029 (159785)\n-52FBF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FBF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FC6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FC70   Length              0005 (5)\n-52FC72   Flags               01 (1) 'Modification'\n-52FC73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FC77 CENTRAL HEADER #77    02014B50 (33639248)\n-52FC7B Created Zip Spec      14 (20) '2.0'\n-52FC7C Created OS            00 (0) 'MS-DOS'\n-52FC7D Extract Zip Spec      14 (20) '2.0'\n-52FC7E Extract OS            00 (0) 'MS-DOS'\n-52FC7F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52FC81 Compression Method    0000 (0) 'Stored'\n-52FC83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FC87 CRC                   164EC61D (374261277)\n-52FC8B Compressed Size       00000B15 (2837)\n-52FC8F Uncompressed Size     00000B15 (2837)\n-52FC93 Filename Length       0091 (145)\n-52FC95 Extra Length          0009 (9)\n-52FC97 Comment Length        0000 (0)\n-52FC99 Disk Start            0000 (0)\n-52FC9B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FC9D Ext File Attributes   00000000 (0)\n-52FCA1 Local Header Offset   000270CB (159947)\n-52FCA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52F623 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F625   Length              0005 (5)\n+52F627   Flags               01 (1) 'Modification'\n+52F628   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F62C CENTRAL HEADER #66    02014B50 (33639248)\n+52F630 Created Zip Spec      14 (20) '2.0'\n+52F631 Created OS            00 (0) 'MS-DOS'\n+52F632 Extract Zip Spec      14 (20) '2.0'\n+52F633 Extract OS            00 (0) 'MS-DOS'\n+52F634 General Purpose Flag  0000 (0)\n+52F636 Compression Method    0000 (0) 'Stored'\n+52F638 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F63C CRC                   00000000 (0)\n+52F640 Compressed Size       00000000 (0)\n+52F644 Uncompressed Size     00000000 (0)\n+52F648 Filename Length       0022 (34)\n+52F64A Extra Length          0009 (9)\n+52F64C Comment Length        0000 (0)\n+52F64E Disk Start            0000 (0)\n+52F650 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F652 Ext File Attributes   00000000 (0)\n+52F656 Local Header Offset   0002577D (153469)\n+52F65A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F65A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F67C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F67E   Length              0005 (5)\n+52F680   Flags               01 (1) 'Modification'\n+52F681   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F685 CENTRAL HEADER #67    02014B50 (33639248)\n+52F689 Created Zip Spec      14 (20) '2.0'\n+52F68A Created OS            00 (0) 'MS-DOS'\n+52F68B Extract Zip Spec      14 (20) '2.0'\n+52F68C Extract OS            00 (0) 'MS-DOS'\n+52F68D General Purpose Flag  0000 (0)\n+52F68F Compression Method    0000 (0) 'Stored'\n+52F691 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F695 CRC                   00000000 (0)\n+52F699 Compressed Size       00000000 (0)\n+52F69D Uncompressed Size     00000000 (0)\n+52F6A1 Filename Length       002B (43)\n+52F6A3 Extra Length          0009 (9)\n+52F6A5 Comment Length        0000 (0)\n+52F6A7 Disk Start            0000 (0)\n+52F6A9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F6AB Ext File Attributes   00000000 (0)\n+52F6AF Local Header Offset   000257C6 (153542)\n+52F6B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F6B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F6DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F6E0   Length              0005 (5)\n+52F6E2   Flags               01 (1) 'Modification'\n+52F6E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F6E7 CENTRAL HEADER #68    02014B50 (33639248)\n+52F6EB Created Zip Spec      14 (20) '2.0'\n+52F6EC Created OS            00 (0) 'MS-DOS'\n+52F6ED Extract Zip Spec      14 (20) '2.0'\n+52F6EE Extract OS            00 (0) 'MS-DOS'\n+52F6EF General Purpose Flag  0000 (0)\n+52F6F1 Compression Method    0000 (0) 'Stored'\n+52F6F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F6F7 CRC                   00000000 (0)\n+52F6FB Compressed Size       00000000 (0)\n+52F6FF Uncompressed Size     00000000 (0)\n+52F703 Filename Length       0057 (87)\n+52F705 Extra Length          0009 (9)\n+52F707 Comment Length        0000 (0)\n+52F709 Disk Start            0000 (0)\n+52F70B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F70D Ext File Attributes   00000000 (0)\n+52F711 Local Header Offset   00025818 (153624)\n+52F715 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F715: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F76C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F76E   Length              0005 (5)\n+52F770   Flags               01 (1) 'Modification'\n+52F771   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F775 CENTRAL HEADER #69    02014B50 (33639248)\n+52F779 Created Zip Spec      14 (20) '2.0'\n+52F77A Created OS            00 (0) 'MS-DOS'\n+52F77B Extract Zip Spec      14 (20) '2.0'\n+52F77C Extract OS            00 (0) 'MS-DOS'\n+52F77D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52F77F Compression Method    0000 (0) 'Stored'\n+52F781 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F785 CRC                   C1E5A225 (3253051941)\n+52F789 Compressed Size       0000070B (1803)\n+52F78D Uncompressed Size     0000070B (1803)\n+52F791 Filename Length       006D (109)\n+52F793 Extra Length          0009 (9)\n+52F795 Comment Length        0000 (0)\n+52F797 Disk Start            0000 (0)\n+52F799 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F79B Ext File Attributes   00000000 (0)\n+52F79F Local Header Offset   00025896 (153750)\n+52F7A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F7A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F810 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F812   Length              0005 (5)\n+52F814   Flags               01 (1) 'Modification'\n+52F815   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F819 CENTRAL HEADER #70    02014B50 (33639248)\n+52F81D Created Zip Spec      14 (20) '2.0'\n+52F81E Created OS            00 (0) 'MS-DOS'\n+52F81F Extract Zip Spec      14 (20) '2.0'\n+52F820 Extract OS            00 (0) 'MS-DOS'\n+52F821 General Purpose Flag  0000 (0)\n+52F823 Compression Method    0000 (0) 'Stored'\n+52F825 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F829 CRC                   00000000 (0)\n+52F82D Compressed Size       00000000 (0)\n+52F831 Uncompressed Size     00000000 (0)\n+52F835 Filename Length       0056 (86)\n+52F837 Extra Length          0009 (9)\n+52F839 Comment Length        0000 (0)\n+52F83B Disk Start            0000 (0)\n+52F83D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F83F Ext File Attributes   00000000 (0)\n+52F843 Local Header Offset   00026045 (155717)\n+52F847 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F847: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F89D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F89F   Length              0005 (5)\n+52F8A1   Flags               01 (1) 'Modification'\n+52F8A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F8A6 CENTRAL HEADER #71    02014B50 (33639248)\n+52F8AA Created Zip Spec      14 (20) '2.0'\n+52F8AB Created OS            00 (0) 'MS-DOS'\n+52F8AC Extract Zip Spec      14 (20) '2.0'\n+52F8AD Extract OS            00 (0) 'MS-DOS'\n+52F8AE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52F8B0 Compression Method    0000 (0) 'Stored'\n+52F8B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F8B6 CRC                   8950733E (2303750974)\n+52F8BA Compressed Size       0000064D (1613)\n+52F8BE Uncompressed Size     0000064D (1613)\n+52F8C2 Filename Length       006C (108)\n+52F8C4 Extra Length          0009 (9)\n+52F8C6 Comment Length        0000 (0)\n+52F8C8 Disk Start            0000 (0)\n+52F8CA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F8CC Ext File Attributes   00000000 (0)\n+52F8D0 Local Header Offset   000260C2 (155842)\n+52F8D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F8D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F940 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F942   Length              0005 (5)\n+52F944   Flags               01 (1) 'Modification'\n+52F945   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F949 CENTRAL HEADER #72    02014B50 (33639248)\n+52F94D Created Zip Spec      14 (20) '2.0'\n+52F94E Created OS            00 (0) 'MS-DOS'\n+52F94F Extract Zip Spec      14 (20) '2.0'\n+52F950 Extract OS            00 (0) 'MS-DOS'\n+52F951 General Purpose Flag  0000 (0)\n+52F953 Compression Method    0000 (0) 'Stored'\n+52F955 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F959 CRC                   00000000 (0)\n+52F95D Compressed Size       00000000 (0)\n+52F961 Uncompressed Size     00000000 (0)\n+52F965 Filename Length       0055 (85)\n+52F967 Extra Length          0009 (9)\n+52F969 Comment Length        0000 (0)\n+52F96B Disk Start            0000 (0)\n+52F96D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F96F Ext File Attributes   00000000 (0)\n+52F973 Local Header Offset   000267B2 (157618)\n+52F977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52F9CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52F9CE   Length              0005 (5)\n+52F9D0   Flags               01 (1) 'Modification'\n+52F9D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52F9D5 CENTRAL HEADER #73    02014B50 (33639248)\n+52F9D9 Created Zip Spec      14 (20) '2.0'\n+52F9DA Created OS            00 (0) 'MS-DOS'\n+52F9DB Extract Zip Spec      14 (20) '2.0'\n+52F9DC Extract OS            00 (0) 'MS-DOS'\n+52F9DD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52F9DF Compression Method    0000 (0) 'Stored'\n+52F9E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52F9E5 CRC                   A0157ABE (2685762238)\n+52F9E9 Compressed Size       00000643 (1603)\n+52F9ED Uncompressed Size     00000643 (1603)\n+52F9F1 Filename Length       006B (107)\n+52F9F3 Extra Length          0009 (9)\n+52F9F5 Comment Length        0000 (0)\n+52F9F7 Disk Start            0000 (0)\n+52F9F9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52F9FB Ext File Attributes   00000000 (0)\n+52F9FF Local Header Offset   0002682E (157742)\n+52FA03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FA03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FA6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FA70   Length              0005 (5)\n+52FA72   Flags               01 (1) 'Modification'\n+52FA73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FA77 CENTRAL HEADER #74    02014B50 (33639248)\n+52FA7B Created Zip Spec      14 (20) '2.0'\n+52FA7C Created OS            00 (0) 'MS-DOS'\n+52FA7D Extract Zip Spec      14 (20) '2.0'\n+52FA7E Extract OS            00 (0) 'MS-DOS'\n+52FA7F General Purpose Flag  0000 (0)\n+52FA81 Compression Method    0000 (0) 'Stored'\n+52FA83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FA87 CRC                   00000000 (0)\n+52FA8B Compressed Size       00000000 (0)\n+52FA8F Uncompressed Size     00000000 (0)\n+52FA93 Filename Length       002B (43)\n+52FA95 Extra Length          0009 (9)\n+52FA97 Comment Length        0000 (0)\n+52FA99 Disk Start            0000 (0)\n+52FA9B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FA9D Ext File Attributes   00000000 (0)\n+52FAA1 Local Header Offset   00026F13 (159507)\n+52FAA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FAA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FAD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FAD2   Length              0005 (5)\n+52FAD4   Flags               01 (1) 'Modification'\n+52FAD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FAD9 CENTRAL HEADER #75    02014B50 (33639248)\n+52FADD Created Zip Spec      14 (20) '2.0'\n+52FADE Created OS            00 (0) 'MS-DOS'\n+52FADF Extract Zip Spec      14 (20) '2.0'\n+52FAE0 Extract OS            00 (0) 'MS-DOS'\n+52FAE1 General Purpose Flag  0000 (0)\n+52FAE3 Compression Method    0000 (0) 'Stored'\n+52FAE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FAE9 CRC                   00000000 (0)\n+52FAED Compressed Size       00000000 (0)\n+52FAF1 Uncompressed Size     00000000 (0)\n+52FAF5 Filename Length       0034 (52)\n+52FAF7 Extra Length          0009 (9)\n+52FAF9 Comment Length        0000 (0)\n+52FAFB Disk Start            0000 (0)\n+52FAFD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FAFF Ext File Attributes   00000000 (0)\n+52FB03 Local Header Offset   00026F65 (159589)\n+52FB07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FB07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FB3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FB3D   Length              0005 (5)\n+52FB3F   Flags               01 (1) 'Modification'\n+52FB40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FB44 CENTRAL HEADER #76    02014B50 (33639248)\n+52FB48 Created Zip Spec      14 (20) '2.0'\n+52FB49 Created OS            00 (0) 'MS-DOS'\n+52FB4A Extract Zip Spec      14 (20) '2.0'\n+52FB4B Extract OS            00 (0) 'MS-DOS'\n+52FB4C General Purpose Flag  0000 (0)\n+52FB4E Compression Method    0000 (0) 'Stored'\n+52FB50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FB54 CRC                   00000000 (0)\n+52FB58 Compressed Size       00000000 (0)\n+52FB5C Uncompressed Size     00000000 (0)\n+52FB60 Filename Length       007B (123)\n+52FB62 Extra Length          0009 (9)\n+52FB64 Comment Length        0000 (0)\n+52FB66 Disk Start            0000 (0)\n+52FB68 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FB6A Ext File Attributes   00000000 (0)\n+52FB6E Local Header Offset   00026FC0 (159680)\n+52FB72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FB72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FBED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FBEF   Length              0005 (5)\n+52FBF1   Flags               01 (1) 'Modification'\n+52FBF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FBF6 CENTRAL HEADER #77    02014B50 (33639248)\n+52FBFA Created Zip Spec      14 (20) '2.0'\n+52FBFB Created OS            00 (0) 'MS-DOS'\n+52FBFC Extract Zip Spec      14 (20) '2.0'\n+52FBFD Extract OS            00 (0) 'MS-DOS'\n+52FBFE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52FC00 Compression Method    0000 (0) 'Stored'\n+52FC02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FC06 CRC                   164EC61D (374261277)\n+52FC0A Compressed Size       00000B15 (2837)\n+52FC0E Uncompressed Size     00000B15 (2837)\n+52FC12 Filename Length       0091 (145)\n+52FC14 Extra Length          0009 (9)\n+52FC16 Comment Length        0000 (0)\n+52FC18 Disk Start            0000 (0)\n+52FC1A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FC1C Ext File Attributes   00000000 (0)\n+52FC20 Local Header Offset   00027062 (159842)\n+52FC24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x52FCA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x52FC24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52FD36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FD38   Length              0005 (5)\n-52FD3A   Flags               01 (1) 'Modification'\n-52FD3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FD3F CENTRAL HEADER #78    02014B50 (33639248)\n-52FD43 Created Zip Spec      14 (20) '2.0'\n-52FD44 Created OS            00 (0) 'MS-DOS'\n-52FD45 Extract Zip Spec      14 (20) '2.0'\n-52FD46 Extract OS            00 (0) 'MS-DOS'\n-52FD47 General Purpose Flag  0000 (0)\n-52FD49 Compression Method    0000 (0) 'Stored'\n-52FD4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FD4F CRC                   00000000 (0)\n-52FD53 Compressed Size       00000000 (0)\n-52FD57 Uncompressed Size     00000000 (0)\n-52FD5B Filename Length       0025 (37)\n-52FD5D Extra Length          0009 (9)\n-52FD5F Comment Length        0000 (0)\n-52FD61 Disk Start            0000 (0)\n-52FD63 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FD65 Ext File Attributes   00000000 (0)\n-52FD69 Local Header Offset   00027CA8 (162984)\n-52FD6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FD6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FD92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FD94   Length              0005 (5)\n-52FD96   Flags               01 (1) 'Modification'\n-52FD97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FD9B CENTRAL HEADER #79    02014B50 (33639248)\n-52FD9F Created Zip Spec      14 (20) '2.0'\n-52FDA0 Created OS            00 (0) 'MS-DOS'\n-52FDA1 Extract Zip Spec      14 (20) '2.0'\n-52FDA2 Extract OS            00 (0) 'MS-DOS'\n-52FDA3 General Purpose Flag  0000 (0)\n-52FDA5 Compression Method    0000 (0) 'Stored'\n-52FDA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FDAB CRC                   00000000 (0)\n-52FDAF Compressed Size       00000000 (0)\n-52FDB3 Uncompressed Size     00000000 (0)\n-52FDB7 Filename Length       002E (46)\n-52FDB9 Extra Length          0009 (9)\n-52FDBB Comment Length        0000 (0)\n-52FDBD Disk Start            0000 (0)\n-52FDBF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FDC1 Ext File Attributes   00000000 (0)\n-52FDC5 Local Header Offset   00027CF4 (163060)\n-52FDC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FDC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FDF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FDF9   Length              0005 (5)\n-52FDFB   Flags               01 (1) 'Modification'\n-52FDFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FE00 CENTRAL HEADER #80    02014B50 (33639248)\n-52FE04 Created Zip Spec      14 (20) '2.0'\n-52FE05 Created OS            00 (0) 'MS-DOS'\n-52FE06 Extract Zip Spec      14 (20) '2.0'\n-52FE07 Extract OS            00 (0) 'MS-DOS'\n-52FE08 General Purpose Flag  0000 (0)\n-52FE0A Compression Method    0000 (0) 'Stored'\n-52FE0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FE10 CRC                   00000000 (0)\n-52FE14 Compressed Size       00000000 (0)\n-52FE18 Uncompressed Size     00000000 (0)\n-52FE1C Filename Length       005F (95)\n-52FE1E Extra Length          0009 (9)\n-52FE20 Comment Length        0000 (0)\n-52FE22 Disk Start            0000 (0)\n-52FE24 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FE26 Ext File Attributes   00000000 (0)\n-52FE2A Local Header Offset   00027D49 (163145)\n-52FE2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FE2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FE8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FE8F   Length              0005 (5)\n-52FE91   Flags               01 (1) 'Modification'\n-52FE92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FE96 CENTRAL HEADER #81    02014B50 (33639248)\n-52FE9A Created Zip Spec      14 (20) '2.0'\n-52FE9B Created OS            00 (0) 'MS-DOS'\n-52FE9C Extract Zip Spec      14 (20) '2.0'\n-52FE9D Extract OS            00 (0) 'MS-DOS'\n-52FE9E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52FEA0 Compression Method    0000 (0) 'Stored'\n-52FEA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FEA6 CRC                   4F9A1C4F (1335499855)\n-52FEAA Compressed Size       000009AF (2479)\n-52FEAE Uncompressed Size     000009AF (2479)\n-52FEB2 Filename Length       0075 (117)\n-52FEB4 Extra Length          0009 (9)\n-52FEB6 Comment Length        0000 (0)\n-52FEB8 Disk Start            0000 (0)\n-52FEBA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FEBC Ext File Attributes   00000000 (0)\n-52FEC0 Local Header Offset   00027DCF (163279)\n-52FEC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FEC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FF39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FF3B   Length              0005 (5)\n-52FF3D   Flags               01 (1) 'Modification'\n-52FF3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FF42 CENTRAL HEADER #82    02014B50 (33639248)\n-52FF46 Created Zip Spec      14 (20) '2.0'\n-52FF47 Created OS            00 (0) 'MS-DOS'\n-52FF48 Extract Zip Spec      14 (20) '2.0'\n-52FF49 Extract OS            00 (0) 'MS-DOS'\n-52FF4A General Purpose Flag  0000 (0)\n-52FF4C Compression Method    0000 (0) 'Stored'\n-52FF4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FF52 CRC                   00000000 (0)\n-52FF56 Compressed Size       00000000 (0)\n-52FF5A Uncompressed Size     00000000 (0)\n-52FF5E Filename Length       006C (108)\n-52FF60 Extra Length          0009 (9)\n-52FF62 Comment Length        0000 (0)\n-52FF64 Disk Start            0000 (0)\n-52FF66 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52FF68 Ext File Attributes   00000000 (0)\n-52FF6C Local Header Offset   0002882A (165930)\n-52FF70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FF70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52FFDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FFDE   Length              0005 (5)\n-52FFE0   Flags               01 (1) 'Modification'\n-52FFE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FFE5 CENTRAL HEADER #83    02014B50 (33639248)\n-52FFE9 Created Zip Spec      14 (20) '2.0'\n-52FFEA Created OS            00 (0) 'MS-DOS'\n-52FFEB Extract Zip Spec      14 (20) '2.0'\n-52FFEC Extract OS            00 (0) 'MS-DOS'\n-52FFED General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52FFEF Compression Method    0000 (0) 'Stored'\n-52FFF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FFF5 CRC                   754F4527 (1968129319)\n-52FFF9 Compressed Size       00001265 (4709)\n-52FFFD Uncompressed Size     00001265 (4709)\n-530001 Filename Length       0082 (130)\n-530003 Extra Length          0009 (9)\n-530005 Comment Length        0000 (0)\n-530007 Disk Start            0000 (0)\n-530009 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53000B Ext File Attributes   00000000 (0)\n-53000F Local Header Offset   000288BD (166077)\n-530013 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530013: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530095 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530097   Length              0005 (5)\n-530099   Flags               01 (1) 'Modification'\n-53009A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53009E CENTRAL HEADER #84    02014B50 (33639248)\n-5300A2 Created Zip Spec      14 (20) '2.0'\n-5300A3 Created OS            00 (0) 'MS-DOS'\n-5300A4 Extract Zip Spec      14 (20) '2.0'\n-5300A5 Extract OS            00 (0) 'MS-DOS'\n-5300A6 General Purpose Flag  0000 (0)\n-5300A8 Compression Method    0000 (0) 'Stored'\n-5300AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5300AE CRC                   00000000 (0)\n-5300B2 Compressed Size       00000000 (0)\n-5300B6 Uncompressed Size     00000000 (0)\n-5300BA Filename Length       002F (47)\n-5300BC Extra Length          0009 (9)\n-5300BE Comment Length        0000 (0)\n-5300C0 Disk Start            0000 (0)\n-5300C2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5300C4 Ext File Attributes   00000000 (0)\n-5300C8 Local Header Offset   00029BDB (170971)\n-5300CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5300CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5300FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5300FD   Length              0005 (5)\n-5300FF   Flags               01 (1) 'Modification'\n-530100   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530104 CENTRAL HEADER #85    02014B50 (33639248)\n-530108 Created Zip Spec      14 (20) '2.0'\n-530109 Created OS            00 (0) 'MS-DOS'\n-53010A Extract Zip Spec      14 (20) '2.0'\n-53010B Extract OS            00 (0) 'MS-DOS'\n-53010C General Purpose Flag  0000 (0)\n-53010E Compression Method    0000 (0) 'Stored'\n-530110 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530114 CRC                   00000000 (0)\n-530118 Compressed Size       00000000 (0)\n-53011C Uncompressed Size     00000000 (0)\n-530120 Filename Length       0038 (56)\n-530122 Extra Length          0009 (9)\n-530124 Comment Length        0000 (0)\n-530126 Disk Start            0000 (0)\n-530128 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53012A Ext File Attributes   00000000 (0)\n-53012E Local Header Offset   00029C31 (171057)\n-530132 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530132: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53016A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53016C   Length              0005 (5)\n-53016E   Flags               01 (1) 'Modification'\n-53016F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530173 CENTRAL HEADER #86    02014B50 (33639248)\n-530177 Created Zip Spec      14 (20) '2.0'\n-530178 Created OS            00 (0) 'MS-DOS'\n-530179 Extract Zip Spec      14 (20) '2.0'\n-53017A Extract OS            00 (0) 'MS-DOS'\n-53017B General Purpose Flag  0000 (0)\n-53017D Compression Method    0000 (0) 'Stored'\n-53017F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530183 CRC                   00000000 (0)\n-530187 Compressed Size       00000000 (0)\n-53018B Uncompressed Size     00000000 (0)\n-53018F Filename Length       007A (122)\n-530191 Extra Length          0009 (9)\n-530193 Comment Length        0000 (0)\n-530195 Disk Start            0000 (0)\n-530197 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530199 Ext File Attributes   00000000 (0)\n-53019D Local Header Offset   00029C90 (171152)\n-5301A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5301A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53021B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53021D   Length              0005 (5)\n-53021F   Flags               01 (1) 'Modification'\n-530220   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530224 CENTRAL HEADER #87    02014B50 (33639248)\n-530228 Created Zip Spec      14 (20) '2.0'\n-530229 Created OS            00 (0) 'MS-DOS'\n-53022A Extract Zip Spec      14 (20) '2.0'\n-53022B Extract OS            00 (0) 'MS-DOS'\n-53022C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53022E Compression Method    0000 (0) 'Stored'\n-530230 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530234 CRC                   896578EC (2305128684)\n-530238 Compressed Size       00001327 (4903)\n-53023C Uncompressed Size     00001327 (4903)\n-530240 Filename Length       0090 (144)\n-530242 Extra Length          0009 (9)\n-530244 Comment Length        0000 (0)\n-530246 Disk Start            0000 (0)\n-530248 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53024A Ext File Attributes   00000000 (0)\n-53024E Local Header Offset   00029D31 (171313)\n-530252 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+52FCB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FCB7   Length              0005 (5)\n+52FCB9   Flags               01 (1) 'Modification'\n+52FCBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FCBE CENTRAL HEADER #78    02014B50 (33639248)\n+52FCC2 Created Zip Spec      14 (20) '2.0'\n+52FCC3 Created OS            00 (0) 'MS-DOS'\n+52FCC4 Extract Zip Spec      14 (20) '2.0'\n+52FCC5 Extract OS            00 (0) 'MS-DOS'\n+52FCC6 General Purpose Flag  0000 (0)\n+52FCC8 Compression Method    0000 (0) 'Stored'\n+52FCCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FCCE CRC                   00000000 (0)\n+52FCD2 Compressed Size       00000000 (0)\n+52FCD6 Uncompressed Size     00000000 (0)\n+52FCDA Filename Length       0025 (37)\n+52FCDC Extra Length          0009 (9)\n+52FCDE Comment Length        0000 (0)\n+52FCE0 Disk Start            0000 (0)\n+52FCE2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FCE4 Ext File Attributes   00000000 (0)\n+52FCE8 Local Header Offset   00027C3F (162879)\n+52FCEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FCEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FD11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FD13   Length              0005 (5)\n+52FD15   Flags               01 (1) 'Modification'\n+52FD16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FD1A CENTRAL HEADER #79    02014B50 (33639248)\n+52FD1E Created Zip Spec      14 (20) '2.0'\n+52FD1F Created OS            00 (0) 'MS-DOS'\n+52FD20 Extract Zip Spec      14 (20) '2.0'\n+52FD21 Extract OS            00 (0) 'MS-DOS'\n+52FD22 General Purpose Flag  0000 (0)\n+52FD24 Compression Method    0000 (0) 'Stored'\n+52FD26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FD2A CRC                   00000000 (0)\n+52FD2E Compressed Size       00000000 (0)\n+52FD32 Uncompressed Size     00000000 (0)\n+52FD36 Filename Length       002E (46)\n+52FD38 Extra Length          0009 (9)\n+52FD3A Comment Length        0000 (0)\n+52FD3C Disk Start            0000 (0)\n+52FD3E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FD40 Ext File Attributes   00000000 (0)\n+52FD44 Local Header Offset   00027C8B (162955)\n+52FD48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FD48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FD76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FD78   Length              0005 (5)\n+52FD7A   Flags               01 (1) 'Modification'\n+52FD7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FD7F CENTRAL HEADER #80    02014B50 (33639248)\n+52FD83 Created Zip Spec      14 (20) '2.0'\n+52FD84 Created OS            00 (0) 'MS-DOS'\n+52FD85 Extract Zip Spec      14 (20) '2.0'\n+52FD86 Extract OS            00 (0) 'MS-DOS'\n+52FD87 General Purpose Flag  0000 (0)\n+52FD89 Compression Method    0000 (0) 'Stored'\n+52FD8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FD8F CRC                   00000000 (0)\n+52FD93 Compressed Size       00000000 (0)\n+52FD97 Uncompressed Size     00000000 (0)\n+52FD9B Filename Length       005F (95)\n+52FD9D Extra Length          0009 (9)\n+52FD9F Comment Length        0000 (0)\n+52FDA1 Disk Start            0000 (0)\n+52FDA3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FDA5 Ext File Attributes   00000000 (0)\n+52FDA9 Local Header Offset   00027CE0 (163040)\n+52FDAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FDAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FE0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FE0E   Length              0005 (5)\n+52FE10   Flags               01 (1) 'Modification'\n+52FE11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FE15 CENTRAL HEADER #81    02014B50 (33639248)\n+52FE19 Created Zip Spec      14 (20) '2.0'\n+52FE1A Created OS            00 (0) 'MS-DOS'\n+52FE1B Extract Zip Spec      14 (20) '2.0'\n+52FE1C Extract OS            00 (0) 'MS-DOS'\n+52FE1D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52FE1F Compression Method    0000 (0) 'Stored'\n+52FE21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FE25 CRC                   4F9A1C4F (1335499855)\n+52FE29 Compressed Size       000009AF (2479)\n+52FE2D Uncompressed Size     000009AF (2479)\n+52FE31 Filename Length       0075 (117)\n+52FE33 Extra Length          0009 (9)\n+52FE35 Comment Length        0000 (0)\n+52FE37 Disk Start            0000 (0)\n+52FE39 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FE3B Ext File Attributes   00000000 (0)\n+52FE3F Local Header Offset   00027D66 (163174)\n+52FE43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FE43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FEB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FEBA   Length              0005 (5)\n+52FEBC   Flags               01 (1) 'Modification'\n+52FEBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FEC1 CENTRAL HEADER #82    02014B50 (33639248)\n+52FEC5 Created Zip Spec      14 (20) '2.0'\n+52FEC6 Created OS            00 (0) 'MS-DOS'\n+52FEC7 Extract Zip Spec      14 (20) '2.0'\n+52FEC8 Extract OS            00 (0) 'MS-DOS'\n+52FEC9 General Purpose Flag  0000 (0)\n+52FECB Compression Method    0000 (0) 'Stored'\n+52FECD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FED1 CRC                   00000000 (0)\n+52FED5 Compressed Size       00000000 (0)\n+52FED9 Uncompressed Size     00000000 (0)\n+52FEDD Filename Length       006C (108)\n+52FEDF Extra Length          0009 (9)\n+52FEE1 Comment Length        0000 (0)\n+52FEE3 Disk Start            0000 (0)\n+52FEE5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FEE7 Ext File Attributes   00000000 (0)\n+52FEEB Local Header Offset   000287C1 (165825)\n+52FEEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FEEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52FF5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52FF5D   Length              0005 (5)\n+52FF5F   Flags               01 (1) 'Modification'\n+52FF60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52FF64 CENTRAL HEADER #83    02014B50 (33639248)\n+52FF68 Created Zip Spec      14 (20) '2.0'\n+52FF69 Created OS            00 (0) 'MS-DOS'\n+52FF6A Extract Zip Spec      14 (20) '2.0'\n+52FF6B Extract OS            00 (0) 'MS-DOS'\n+52FF6C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52FF6E Compression Method    0000 (0) 'Stored'\n+52FF70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52FF74 CRC                   754F4527 (1968129319)\n+52FF78 Compressed Size       00001265 (4709)\n+52FF7C Uncompressed Size     00001265 (4709)\n+52FF80 Filename Length       0082 (130)\n+52FF82 Extra Length          0009 (9)\n+52FF84 Comment Length        0000 (0)\n+52FF86 Disk Start            0000 (0)\n+52FF88 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52FF8A Ext File Attributes   00000000 (0)\n+52FF8E Local Header Offset   00028854 (165972)\n+52FF92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FF92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530014 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530016   Length              0005 (5)\n+530018   Flags               01 (1) 'Modification'\n+530019   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53001D CENTRAL HEADER #84    02014B50 (33639248)\n+530021 Created Zip Spec      14 (20) '2.0'\n+530022 Created OS            00 (0) 'MS-DOS'\n+530023 Extract Zip Spec      14 (20) '2.0'\n+530024 Extract OS            00 (0) 'MS-DOS'\n+530025 General Purpose Flag  0000 (0)\n+530027 Compression Method    0000 (0) 'Stored'\n+530029 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53002D CRC                   00000000 (0)\n+530031 Compressed Size       00000000 (0)\n+530035 Uncompressed Size     00000000 (0)\n+530039 Filename Length       002F (47)\n+53003B Extra Length          0009 (9)\n+53003D Comment Length        0000 (0)\n+53003F Disk Start            0000 (0)\n+530041 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530043 Ext File Attributes   00000000 (0)\n+530047 Local Header Offset   00029B72 (170866)\n+53004B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53004B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53007A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53007C   Length              0005 (5)\n+53007E   Flags               01 (1) 'Modification'\n+53007F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530083 CENTRAL HEADER #85    02014B50 (33639248)\n+530087 Created Zip Spec      14 (20) '2.0'\n+530088 Created OS            00 (0) 'MS-DOS'\n+530089 Extract Zip Spec      14 (20) '2.0'\n+53008A Extract OS            00 (0) 'MS-DOS'\n+53008B General Purpose Flag  0000 (0)\n+53008D Compression Method    0000 (0) 'Stored'\n+53008F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530093 CRC                   00000000 (0)\n+530097 Compressed Size       00000000 (0)\n+53009B Uncompressed Size     00000000 (0)\n+53009F Filename Length       0038 (56)\n+5300A1 Extra Length          0009 (9)\n+5300A3 Comment Length        0000 (0)\n+5300A5 Disk Start            0000 (0)\n+5300A7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5300A9 Ext File Attributes   00000000 (0)\n+5300AD Local Header Offset   00029BC8 (170952)\n+5300B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5300B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5300E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5300EB   Length              0005 (5)\n+5300ED   Flags               01 (1) 'Modification'\n+5300EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5300F2 CENTRAL HEADER #86    02014B50 (33639248)\n+5300F6 Created Zip Spec      14 (20) '2.0'\n+5300F7 Created OS            00 (0) 'MS-DOS'\n+5300F8 Extract Zip Spec      14 (20) '2.0'\n+5300F9 Extract OS            00 (0) 'MS-DOS'\n+5300FA General Purpose Flag  0000 (0)\n+5300FC Compression Method    0000 (0) 'Stored'\n+5300FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530102 CRC                   00000000 (0)\n+530106 Compressed Size       00000000 (0)\n+53010A Uncompressed Size     00000000 (0)\n+53010E Filename Length       007A (122)\n+530110 Extra Length          0009 (9)\n+530112 Comment Length        0000 (0)\n+530114 Disk Start            0000 (0)\n+530116 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530118 Ext File Attributes   00000000 (0)\n+53011C Local Header Offset   00029C27 (171047)\n+530120 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530120: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53019A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53019C   Length              0005 (5)\n+53019E   Flags               01 (1) 'Modification'\n+53019F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5301A3 CENTRAL HEADER #87    02014B50 (33639248)\n+5301A7 Created Zip Spec      14 (20) '2.0'\n+5301A8 Created OS            00 (0) 'MS-DOS'\n+5301A9 Extract Zip Spec      14 (20) '2.0'\n+5301AA Extract OS            00 (0) 'MS-DOS'\n+5301AB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5301AD Compression Method    0000 (0) 'Stored'\n+5301AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5301B3 CRC                   896578EC (2305128684)\n+5301B7 Compressed Size       00001327 (4903)\n+5301BB Uncompressed Size     00001327 (4903)\n+5301BF Filename Length       0090 (144)\n+5301C1 Extra Length          0009 (9)\n+5301C3 Comment Length        0000 (0)\n+5301C5 Disk Start            0000 (0)\n+5301C7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5301C9 Ext File Attributes   00000000 (0)\n+5301CD Local Header Offset   00029CC8 (171208)\n+5301D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x530252: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5301D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5302E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5302E4   Length              0005 (5)\n-5302E6   Flags               01 (1) 'Modification'\n-5302E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5302EB CENTRAL HEADER #88    02014B50 (33639248)\n-5302EF Created Zip Spec      14 (20) '2.0'\n-5302F0 Created OS            00 (0) 'MS-DOS'\n-5302F1 Extract Zip Spec      14 (20) '2.0'\n-5302F2 Extract OS            00 (0) 'MS-DOS'\n-5302F3 General Purpose Flag  0000 (0)\n-5302F5 Compression Method    0000 (0) 'Stored'\n-5302F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5302FB CRC                   00000000 (0)\n-5302FF Compressed Size       00000000 (0)\n-530303 Uncompressed Size     00000000 (0)\n-530307 Filename Length       003B (59)\n-530309 Extra Length          0009 (9)\n-53030B Comment Length        0000 (0)\n-53030D Disk Start            0000 (0)\n-53030F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530311 Ext File Attributes   00000000 (0)\n-530315 Local Header Offset   0002B11F (176415)\n-530319 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530319: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530354 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530356   Length              0005 (5)\n-530358   Flags               01 (1) 'Modification'\n-530359   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53035D CENTRAL HEADER #89    02014B50 (33639248)\n-530361 Created Zip Spec      14 (20) '2.0'\n-530362 Created OS            00 (0) 'MS-DOS'\n-530363 Extract Zip Spec      14 (20) '2.0'\n-530364 Extract OS            00 (0) 'MS-DOS'\n-530365 General Purpose Flag  0000 (0)\n-530367 Compression Method    0000 (0) 'Stored'\n-530369 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53036D CRC                   00000000 (0)\n-530371 Compressed Size       00000000 (0)\n-530375 Uncompressed Size     00000000 (0)\n-530379 Filename Length       0044 (68)\n-53037B Extra Length          0009 (9)\n-53037D Comment Length        0000 (0)\n-53037F Disk Start            0000 (0)\n-530381 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530383 Ext File Attributes   00000000 (0)\n-530387 Local Header Offset   0002B181 (176513)\n-53038B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53038B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5303CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5303D1   Length              0005 (5)\n-5303D3   Flags               01 (1) 'Modification'\n-5303D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5303D8 CENTRAL HEADER #90    02014B50 (33639248)\n-5303DC Created Zip Spec      14 (20) '2.0'\n-5303DD Created OS            00 (0) 'MS-DOS'\n-5303DE Extract Zip Spec      14 (20) '2.0'\n-5303DF Extract OS            00 (0) 'MS-DOS'\n-5303E0 General Purpose Flag  0000 (0)\n-5303E2 Compression Method    0000 (0) 'Stored'\n-5303E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5303E8 CRC                   00000000 (0)\n-5303EC Compressed Size       00000000 (0)\n-5303F0 Uncompressed Size     00000000 (0)\n-5303F4 Filename Length       0081 (129)\n-5303F6 Extra Length          0009 (9)\n-5303F8 Comment Length        0000 (0)\n-5303FA Disk Start            0000 (0)\n-5303FC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5303FE Ext File Attributes   00000000 (0)\n-530402 Local Header Offset   0002B1EC (176620)\n-530406 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530406: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530487 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530489   Length              0005 (5)\n-53048B   Flags               01 (1) 'Modification'\n-53048C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530490 CENTRAL HEADER #91    02014B50 (33639248)\n-530494 Created Zip Spec      14 (20) '2.0'\n-530495 Created OS            00 (0) 'MS-DOS'\n-530496 Extract Zip Spec      14 (20) '2.0'\n-530497 Extract OS            00 (0) 'MS-DOS'\n-530498 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53049A Compression Method    0000 (0) 'Stored'\n-53049C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5304A0 CRC                   64624734 (1684162356)\n-5304A4 Compressed Size       00000D24 (3364)\n-5304A8 Uncompressed Size     00000D24 (3364)\n-5304AC Filename Length       0097 (151)\n-5304AE Extra Length          0009 (9)\n-5304B0 Comment Length        0000 (0)\n-5304B2 Disk Start            0000 (0)\n-5304B4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5304B6 Ext File Attributes   00000000 (0)\n-5304BA Local Header Offset   0002B294 (176788)\n-5304BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+530261 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530263   Length              0005 (5)\n+530265   Flags               01 (1) 'Modification'\n+530266   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53026A CENTRAL HEADER #88    02014B50 (33639248)\n+53026E Created Zip Spec      14 (20) '2.0'\n+53026F Created OS            00 (0) 'MS-DOS'\n+530270 Extract Zip Spec      14 (20) '2.0'\n+530271 Extract OS            00 (0) 'MS-DOS'\n+530272 General Purpose Flag  0000 (0)\n+530274 Compression Method    0000 (0) 'Stored'\n+530276 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53027A CRC                   00000000 (0)\n+53027E Compressed Size       00000000 (0)\n+530282 Uncompressed Size     00000000 (0)\n+530286 Filename Length       003B (59)\n+530288 Extra Length          0009 (9)\n+53028A Comment Length        0000 (0)\n+53028C Disk Start            0000 (0)\n+53028E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530290 Ext File Attributes   00000000 (0)\n+530294 Local Header Offset   0002B0B6 (176310)\n+530298 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530298: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5302D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5302D5   Length              0005 (5)\n+5302D7   Flags               01 (1) 'Modification'\n+5302D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5302DC CENTRAL HEADER #89    02014B50 (33639248)\n+5302E0 Created Zip Spec      14 (20) '2.0'\n+5302E1 Created OS            00 (0) 'MS-DOS'\n+5302E2 Extract Zip Spec      14 (20) '2.0'\n+5302E3 Extract OS            00 (0) 'MS-DOS'\n+5302E4 General Purpose Flag  0000 (0)\n+5302E6 Compression Method    0000 (0) 'Stored'\n+5302E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5302EC CRC                   00000000 (0)\n+5302F0 Compressed Size       00000000 (0)\n+5302F4 Uncompressed Size     00000000 (0)\n+5302F8 Filename Length       0044 (68)\n+5302FA Extra Length          0009 (9)\n+5302FC Comment Length        0000 (0)\n+5302FE Disk Start            0000 (0)\n+530300 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530302 Ext File Attributes   00000000 (0)\n+530306 Local Header Offset   0002B118 (176408)\n+53030A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53030A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53034E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530350   Length              0005 (5)\n+530352   Flags               01 (1) 'Modification'\n+530353   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530357 CENTRAL HEADER #90    02014B50 (33639248)\n+53035B Created Zip Spec      14 (20) '2.0'\n+53035C Created OS            00 (0) 'MS-DOS'\n+53035D Extract Zip Spec      14 (20) '2.0'\n+53035E Extract OS            00 (0) 'MS-DOS'\n+53035F General Purpose Flag  0000 (0)\n+530361 Compression Method    0000 (0) 'Stored'\n+530363 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530367 CRC                   00000000 (0)\n+53036B Compressed Size       00000000 (0)\n+53036F Uncompressed Size     00000000 (0)\n+530373 Filename Length       0081 (129)\n+530375 Extra Length          0009 (9)\n+530377 Comment Length        0000 (0)\n+530379 Disk Start            0000 (0)\n+53037B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53037D Ext File Attributes   00000000 (0)\n+530381 Local Header Offset   0002B183 (176515)\n+530385 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530385: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530406 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530408   Length              0005 (5)\n+53040A   Flags               01 (1) 'Modification'\n+53040B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53040F CENTRAL HEADER #91    02014B50 (33639248)\n+530413 Created Zip Spec      14 (20) '2.0'\n+530414 Created OS            00 (0) 'MS-DOS'\n+530415 Extract Zip Spec      14 (20) '2.0'\n+530416 Extract OS            00 (0) 'MS-DOS'\n+530417 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+530419 Compression Method    0000 (0) 'Stored'\n+53041B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53041F CRC                   64624734 (1684162356)\n+530423 Compressed Size       00000D24 (3364)\n+530427 Uncompressed Size     00000D24 (3364)\n+53042B Filename Length       0097 (151)\n+53042D Extra Length          0009 (9)\n+53042F Comment Length        0000 (0)\n+530431 Disk Start            0000 (0)\n+530433 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530435 Ext File Attributes   00000000 (0)\n+530439 Local Header Offset   0002B22B (176683)\n+53043D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5304BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53043D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-530555 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530557   Length              0005 (5)\n-530559   Flags               01 (1) 'Modification'\n-53055A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53055E CENTRAL HEADER #92    02014B50 (33639248)\n-530562 Created Zip Spec      14 (20) '2.0'\n-530563 Created OS            00 (0) 'MS-DOS'\n-530564 Extract Zip Spec      14 (20) '2.0'\n-530565 Extract OS            00 (0) 'MS-DOS'\n-530566 General Purpose Flag  0000 (0)\n-530568 Compression Method    0000 (0) 'Stored'\n-53056A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53056E CRC                   00000000 (0)\n-530572 Compressed Size       00000000 (0)\n-530576 Uncompressed Size     00000000 (0)\n-53057A Filename Length       007D (125)\n-53057C Extra Length          0009 (9)\n-53057E Comment Length        0000 (0)\n-530580 Disk Start            0000 (0)\n-530582 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530584 Ext File Attributes   00000000 (0)\n-530588 Local Header Offset   0002C086 (180358)\n-53058C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53058C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530609 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53060B   Length              0005 (5)\n-53060D   Flags               01 (1) 'Modification'\n-53060E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530612 CENTRAL HEADER #93    02014B50 (33639248)\n-530616 Created Zip Spec      14 (20) '2.0'\n-530617 Created OS            00 (0) 'MS-DOS'\n-530618 Extract Zip Spec      14 (20) '2.0'\n-530619 Extract OS            00 (0) 'MS-DOS'\n-53061A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53061C Compression Method    0000 (0) 'Stored'\n-53061E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530622 CRC                   2B6EF697 (728692375)\n-530626 Compressed Size       000008CD (2253)\n-53062A Uncompressed Size     000008CD (2253)\n-53062E Filename Length       0093 (147)\n-530630 Extra Length          0009 (9)\n-530632 Comment Length        0000 (0)\n-530634 Disk Start            0000 (0)\n-530636 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530638 Ext File Attributes   00000000 (0)\n-53063C Local Header Offset   0002C12A (180522)\n-530640 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5304D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5304D6   Length              0005 (5)\n+5304D8   Flags               01 (1) 'Modification'\n+5304D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5304DD CENTRAL HEADER #92    02014B50 (33639248)\n+5304E1 Created Zip Spec      14 (20) '2.0'\n+5304E2 Created OS            00 (0) 'MS-DOS'\n+5304E3 Extract Zip Spec      14 (20) '2.0'\n+5304E4 Extract OS            00 (0) 'MS-DOS'\n+5304E5 General Purpose Flag  0000 (0)\n+5304E7 Compression Method    0000 (0) 'Stored'\n+5304E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5304ED CRC                   00000000 (0)\n+5304F1 Compressed Size       00000000 (0)\n+5304F5 Uncompressed Size     00000000 (0)\n+5304F9 Filename Length       007D (125)\n+5304FB Extra Length          0009 (9)\n+5304FD Comment Length        0000 (0)\n+5304FF Disk Start            0000 (0)\n+530501 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530503 Ext File Attributes   00000000 (0)\n+530507 Local Header Offset   0002C01D (180253)\n+53050B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53050B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530588 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53058A   Length              0005 (5)\n+53058C   Flags               01 (1) 'Modification'\n+53058D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530591 CENTRAL HEADER #93    02014B50 (33639248)\n+530595 Created Zip Spec      14 (20) '2.0'\n+530596 Created OS            00 (0) 'MS-DOS'\n+530597 Extract Zip Spec      14 (20) '2.0'\n+530598 Extract OS            00 (0) 'MS-DOS'\n+530599 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53059B Compression Method    0000 (0) 'Stored'\n+53059D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5305A1 CRC                   2B6EF697 (728692375)\n+5305A5 Compressed Size       000008CD (2253)\n+5305A9 Uncompressed Size     000008CD (2253)\n+5305AD Filename Length       0093 (147)\n+5305AF Extra Length          0009 (9)\n+5305B1 Comment Length        0000 (0)\n+5305B3 Disk Start            0000 (0)\n+5305B5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5305B7 Ext File Attributes   00000000 (0)\n+5305BB Local Header Offset   0002C0C1 (180417)\n+5305BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x530640: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5305BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5306D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5306D5   Length              0005 (5)\n-5306D7   Flags               01 (1) 'Modification'\n-5306D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5306DC CENTRAL HEADER #94    02014B50 (33639248)\n-5306E0 Created Zip Spec      14 (20) '2.0'\n-5306E1 Created OS            00 (0) 'MS-DOS'\n-5306E2 Extract Zip Spec      14 (20) '2.0'\n-5306E3 Extract OS            00 (0) 'MS-DOS'\n-5306E4 General Purpose Flag  0000 (0)\n-5306E6 Compression Method    0000 (0) 'Stored'\n-5306E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5306EC CRC                   00000000 (0)\n-5306F0 Compressed Size       00000000 (0)\n-5306F4 Uncompressed Size     00000000 (0)\n-5306F8 Filename Length       0034 (52)\n-5306FA Extra Length          0009 (9)\n-5306FC Comment Length        0000 (0)\n-5306FE Disk Start            0000 (0)\n-530700 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530702 Ext File Attributes   00000000 (0)\n-530706 Local Header Offset   0002CAC1 (182977)\n-53070A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53070A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53073E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530740   Length              0005 (5)\n-530742   Flags               01 (1) 'Modification'\n-530743   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530747 CENTRAL HEADER #95    02014B50 (33639248)\n-53074B Created Zip Spec      14 (20) '2.0'\n-53074C Created OS            00 (0) 'MS-DOS'\n-53074D Extract Zip Spec      14 (20) '2.0'\n-53074E Extract OS            00 (0) 'MS-DOS'\n-53074F General Purpose Flag  0000 (0)\n-530751 Compression Method    0000 (0) 'Stored'\n-530753 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530757 CRC                   00000000 (0)\n-53075B Compressed Size       00000000 (0)\n-53075F Uncompressed Size     00000000 (0)\n-530763 Filename Length       003D (61)\n-530765 Extra Length          0009 (9)\n-530767 Comment Length        0000 (0)\n-530769 Disk Start            0000 (0)\n-53076B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53076D Ext File Attributes   00000000 (0)\n-530771 Local Header Offset   0002CB1C (183068)\n-530775 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530775: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5307B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5307B4   Length              0005 (5)\n-5307B6   Flags               01 (1) 'Modification'\n-5307B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5307BB CENTRAL HEADER #96    02014B50 (33639248)\n-5307BF Created Zip Spec      14 (20) '2.0'\n-5307C0 Created OS            00 (0) 'MS-DOS'\n-5307C1 Extract Zip Spec      14 (20) '2.0'\n-5307C2 Extract OS            00 (0) 'MS-DOS'\n-5307C3 General Purpose Flag  0000 (0)\n-5307C5 Compression Method    0000 (0) 'Stored'\n-5307C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5307CB CRC                   00000000 (0)\n-5307CF Compressed Size       00000000 (0)\n-5307D3 Uncompressed Size     00000000 (0)\n-5307D7 Filename Length       007B (123)\n-5307D9 Extra Length          0009 (9)\n-5307DB Comment Length        0000 (0)\n-5307DD Disk Start            0000 (0)\n-5307DF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5307E1 Ext File Attributes   00000000 (0)\n-5307E5 Local Header Offset   0002CB80 (183168)\n-5307E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5307E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530864 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530866   Length              0005 (5)\n-530868   Flags               01 (1) 'Modification'\n-530869   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53086D CENTRAL HEADER #97    02014B50 (33639248)\n-530871 Created Zip Spec      14 (20) '2.0'\n-530872 Created OS            00 (0) 'MS-DOS'\n-530873 Extract Zip Spec      14 (20) '2.0'\n-530874 Extract OS            00 (0) 'MS-DOS'\n-530875 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-530877 Compression Method    0000 (0) 'Stored'\n-530879 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53087D CRC                   DBC79151 (3687289169)\n-530881 Compressed Size       000013B1 (5041)\n-530885 Uncompressed Size     000013B1 (5041)\n-530889 Filename Length       0091 (145)\n-53088B Extra Length          0009 (9)\n-53088D Comment Length        0000 (0)\n-53088F Disk Start            0000 (0)\n-530891 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530893 Ext File Attributes   00000000 (0)\n-530897 Local Header Offset   0002CC22 (183330)\n-53089B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+530652 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530654   Length              0005 (5)\n+530656   Flags               01 (1) 'Modification'\n+530657   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53065B CENTRAL HEADER #94    02014B50 (33639248)\n+53065F Created Zip Spec      14 (20) '2.0'\n+530660 Created OS            00 (0) 'MS-DOS'\n+530661 Extract Zip Spec      14 (20) '2.0'\n+530662 Extract OS            00 (0) 'MS-DOS'\n+530663 General Purpose Flag  0000 (0)\n+530665 Compression Method    0000 (0) 'Stored'\n+530667 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53066B CRC                   00000000 (0)\n+53066F Compressed Size       00000000 (0)\n+530673 Uncompressed Size     00000000 (0)\n+530677 Filename Length       0034 (52)\n+530679 Extra Length          0009 (9)\n+53067B Comment Length        0000 (0)\n+53067D Disk Start            0000 (0)\n+53067F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530681 Ext File Attributes   00000000 (0)\n+530685 Local Header Offset   0002CA58 (182872)\n+530689 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530689: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5306BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5306BF   Length              0005 (5)\n+5306C1   Flags               01 (1) 'Modification'\n+5306C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5306C6 CENTRAL HEADER #95    02014B50 (33639248)\n+5306CA Created Zip Spec      14 (20) '2.0'\n+5306CB Created OS            00 (0) 'MS-DOS'\n+5306CC Extract Zip Spec      14 (20) '2.0'\n+5306CD Extract OS            00 (0) 'MS-DOS'\n+5306CE General Purpose Flag  0000 (0)\n+5306D0 Compression Method    0000 (0) 'Stored'\n+5306D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5306D6 CRC                   00000000 (0)\n+5306DA Compressed Size       00000000 (0)\n+5306DE Uncompressed Size     00000000 (0)\n+5306E2 Filename Length       003D (61)\n+5306E4 Extra Length          0009 (9)\n+5306E6 Comment Length        0000 (0)\n+5306E8 Disk Start            0000 (0)\n+5306EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5306EC Ext File Attributes   00000000 (0)\n+5306F0 Local Header Offset   0002CAB3 (182963)\n+5306F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5306F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530731 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530733   Length              0005 (5)\n+530735   Flags               01 (1) 'Modification'\n+530736   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53073A CENTRAL HEADER #96    02014B50 (33639248)\n+53073E Created Zip Spec      14 (20) '2.0'\n+53073F Created OS            00 (0) 'MS-DOS'\n+530740 Extract Zip Spec      14 (20) '2.0'\n+530741 Extract OS            00 (0) 'MS-DOS'\n+530742 General Purpose Flag  0000 (0)\n+530744 Compression Method    0000 (0) 'Stored'\n+530746 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53074A CRC                   00000000 (0)\n+53074E Compressed Size       00000000 (0)\n+530752 Uncompressed Size     00000000 (0)\n+530756 Filename Length       007B (123)\n+530758 Extra Length          0009 (9)\n+53075A Comment Length        0000 (0)\n+53075C Disk Start            0000 (0)\n+53075E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530760 Ext File Attributes   00000000 (0)\n+530764 Local Header Offset   0002CB17 (183063)\n+530768 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530768: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5307E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5307E5   Length              0005 (5)\n+5307E7   Flags               01 (1) 'Modification'\n+5307E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5307EC CENTRAL HEADER #97    02014B50 (33639248)\n+5307F0 Created Zip Spec      14 (20) '2.0'\n+5307F1 Created OS            00 (0) 'MS-DOS'\n+5307F2 Extract Zip Spec      14 (20) '2.0'\n+5307F3 Extract OS            00 (0) 'MS-DOS'\n+5307F4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5307F6 Compression Method    0000 (0) 'Stored'\n+5307F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5307FC CRC                   DBC79151 (3687289169)\n+530800 Compressed Size       000013B1 (5041)\n+530804 Uncompressed Size     000013B1 (5041)\n+530808 Filename Length       0091 (145)\n+53080A Extra Length          0009 (9)\n+53080C Comment Length        0000 (0)\n+53080E Disk Start            0000 (0)\n+530810 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530812 Ext File Attributes   00000000 (0)\n+530816 Local Header Offset   0002CBB9 (183225)\n+53081A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x53089B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53081A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53092C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53092E   Length              0005 (5)\n-530930   Flags               01 (1) 'Modification'\n-530931   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530935 CENTRAL HEADER #98    02014B50 (33639248)\n-530939 Created Zip Spec      14 (20) '2.0'\n-53093A Created OS            00 (0) 'MS-DOS'\n-53093B Extract Zip Spec      14 (20) '2.0'\n-53093C Extract OS            00 (0) 'MS-DOS'\n-53093D General Purpose Flag  0000 (0)\n-53093F Compression Method    0000 (0) 'Stored'\n-530941 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530945 CRC                   00000000 (0)\n-530949 Compressed Size       00000000 (0)\n-53094D Uncompressed Size     00000000 (0)\n-530951 Filename Length       0081 (129)\n-530953 Extra Length          0009 (9)\n-530955 Comment Length        0000 (0)\n-530957 Disk Start            0000 (0)\n-530959 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53095B Ext File Attributes   00000000 (0)\n-53095F Local Header Offset   0002E09B (188571)\n-530963 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530963: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5309E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5309E6   Length              0005 (5)\n-5309E8   Flags               01 (1) 'Modification'\n-5309E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5309ED CENTRAL HEADER #99    02014B50 (33639248)\n-5309F1 Created Zip Spec      14 (20) '2.0'\n-5309F2 Created OS            00 (0) 'MS-DOS'\n-5309F3 Extract Zip Spec      14 (20) '2.0'\n-5309F4 Extract OS            00 (0) 'MS-DOS'\n-5309F5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5309F7 Compression Method    0000 (0) 'Stored'\n-5309F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5309FD CRC                   9AFFB21B (2600448539)\n-530A01 Compressed Size       0000064E (1614)\n-530A05 Uncompressed Size     0000064E (1614)\n-530A09 Filename Length       0097 (151)\n-530A0B Extra Length          0009 (9)\n-530A0D Comment Length        0000 (0)\n-530A0F Disk Start            0000 (0)\n-530A11 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530A13 Ext File Attributes   00000000 (0)\n-530A17 Local Header Offset   0002E143 (188739)\n-530A1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5308AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5308AD   Length              0005 (5)\n+5308AF   Flags               01 (1) 'Modification'\n+5308B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5308B4 CENTRAL HEADER #98    02014B50 (33639248)\n+5308B8 Created Zip Spec      14 (20) '2.0'\n+5308B9 Created OS            00 (0) 'MS-DOS'\n+5308BA Extract Zip Spec      14 (20) '2.0'\n+5308BB Extract OS            00 (0) 'MS-DOS'\n+5308BC General Purpose Flag  0000 (0)\n+5308BE Compression Method    0000 (0) 'Stored'\n+5308C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5308C4 CRC                   00000000 (0)\n+5308C8 Compressed Size       00000000 (0)\n+5308CC Uncompressed Size     00000000 (0)\n+5308D0 Filename Length       0081 (129)\n+5308D2 Extra Length          0009 (9)\n+5308D4 Comment Length        0000 (0)\n+5308D6 Disk Start            0000 (0)\n+5308D8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5308DA Ext File Attributes   00000000 (0)\n+5308DE Local Header Offset   0002E032 (188466)\n+5308E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5308E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530963 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530965   Length              0005 (5)\n+530967   Flags               01 (1) 'Modification'\n+530968   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53096C CENTRAL HEADER #99    02014B50 (33639248)\n+530970 Created Zip Spec      14 (20) '2.0'\n+530971 Created OS            00 (0) 'MS-DOS'\n+530972 Extract Zip Spec      14 (20) '2.0'\n+530973 Extract OS            00 (0) 'MS-DOS'\n+530974 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+530976 Compression Method    0000 (0) 'Stored'\n+530978 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53097C CRC                   9AFFB21B (2600448539)\n+530980 Compressed Size       0000064E (1614)\n+530984 Uncompressed Size     0000064E (1614)\n+530988 Filename Length       0097 (151)\n+53098A Extra Length          0009 (9)\n+53098C Comment Length        0000 (0)\n+53098E Disk Start            0000 (0)\n+530990 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530992 Ext File Attributes   00000000 (0)\n+530996 Local Header Offset   0002E0DA (188634)\n+53099A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x530A1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53099A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-530AB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530AB4   Length              0005 (5)\n-530AB6   Flags               01 (1) 'Modification'\n-530AB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530ABB CENTRAL HEADER #100   02014B50 (33639248)\n-530ABF Created Zip Spec      14 (20) '2.0'\n-530AC0 Created OS            00 (0) 'MS-DOS'\n-530AC1 Extract Zip Spec      14 (20) '2.0'\n-530AC2 Extract OS            00 (0) 'MS-DOS'\n-530AC3 General Purpose Flag  0000 (0)\n-530AC5 Compression Method    0000 (0) 'Stored'\n-530AC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530ACB CRC                   00000000 (0)\n-530ACF Compressed Size       00000000 (0)\n-530AD3 Uncompressed Size     00000000 (0)\n-530AD7 Filename Length       007D (125)\n-530AD9 Extra Length          0009 (9)\n-530ADB Comment Length        0000 (0)\n-530ADD Disk Start            0000 (0)\n-530ADF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530AE1 Ext File Attributes   00000000 (0)\n-530AE5 Local Header Offset   0002E85F (190559)\n-530AE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530AE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530B66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530B68   Length              0005 (5)\n-530B6A   Flags               01 (1) 'Modification'\n-530B6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530B6F CENTRAL HEADER #101   02014B50 (33639248)\n-530B73 Created Zip Spec      14 (20) '2.0'\n-530B74 Created OS            00 (0) 'MS-DOS'\n-530B75 Extract Zip Spec      14 (20) '2.0'\n-530B76 Extract OS            00 (0) 'MS-DOS'\n-530B77 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-530B79 Compression Method    0000 (0) 'Stored'\n-530B7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530B7F CRC                   88CF36AA (2295281322)\n-530B83 Compressed Size       00000A4F (2639)\n-530B87 Uncompressed Size     00000A4F (2639)\n-530B8B Filename Length       0093 (147)\n-530B8D Extra Length          0009 (9)\n-530B8F Comment Length        0000 (0)\n-530B91 Disk Start            0000 (0)\n-530B93 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530B95 Ext File Attributes   00000000 (0)\n-530B99 Local Header Offset   0002E903 (190723)\n-530B9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+530A31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530A33   Length              0005 (5)\n+530A35   Flags               01 (1) 'Modification'\n+530A36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530A3A CENTRAL HEADER #100   02014B50 (33639248)\n+530A3E Created Zip Spec      14 (20) '2.0'\n+530A3F Created OS            00 (0) 'MS-DOS'\n+530A40 Extract Zip Spec      14 (20) '2.0'\n+530A41 Extract OS            00 (0) 'MS-DOS'\n+530A42 General Purpose Flag  0000 (0)\n+530A44 Compression Method    0000 (0) 'Stored'\n+530A46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530A4A CRC                   00000000 (0)\n+530A4E Compressed Size       00000000 (0)\n+530A52 Uncompressed Size     00000000 (0)\n+530A56 Filename Length       007D (125)\n+530A58 Extra Length          0009 (9)\n+530A5A Comment Length        0000 (0)\n+530A5C Disk Start            0000 (0)\n+530A5E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530A60 Ext File Attributes   00000000 (0)\n+530A64 Local Header Offset   0002E7F6 (190454)\n+530A68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530A68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530AE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530AE7   Length              0005 (5)\n+530AE9   Flags               01 (1) 'Modification'\n+530AEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530AEE CENTRAL HEADER #101   02014B50 (33639248)\n+530AF2 Created Zip Spec      14 (20) '2.0'\n+530AF3 Created OS            00 (0) 'MS-DOS'\n+530AF4 Extract Zip Spec      14 (20) '2.0'\n+530AF5 Extract OS            00 (0) 'MS-DOS'\n+530AF6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+530AF8 Compression Method    0000 (0) 'Stored'\n+530AFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530AFE CRC                   88CF36AA (2295281322)\n+530B02 Compressed Size       00000A4F (2639)\n+530B06 Uncompressed Size     00000A4F (2639)\n+530B0A Filename Length       0093 (147)\n+530B0C Extra Length          0009 (9)\n+530B0E Comment Length        0000 (0)\n+530B10 Disk Start            0000 (0)\n+530B12 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530B14 Ext File Attributes   00000000 (0)\n+530B18 Local Header Offset   0002E89A (190618)\n+530B1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x530B9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x530B1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-530C30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530C32   Length              0005 (5)\n-530C34   Flags               01 (1) 'Modification'\n-530C35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530C39 CENTRAL HEADER #102   02014B50 (33639248)\n-530C3D Created Zip Spec      14 (20) '2.0'\n-530C3E Created OS            00 (0) 'MS-DOS'\n-530C3F Extract Zip Spec      14 (20) '2.0'\n-530C40 Extract OS            00 (0) 'MS-DOS'\n-530C41 General Purpose Flag  0000 (0)\n-530C43 Compression Method    0000 (0) 'Stored'\n-530C45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530C49 CRC                   00000000 (0)\n-530C4D Compressed Size       00000000 (0)\n-530C51 Uncompressed Size     00000000 (0)\n-530C55 Filename Length       0086 (134)\n-530C57 Extra Length          0009 (9)\n-530C59 Comment Length        0000 (0)\n-530C5B Disk Start            0000 (0)\n-530C5D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530C5F Ext File Attributes   00000000 (0)\n-530C63 Local Header Offset   0002F41C (193564)\n-530C67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+530BAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530BB1   Length              0005 (5)\n+530BB3   Flags               01 (1) 'Modification'\n+530BB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530BB8 CENTRAL HEADER #102   02014B50 (33639248)\n+530BBC Created Zip Spec      14 (20) '2.0'\n+530BBD Created OS            00 (0) 'MS-DOS'\n+530BBE Extract Zip Spec      14 (20) '2.0'\n+530BBF Extract OS            00 (0) 'MS-DOS'\n+530BC0 General Purpose Flag  0000 (0)\n+530BC2 Compression Method    0000 (0) 'Stored'\n+530BC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530BC8 CRC                   00000000 (0)\n+530BCC Compressed Size       00000000 (0)\n+530BD0 Uncompressed Size     00000000 (0)\n+530BD4 Filename Length       0086 (134)\n+530BD6 Extra Length          0009 (9)\n+530BD8 Comment Length        0000 (0)\n+530BDA Disk Start            0000 (0)\n+530BDC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530BDE Ext File Attributes   00000000 (0)\n+530BE2 Local Header Offset   0002F3B3 (193459)\n+530BE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x530C67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x530BE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-530CED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530CEF   Length              0005 (5)\n-530CF1   Flags               01 (1) 'Modification'\n-530CF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530CF6 CENTRAL HEADER #103   02014B50 (33639248)\n-530CFA Created Zip Spec      14 (20) '2.0'\n-530CFB Created OS            00 (0) 'MS-DOS'\n-530CFC Extract Zip Spec      14 (20) '2.0'\n-530CFD Extract OS            00 (0) 'MS-DOS'\n-530CFE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-530D00 Compression Method    0000 (0) 'Stored'\n-530D02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530D06 CRC                   9593555C (2509460828)\n-530D0A Compressed Size       00000D05 (3333)\n-530D0E Uncompressed Size     00000D05 (3333)\n-530D12 Filename Length       009C (156)\n-530D14 Extra Length          0009 (9)\n-530D16 Comment Length        0000 (0)\n-530D18 Disk Start            0000 (0)\n-530D1A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530D1C Ext File Attributes   00000000 (0)\n-530D20 Local Header Offset   0002F4C9 (193737)\n-530D24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+530C6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530C6E   Length              0005 (5)\n+530C70   Flags               01 (1) 'Modification'\n+530C71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530C75 CENTRAL HEADER #103   02014B50 (33639248)\n+530C79 Created Zip Spec      14 (20) '2.0'\n+530C7A Created OS            00 (0) 'MS-DOS'\n+530C7B Extract Zip Spec      14 (20) '2.0'\n+530C7C Extract OS            00 (0) 'MS-DOS'\n+530C7D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+530C7F Compression Method    0000 (0) 'Stored'\n+530C81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530C85 CRC                   9593555C (2509460828)\n+530C89 Compressed Size       00000D05 (3333)\n+530C8D Uncompressed Size     00000D05 (3333)\n+530C91 Filename Length       009C (156)\n+530C93 Extra Length          0009 (9)\n+530C95 Comment Length        0000 (0)\n+530C97 Disk Start            0000 (0)\n+530C99 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530C9B Ext File Attributes   00000000 (0)\n+530C9F Local Header Offset   0002F460 (193632)\n+530CA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x530D24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x530CA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-530DC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530DC2   Length              0005 (5)\n-530DC4   Flags               01 (1) 'Modification'\n-530DC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530DC9 CENTRAL HEADER #104   02014B50 (33639248)\n-530DCD Created Zip Spec      14 (20) '2.0'\n-530DCE Created OS            00 (0) 'MS-DOS'\n-530DCF Extract Zip Spec      14 (20) '2.0'\n-530DD0 Extract OS            00 (0) 'MS-DOS'\n-530DD1 General Purpose Flag  0000 (0)\n-530DD3 Compression Method    0000 (0) 'Stored'\n-530DD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530DD9 CRC                   00000000 (0)\n-530DDD Compressed Size       00000000 (0)\n-530DE1 Uncompressed Size     00000000 (0)\n-530DE5 Filename Length       007B (123)\n-530DE7 Extra Length          0009 (9)\n-530DE9 Comment Length        0000 (0)\n-530DEB Disk Start            0000 (0)\n-530DED Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530DEF Ext File Attributes   00000000 (0)\n-530DF3 Local Header Offset   000302A1 (197281)\n-530DF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530DF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530E72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530E74   Length              0005 (5)\n-530E76   Flags               01 (1) 'Modification'\n-530E77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530E7B CENTRAL HEADER #105   02014B50 (33639248)\n-530E7F Created Zip Spec      14 (20) '2.0'\n-530E80 Created OS            00 (0) 'MS-DOS'\n-530E81 Extract Zip Spec      14 (20) '2.0'\n-530E82 Extract OS            00 (0) 'MS-DOS'\n-530E83 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-530E85 Compression Method    0000 (0) 'Stored'\n-530E87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530E8B CRC                   9640338D (2520789901)\n-530E8F Compressed Size       000013DD (5085)\n-530E93 Uncompressed Size     000013DD (5085)\n-530E97 Filename Length       0091 (145)\n-530E99 Extra Length          0009 (9)\n-530E9B Comment Length        0000 (0)\n-530E9D Disk Start            0000 (0)\n-530E9F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530EA1 Ext File Attributes   00000000 (0)\n-530EA5 Local Header Offset   00030343 (197443)\n-530EA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+530D3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530D41   Length              0005 (5)\n+530D43   Flags               01 (1) 'Modification'\n+530D44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530D48 CENTRAL HEADER #104   02014B50 (33639248)\n+530D4C Created Zip Spec      14 (20) '2.0'\n+530D4D Created OS            00 (0) 'MS-DOS'\n+530D4E Extract Zip Spec      14 (20) '2.0'\n+530D4F Extract OS            00 (0) 'MS-DOS'\n+530D50 General Purpose Flag  0000 (0)\n+530D52 Compression Method    0000 (0) 'Stored'\n+530D54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530D58 CRC                   00000000 (0)\n+530D5C Compressed Size       00000000 (0)\n+530D60 Uncompressed Size     00000000 (0)\n+530D64 Filename Length       007B (123)\n+530D66 Extra Length          0009 (9)\n+530D68 Comment Length        0000 (0)\n+530D6A Disk Start            0000 (0)\n+530D6C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530D6E Ext File Attributes   00000000 (0)\n+530D72 Local Header Offset   00030238 (197176)\n+530D76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530D76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530DF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530DF3   Length              0005 (5)\n+530DF5   Flags               01 (1) 'Modification'\n+530DF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530DFA CENTRAL HEADER #105   02014B50 (33639248)\n+530DFE Created Zip Spec      14 (20) '2.0'\n+530DFF Created OS            00 (0) 'MS-DOS'\n+530E00 Extract Zip Spec      14 (20) '2.0'\n+530E01 Extract OS            00 (0) 'MS-DOS'\n+530E02 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+530E04 Compression Method    0000 (0) 'Stored'\n+530E06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530E0A CRC                   9640338D (2520789901)\n+530E0E Compressed Size       000013DD (5085)\n+530E12 Uncompressed Size     000013DD (5085)\n+530E16 Filename Length       0091 (145)\n+530E18 Extra Length          0009 (9)\n+530E1A Comment Length        0000 (0)\n+530E1C Disk Start            0000 (0)\n+530E1E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530E20 Ext File Attributes   00000000 (0)\n+530E24 Local Header Offset   000302DA (197338)\n+530E28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x530EA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x530E28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-530F3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530F3C   Length              0005 (5)\n-530F3E   Flags               01 (1) 'Modification'\n-530F3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530F43 CENTRAL HEADER #106   02014B50 (33639248)\n-530F47 Created Zip Spec      14 (20) '2.0'\n-530F48 Created OS            00 (0) 'MS-DOS'\n-530F49 Extract Zip Spec      14 (20) '2.0'\n-530F4A Extract OS            00 (0) 'MS-DOS'\n-530F4B General Purpose Flag  0000 (0)\n-530F4D Compression Method    0000 (0) 'Stored'\n-530F4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530F53 CRC                   00000000 (0)\n-530F57 Compressed Size       00000000 (0)\n-530F5B Uncompressed Size     00000000 (0)\n-530F5F Filename Length       007D (125)\n-530F61 Extra Length          0009 (9)\n-530F63 Comment Length        0000 (0)\n-530F65 Disk Start            0000 (0)\n-530F67 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-530F69 Ext File Attributes   00000000 (0)\n-530F6D Local Header Offset   000317E8 (202728)\n-530F71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530F71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530FEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530FF0   Length              0005 (5)\n-530FF2   Flags               01 (1) 'Modification'\n-530FF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530FF7 CENTRAL HEADER #107   02014B50 (33639248)\n-530FFB Created Zip Spec      14 (20) '2.0'\n-530FFC Created OS            00 (0) 'MS-DOS'\n-530FFD Extract Zip Spec      14 (20) '2.0'\n-530FFE Extract OS            00 (0) 'MS-DOS'\n-530FFF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531001 Compression Method    0000 (0) 'Stored'\n-531003 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531007 CRC                   5232B519 (1379054873)\n-53100B Compressed Size       00001C1F (7199)\n-53100F Uncompressed Size     00001C1F (7199)\n-531013 Filename Length       0093 (147)\n-531015 Extra Length          0009 (9)\n-531017 Comment Length        0000 (0)\n-531019 Disk Start            0000 (0)\n-53101B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53101D Ext File Attributes   00000000 (0)\n-531021 Local Header Offset   0003188C (202892)\n-531025 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+530EB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530EBB   Length              0005 (5)\n+530EBD   Flags               01 (1) 'Modification'\n+530EBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530EC2 CENTRAL HEADER #106   02014B50 (33639248)\n+530EC6 Created Zip Spec      14 (20) '2.0'\n+530EC7 Created OS            00 (0) 'MS-DOS'\n+530EC8 Extract Zip Spec      14 (20) '2.0'\n+530EC9 Extract OS            00 (0) 'MS-DOS'\n+530ECA General Purpose Flag  0000 (0)\n+530ECC Compression Method    0000 (0) 'Stored'\n+530ECE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530ED2 CRC                   00000000 (0)\n+530ED6 Compressed Size       00000000 (0)\n+530EDA Uncompressed Size     00000000 (0)\n+530EDE Filename Length       007D (125)\n+530EE0 Extra Length          0009 (9)\n+530EE2 Comment Length        0000 (0)\n+530EE4 Disk Start            0000 (0)\n+530EE6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530EE8 Ext File Attributes   00000000 (0)\n+530EEC Local Header Offset   0003177F (202623)\n+530EF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x530EF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+530F6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+530F6F   Length              0005 (5)\n+530F71   Flags               01 (1) 'Modification'\n+530F72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+530F76 CENTRAL HEADER #107   02014B50 (33639248)\n+530F7A Created Zip Spec      14 (20) '2.0'\n+530F7B Created OS            00 (0) 'MS-DOS'\n+530F7C Extract Zip Spec      14 (20) '2.0'\n+530F7D Extract OS            00 (0) 'MS-DOS'\n+530F7E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+530F80 Compression Method    0000 (0) 'Stored'\n+530F82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+530F86 CRC                   5232B519 (1379054873)\n+530F8A Compressed Size       00001C1F (7199)\n+530F8E Uncompressed Size     00001C1F (7199)\n+530F92 Filename Length       0093 (147)\n+530F94 Extra Length          0009 (9)\n+530F96 Comment Length        0000 (0)\n+530F98 Disk Start            0000 (0)\n+530F9A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+530F9C Ext File Attributes   00000000 (0)\n+530FA0 Local Header Offset   00031823 (202787)\n+530FA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x531025: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x530FA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5310B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5310BA   Length              0005 (5)\n-5310BC   Flags               01 (1) 'Modification'\n-5310BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5310C1 CENTRAL HEADER #108   02014B50 (33639248)\n-5310C5 Created Zip Spec      14 (20) '2.0'\n-5310C6 Created OS            00 (0) 'MS-DOS'\n-5310C7 Extract Zip Spec      14 (20) '2.0'\n-5310C8 Extract OS            00 (0) 'MS-DOS'\n-5310C9 General Purpose Flag  0000 (0)\n-5310CB Compression Method    0000 (0) 'Stored'\n-5310CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5310D1 CRC                   00000000 (0)\n-5310D5 Compressed Size       00000000 (0)\n-5310D9 Uncompressed Size     00000000 (0)\n-5310DD Filename Length       007A (122)\n-5310DF Extra Length          0009 (9)\n-5310E1 Comment Length        0000 (0)\n-5310E3 Disk Start            0000 (0)\n-5310E5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5310E7 Ext File Attributes   00000000 (0)\n-5310EB Local Header Offset   00033575 (210293)\n-5310EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5310EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531169 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53116B   Length              0005 (5)\n-53116D   Flags               01 (1) 'Modification'\n-53116E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531172 CENTRAL HEADER #109   02014B50 (33639248)\n-531176 Created Zip Spec      14 (20) '2.0'\n-531177 Created OS            00 (0) 'MS-DOS'\n-531178 Extract Zip Spec      14 (20) '2.0'\n-531179 Extract OS            00 (0) 'MS-DOS'\n-53117A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53117C Compression Method    0000 (0) 'Stored'\n-53117E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531182 CRC                   57267C45 (1462139973)\n-531186 Compressed Size       000013D6 (5078)\n-53118A Uncompressed Size     000013D6 (5078)\n-53118E Filename Length       0090 (144)\n-531190 Extra Length          0009 (9)\n-531192 Comment Length        0000 (0)\n-531194 Disk Start            0000 (0)\n-531196 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531198 Ext File Attributes   00000000 (0)\n-53119C Local Header Offset   00033616 (210454)\n-5311A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+531037 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531039   Length              0005 (5)\n+53103B   Flags               01 (1) 'Modification'\n+53103C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531040 CENTRAL HEADER #108   02014B50 (33639248)\n+531044 Created Zip Spec      14 (20) '2.0'\n+531045 Created OS            00 (0) 'MS-DOS'\n+531046 Extract Zip Spec      14 (20) '2.0'\n+531047 Extract OS            00 (0) 'MS-DOS'\n+531048 General Purpose Flag  0000 (0)\n+53104A Compression Method    0000 (0) 'Stored'\n+53104C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531050 CRC                   00000000 (0)\n+531054 Compressed Size       00000000 (0)\n+531058 Uncompressed Size     00000000 (0)\n+53105C Filename Length       007A (122)\n+53105E Extra Length          0009 (9)\n+531060 Comment Length        0000 (0)\n+531062 Disk Start            0000 (0)\n+531064 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531066 Ext File Attributes   00000000 (0)\n+53106A Local Header Offset   0003350C (210188)\n+53106E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53106E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5310E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5310EA   Length              0005 (5)\n+5310EC   Flags               01 (1) 'Modification'\n+5310ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5310F1 CENTRAL HEADER #109   02014B50 (33639248)\n+5310F5 Created Zip Spec      14 (20) '2.0'\n+5310F6 Created OS            00 (0) 'MS-DOS'\n+5310F7 Extract Zip Spec      14 (20) '2.0'\n+5310F8 Extract OS            00 (0) 'MS-DOS'\n+5310F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5310FB Compression Method    0000 (0) 'Stored'\n+5310FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531101 CRC                   57267C45 (1462139973)\n+531105 Compressed Size       000013D6 (5078)\n+531109 Uncompressed Size     000013D6 (5078)\n+53110D Filename Length       0090 (144)\n+53110F Extra Length          0009 (9)\n+531111 Comment Length        0000 (0)\n+531113 Disk Start            0000 (0)\n+531115 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531117 Ext File Attributes   00000000 (0)\n+53111B Local Header Offset   000335AD (210349)\n+53111F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5311A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53111F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-531230 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531232   Length              0005 (5)\n-531234   Flags               01 (1) 'Modification'\n-531235   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531239 CENTRAL HEADER #110   02014B50 (33639248)\n-53123D Created Zip Spec      14 (20) '2.0'\n-53123E Created OS            00 (0) 'MS-DOS'\n-53123F Extract Zip Spec      14 (20) '2.0'\n-531240 Extract OS            00 (0) 'MS-DOS'\n-531241 General Purpose Flag  0000 (0)\n-531243 Compression Method    0000 (0) 'Stored'\n-531245 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531249 CRC                   00000000 (0)\n-53124D Compressed Size       00000000 (0)\n-531251 Uncompressed Size     00000000 (0)\n-531255 Filename Length       0081 (129)\n-531257 Extra Length          0009 (9)\n-531259 Comment Length        0000 (0)\n-53125B Disk Start            0000 (0)\n-53125D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53125F Ext File Attributes   00000000 (0)\n-531263 Local Header Offset   00034AB3 (215731)\n-531267 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531267: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5312E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5312EA   Length              0005 (5)\n-5312EC   Flags               01 (1) 'Modification'\n-5312ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5312F1 CENTRAL HEADER #111   02014B50 (33639248)\n-5312F5 Created Zip Spec      14 (20) '2.0'\n-5312F6 Created OS            00 (0) 'MS-DOS'\n-5312F7 Extract Zip Spec      14 (20) '2.0'\n-5312F8 Extract OS            00 (0) 'MS-DOS'\n-5312F9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5312FB Compression Method    0000 (0) 'Stored'\n-5312FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531301 CRC                   333FC2BB (859816635)\n-531305 Compressed Size       00000736 (1846)\n-531309 Uncompressed Size     00000736 (1846)\n-53130D Filename Length       0097 (151)\n-53130F Extra Length          0009 (9)\n-531311 Comment Length        0000 (0)\n-531313 Disk Start            0000 (0)\n-531315 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531317 Ext File Attributes   00000000 (0)\n-53131B Local Header Offset   00034B5B (215899)\n-53131F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5311AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5311B1   Length              0005 (5)\n+5311B3   Flags               01 (1) 'Modification'\n+5311B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5311B8 CENTRAL HEADER #110   02014B50 (33639248)\n+5311BC Created Zip Spec      14 (20) '2.0'\n+5311BD Created OS            00 (0) 'MS-DOS'\n+5311BE Extract Zip Spec      14 (20) '2.0'\n+5311BF Extract OS            00 (0) 'MS-DOS'\n+5311C0 General Purpose Flag  0000 (0)\n+5311C2 Compression Method    0000 (0) 'Stored'\n+5311C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5311C8 CRC                   00000000 (0)\n+5311CC Compressed Size       00000000 (0)\n+5311D0 Uncompressed Size     00000000 (0)\n+5311D4 Filename Length       0081 (129)\n+5311D6 Extra Length          0009 (9)\n+5311D8 Comment Length        0000 (0)\n+5311DA Disk Start            0000 (0)\n+5311DC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5311DE Ext File Attributes   00000000 (0)\n+5311E2 Local Header Offset   00034A4A (215626)\n+5311E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5311E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531267 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531269   Length              0005 (5)\n+53126B   Flags               01 (1) 'Modification'\n+53126C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531270 CENTRAL HEADER #111   02014B50 (33639248)\n+531274 Created Zip Spec      14 (20) '2.0'\n+531275 Created OS            00 (0) 'MS-DOS'\n+531276 Extract Zip Spec      14 (20) '2.0'\n+531277 Extract OS            00 (0) 'MS-DOS'\n+531278 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53127A Compression Method    0000 (0) 'Stored'\n+53127C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531280 CRC                   333FC2BB (859816635)\n+531284 Compressed Size       00000736 (1846)\n+531288 Uncompressed Size     00000736 (1846)\n+53128C Filename Length       0097 (151)\n+53128E Extra Length          0009 (9)\n+531290 Comment Length        0000 (0)\n+531292 Disk Start            0000 (0)\n+531294 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531296 Ext File Attributes   00000000 (0)\n+53129A Local Header Offset   00034AF2 (215794)\n+53129E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x53131F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53129E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5313B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5313B8   Length              0005 (5)\n-5313BA   Flags               01 (1) 'Modification'\n-5313BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5313BF CENTRAL HEADER #112   02014B50 (33639248)\n-5313C3 Created Zip Spec      14 (20) '2.0'\n-5313C4 Created OS            00 (0) 'MS-DOS'\n-5313C5 Extract Zip Spec      14 (20) '2.0'\n-5313C6 Extract OS            00 (0) 'MS-DOS'\n-5313C7 General Purpose Flag  0000 (0)\n-5313C9 Compression Method    0000 (0) 'Stored'\n-5313CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5313CF CRC                   00000000 (0)\n-5313D3 Compressed Size       00000000 (0)\n-5313D7 Uncompressed Size     00000000 (0)\n-5313DB Filename Length       0024 (36)\n-5313DD Extra Length          0009 (9)\n-5313DF Comment Length        0000 (0)\n-5313E1 Disk Start            0000 (0)\n-5313E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5313E5 Ext File Attributes   00000000 (0)\n-5313E9 Local Header Offset   0003535F (217951)\n-5313ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5313ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531411 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531413   Length              0005 (5)\n-531415   Flags               01 (1) 'Modification'\n-531416   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53141A CENTRAL HEADER #113   02014B50 (33639248)\n-53141E Created Zip Spec      14 (20) '2.0'\n-53141F Created OS            00 (0) 'MS-DOS'\n-531420 Extract Zip Spec      14 (20) '2.0'\n-531421 Extract OS            00 (0) 'MS-DOS'\n-531422 General Purpose Flag  0000 (0)\n-531424 Compression Method    0000 (0) 'Stored'\n-531426 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53142A CRC                   00000000 (0)\n-53142E Compressed Size       00000000 (0)\n-531432 Uncompressed Size     00000000 (0)\n-531436 Filename Length       002D (45)\n-531438 Extra Length          0009 (9)\n-53143A Comment Length        0000 (0)\n-53143C Disk Start            0000 (0)\n-53143E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531440 Ext File Attributes   00000000 (0)\n-531444 Local Header Offset   000353AA (218026)\n-531448 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531448: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531475 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531477   Length              0005 (5)\n-531479   Flags               01 (1) 'Modification'\n-53147A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53147E CENTRAL HEADER #114   02014B50 (33639248)\n-531482 Created Zip Spec      14 (20) '2.0'\n-531483 Created OS            00 (0) 'MS-DOS'\n-531484 Extract Zip Spec      14 (20) '2.0'\n-531485 Extract OS            00 (0) 'MS-DOS'\n-531486 General Purpose Flag  0000 (0)\n-531488 Compression Method    0000 (0) 'Stored'\n-53148A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53148E CRC                   00000000 (0)\n-531492 Compressed Size       00000000 (0)\n-531496 Uncompressed Size     00000000 (0)\n-53149A Filename Length       005A (90)\n-53149C Extra Length          0009 (9)\n-53149E Comment Length        0000 (0)\n-5314A0 Disk Start            0000 (0)\n-5314A2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5314A4 Ext File Attributes   00000000 (0)\n-5314A8 Local Header Offset   000353FE (218110)\n-5314AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5314AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531506 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531508   Length              0005 (5)\n-53150A   Flags               01 (1) 'Modification'\n-53150B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53150F CENTRAL HEADER #115   02014B50 (33639248)\n-531513 Created Zip Spec      14 (20) '2.0'\n-531514 Created OS            00 (0) 'MS-DOS'\n-531515 Extract Zip Spec      14 (20) '2.0'\n-531516 Extract OS            00 (0) 'MS-DOS'\n-531517 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531519 Compression Method    0000 (0) 'Stored'\n-53151B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53151F CRC                   10CC5E74 (281828980)\n-531523 Compressed Size       000009CD (2509)\n-531527 Uncompressed Size     000009CD (2509)\n-53152B Filename Length       0070 (112)\n-53152D Extra Length          0009 (9)\n-53152F Comment Length        0000 (0)\n-531531 Disk Start            0000 (0)\n-531533 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531535 Ext File Attributes   00000000 (0)\n-531539 Local Header Offset   0003547F (218239)\n-53153D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53153D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5315AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5315AF   Length              0005 (5)\n-5315B1   Flags               01 (1) 'Modification'\n-5315B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5315B6 CENTRAL HEADER #116   02014B50 (33639248)\n-5315BA Created Zip Spec      14 (20) '2.0'\n-5315BB Created OS            00 (0) 'MS-DOS'\n-5315BC Extract Zip Spec      14 (20) '2.0'\n-5315BD Extract OS            00 (0) 'MS-DOS'\n-5315BE General Purpose Flag  0000 (0)\n-5315C0 Compression Method    0000 (0) 'Stored'\n-5315C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5315C6 CRC                   00000000 (0)\n-5315CA Compressed Size       00000000 (0)\n-5315CE Uncompressed Size     00000000 (0)\n-5315D2 Filename Length       005A (90)\n-5315D4 Extra Length          0009 (9)\n-5315D6 Comment Length        0000 (0)\n-5315D8 Disk Start            0000 (0)\n-5315DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5315DC Ext File Attributes   00000000 (0)\n-5315E0 Local Header Offset   00035EF3 (220915)\n-5315E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5315E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53163E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531640   Length              0005 (5)\n-531642   Flags               01 (1) 'Modification'\n-531643   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531647 CENTRAL HEADER #117   02014B50 (33639248)\n-53164B Created Zip Spec      14 (20) '2.0'\n-53164C Created OS            00 (0) 'MS-DOS'\n-53164D Extract Zip Spec      14 (20) '2.0'\n-53164E Extract OS            00 (0) 'MS-DOS'\n-53164F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531651 Compression Method    0000 (0) 'Stored'\n-531653 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531657 CRC                   5F6BF872 (1600911474)\n-53165B Compressed Size       000009A0 (2464)\n-53165F Uncompressed Size     000009A0 (2464)\n-531663 Filename Length       0070 (112)\n-531665 Extra Length          0009 (9)\n-531667 Comment Length        0000 (0)\n-531669 Disk Start            0000 (0)\n-53166B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53166D Ext File Attributes   00000000 (0)\n-531671 Local Header Offset   00035F74 (221044)\n-531675 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531675: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5316E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5316E7   Length              0005 (5)\n-5316E9   Flags               01 (1) 'Modification'\n-5316EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5316EE CENTRAL HEADER #118   02014B50 (33639248)\n-5316F2 Created Zip Spec      14 (20) '2.0'\n-5316F3 Created OS            00 (0) 'MS-DOS'\n-5316F4 Extract Zip Spec      14 (20) '2.0'\n-5316F5 Extract OS            00 (0) 'MS-DOS'\n-5316F6 General Purpose Flag  0000 (0)\n-5316F8 Compression Method    0000 (0) 'Stored'\n-5316FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5316FE CRC                   00000000 (0)\n-531702 Compressed Size       00000000 (0)\n-531706 Uncompressed Size     00000000 (0)\n-53170A Filename Length       0023 (35)\n-53170C Extra Length          0009 (9)\n-53170E Comment Length        0000 (0)\n-531710 Disk Start            0000 (0)\n-531712 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531714 Ext File Attributes   00000000 (0)\n-531718 Local Header Offset   000369BB (223675)\n-53171C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53171C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53173F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531741   Length              0005 (5)\n-531743   Flags               01 (1) 'Modification'\n-531744   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531748 CENTRAL HEADER #119   02014B50 (33639248)\n-53174C Created Zip Spec      14 (20) '2.0'\n-53174D Created OS            00 (0) 'MS-DOS'\n-53174E Extract Zip Spec      14 (20) '2.0'\n-53174F Extract OS            00 (0) 'MS-DOS'\n-531750 General Purpose Flag  0000 (0)\n-531752 Compression Method    0000 (0) 'Stored'\n-531754 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531758 CRC                   00000000 (0)\n-53175C Compressed Size       00000000 (0)\n-531760 Uncompressed Size     00000000 (0)\n-531764 Filename Length       002C (44)\n-531766 Extra Length          0009 (9)\n-531768 Comment Length        0000 (0)\n-53176A Disk Start            0000 (0)\n-53176C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53176E Ext File Attributes   00000000 (0)\n-531772 Local Header Offset   00036A05 (223749)\n-531776 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531776: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5317A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5317A4   Length              0005 (5)\n-5317A6   Flags               01 (1) 'Modification'\n-5317A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5317AB CENTRAL HEADER #120   02014B50 (33639248)\n-5317AF Created Zip Spec      14 (20) '2.0'\n-5317B0 Created OS            00 (0) 'MS-DOS'\n-5317B1 Extract Zip Spec      14 (20) '2.0'\n-5317B2 Extract OS            00 (0) 'MS-DOS'\n-5317B3 General Purpose Flag  0000 (0)\n-5317B5 Compression Method    0000 (0) 'Stored'\n-5317B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5317BB CRC                   00000000 (0)\n-5317BF Compressed Size       00000000 (0)\n-5317C3 Uncompressed Size     00000000 (0)\n-5317C7 Filename Length       0056 (86)\n-5317C9 Extra Length          0009 (9)\n-5317CB Comment Length        0000 (0)\n-5317CD Disk Start            0000 (0)\n-5317CF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5317D1 Ext File Attributes   00000000 (0)\n-5317D5 Local Header Offset   00036A58 (223832)\n-5317D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5317D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53182F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531831   Length              0005 (5)\n-531833   Flags               01 (1) 'Modification'\n-531834   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531838 CENTRAL HEADER #121   02014B50 (33639248)\n-53183C Created Zip Spec      14 (20) '2.0'\n-53183D Created OS            00 (0) 'MS-DOS'\n-53183E Extract Zip Spec      14 (20) '2.0'\n-53183F Extract OS            00 (0) 'MS-DOS'\n-531840 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531842 Compression Method    0000 (0) 'Stored'\n-531844 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531848 CRC                   456B0BC9 (1164643273)\n-53184C Compressed Size       00001135 (4405)\n-531850 Uncompressed Size     00001135 (4405)\n-531854 Filename Length       006C (108)\n-531856 Extra Length          0009 (9)\n-531858 Comment Length        0000 (0)\n-53185A Disk Start            0000 (0)\n-53185C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53185E Ext File Attributes   00000000 (0)\n-531862 Local Header Offset   00036AD5 (223957)\n-531866 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531866: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5318D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5318D4   Length              0005 (5)\n-5318D6   Flags               01 (1) 'Modification'\n-5318D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5318DB CENTRAL HEADER #122   02014B50 (33639248)\n-5318DF Created Zip Spec      14 (20) '2.0'\n-5318E0 Created OS            00 (0) 'MS-DOS'\n-5318E1 Extract Zip Spec      14 (20) '2.0'\n-5318E2 Extract OS            00 (0) 'MS-DOS'\n-5318E3 General Purpose Flag  0000 (0)\n-5318E5 Compression Method    0000 (0) 'Stored'\n-5318E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5318EB CRC                   00000000 (0)\n-5318EF Compressed Size       00000000 (0)\n-5318F3 Uncompressed Size     00000000 (0)\n-5318F7 Filename Length       0022 (34)\n-5318F9 Extra Length          0009 (9)\n-5318FB Comment Length        0000 (0)\n-5318FD Disk Start            0000 (0)\n-5318FF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531901 Ext File Attributes   00000000 (0)\n-531905 Local Header Offset   00037CAD (228525)\n-531909 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531909: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53192B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53192D   Length              0005 (5)\n-53192F   Flags               01 (1) 'Modification'\n-531930   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531934 CENTRAL HEADER #123   02014B50 (33639248)\n-531938 Created Zip Spec      14 (20) '2.0'\n-531939 Created OS            00 (0) 'MS-DOS'\n-53193A Extract Zip Spec      14 (20) '2.0'\n-53193B Extract OS            00 (0) 'MS-DOS'\n-53193C General Purpose Flag  0000 (0)\n-53193E Compression Method    0000 (0) 'Stored'\n-531940 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531944 CRC                   00000000 (0)\n-531948 Compressed Size       00000000 (0)\n-53194C Uncompressed Size     00000000 (0)\n-531950 Filename Length       002B (43)\n-531952 Extra Length          0009 (9)\n-531954 Comment Length        0000 (0)\n-531956 Disk Start            0000 (0)\n-531958 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53195A Ext File Attributes   00000000 (0)\n-53195E Local Header Offset   00037CF6 (228598)\n-531962 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531962: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53198D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53198F   Length              0005 (5)\n-531991   Flags               01 (1) 'Modification'\n-531992   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531996 CENTRAL HEADER #124   02014B50 (33639248)\n-53199A Created Zip Spec      14 (20) '2.0'\n-53199B Created OS            00 (0) 'MS-DOS'\n-53199C Extract Zip Spec      14 (20) '2.0'\n-53199D Extract OS            00 (0) 'MS-DOS'\n-53199E General Purpose Flag  0000 (0)\n-5319A0 Compression Method    0000 (0) 'Stored'\n-5319A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5319A6 CRC                   00000000 (0)\n-5319AA Compressed Size       00000000 (0)\n-5319AE Uncompressed Size     00000000 (0)\n-5319B2 Filename Length       006B (107)\n-5319B4 Extra Length          0009 (9)\n-5319B6 Comment Length        0000 (0)\n-5319B8 Disk Start            0000 (0)\n-5319BA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5319BC Ext File Attributes   00000000 (0)\n-5319C0 Local Header Offset   00037D48 (228680)\n-5319C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5319C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531A2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531A31   Length              0005 (5)\n-531A33   Flags               01 (1) 'Modification'\n-531A34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531A38 CENTRAL HEADER #125   02014B50 (33639248)\n-531A3C Created Zip Spec      14 (20) '2.0'\n-531A3D Created OS            00 (0) 'MS-DOS'\n-531A3E Extract Zip Spec      14 (20) '2.0'\n-531A3F Extract OS            00 (0) 'MS-DOS'\n-531A40 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531A42 Compression Method    0000 (0) 'Stored'\n-531A44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531A48 CRC                   E1F88A2C (3791161900)\n-531A4C Compressed Size       00000924 (2340)\n-531A50 Uncompressed Size     00000924 (2340)\n-531A54 Filename Length       0081 (129)\n-531A56 Extra Length          0009 (9)\n-531A58 Comment Length        0000 (0)\n-531A5A Disk Start            0000 (0)\n-531A5C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531A5E Ext File Attributes   00000000 (0)\n-531A62 Local Header Offset   00037DDA (228826)\n-531A66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531A66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531AE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531AE9   Length              0005 (5)\n-531AEB   Flags               01 (1) 'Modification'\n-531AEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531AF0 CENTRAL HEADER #126   02014B50 (33639248)\n-531AF4 Created Zip Spec      14 (20) '2.0'\n-531AF5 Created OS            00 (0) 'MS-DOS'\n-531AF6 Extract Zip Spec      14 (20) '2.0'\n-531AF7 Extract OS            00 (0) 'MS-DOS'\n-531AF8 General Purpose Flag  0000 (0)\n-531AFA Compression Method    0000 (0) 'Stored'\n-531AFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531B00 CRC                   00000000 (0)\n-531B04 Compressed Size       00000000 (0)\n-531B08 Uncompressed Size     00000000 (0)\n-531B0C Filename Length       005F (95)\n-531B0E Extra Length          0009 (9)\n-531B10 Comment Length        0000 (0)\n-531B12 Disk Start            0000 (0)\n-531B14 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531B16 Ext File Attributes   00000000 (0)\n-531B1A Local Header Offset   000387B6 (231350)\n-531B1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531B1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531B7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531B7F   Length              0005 (5)\n-531B81   Flags               01 (1) 'Modification'\n-531B82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531B86 CENTRAL HEADER #127   02014B50 (33639248)\n-531B8A Created Zip Spec      14 (20) '2.0'\n-531B8B Created OS            00 (0) 'MS-DOS'\n-531B8C Extract Zip Spec      14 (20) '2.0'\n-531B8D Extract OS            00 (0) 'MS-DOS'\n-531B8E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531B90 Compression Method    0000 (0) 'Stored'\n-531B92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531B96 CRC                   6A45582D (1782929453)\n-531B9A Compressed Size       000009E0 (2528)\n-531B9E Uncompressed Size     000009E0 (2528)\n-531BA2 Filename Length       0075 (117)\n-531BA4 Extra Length          0009 (9)\n-531BA6 Comment Length        0000 (0)\n-531BA8 Disk Start            0000 (0)\n-531BAA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531BAC Ext File Attributes   00000000 (0)\n-531BB0 Local Header Offset   0003883C (231484)\n-531BB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531BB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531C29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531C2B   Length              0005 (5)\n-531C2D   Flags               01 (1) 'Modification'\n-531C2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531C32 CENTRAL HEADER #128   02014B50 (33639248)\n-531C36 Created Zip Spec      14 (20) '2.0'\n-531C37 Created OS            00 (0) 'MS-DOS'\n-531C38 Extract Zip Spec      14 (20) '2.0'\n-531C39 Extract OS            00 (0) 'MS-DOS'\n-531C3A General Purpose Flag  0000 (0)\n-531C3C Compression Method    0000 (0) 'Stored'\n-531C3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531C42 CRC                   00000000 (0)\n-531C46 Compressed Size       00000000 (0)\n-531C4A Uncompressed Size     00000000 (0)\n-531C4E Filename Length       0061 (97)\n-531C50 Extra Length          0009 (9)\n-531C52 Comment Length        0000 (0)\n-531C54 Disk Start            0000 (0)\n-531C56 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531C58 Ext File Attributes   00000000 (0)\n-531C5C Local Header Offset   000392C8 (234184)\n-531C60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531C60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531CC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531CC3   Length              0005 (5)\n-531CC5   Flags               01 (1) 'Modification'\n-531CC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531CCA CENTRAL HEADER #129   02014B50 (33639248)\n-531CCE Created Zip Spec      14 (20) '2.0'\n-531CCF Created OS            00 (0) 'MS-DOS'\n-531CD0 Extract Zip Spec      14 (20) '2.0'\n-531CD1 Extract OS            00 (0) 'MS-DOS'\n-531CD2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531CD4 Compression Method    0000 (0) 'Stored'\n-531CD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531CDA CRC                   4731534C (1194414924)\n-531CDE Compressed Size       00000B90 (2960)\n-531CE2 Uncompressed Size     00000B90 (2960)\n-531CE6 Filename Length       0077 (119)\n-531CE8 Extra Length          0009 (9)\n-531CEA Comment Length        0000 (0)\n-531CEC Disk Start            0000 (0)\n-531CEE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531CF0 Ext File Attributes   00000000 (0)\n-531CF4 Local Header Offset   00039350 (234320)\n-531CF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531CF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531D6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531D71   Length              0005 (5)\n-531D73   Flags               01 (1) 'Modification'\n-531D74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531D78 CENTRAL HEADER #130   02014B50 (33639248)\n-531D7C Created Zip Spec      14 (20) '2.0'\n-531D7D Created OS            00 (0) 'MS-DOS'\n-531D7E Extract Zip Spec      14 (20) '2.0'\n-531D7F Extract OS            00 (0) 'MS-DOS'\n-531D80 General Purpose Flag  0000 (0)\n-531D82 Compression Method    0000 (0) 'Stored'\n-531D84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531D88 CRC                   00000000 (0)\n-531D8C Compressed Size       00000000 (0)\n-531D90 Uncompressed Size     00000000 (0)\n-531D94 Filename Length       0060 (96)\n-531D96 Extra Length          0009 (9)\n-531D98 Comment Length        0000 (0)\n-531D9A Disk Start            0000 (0)\n-531D9C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531D9E Ext File Attributes   00000000 (0)\n-531DA2 Local Header Offset   00039F8E (237454)\n-531DA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531DA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531E06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531E08   Length              0005 (5)\n-531E0A   Flags               01 (1) 'Modification'\n-531E0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531E0F CENTRAL HEADER #131   02014B50 (33639248)\n-531E13 Created Zip Spec      14 (20) '2.0'\n-531E14 Created OS            00 (0) 'MS-DOS'\n-531E15 Extract Zip Spec      14 (20) '2.0'\n-531E16 Extract OS            00 (0) 'MS-DOS'\n-531E17 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531E19 Compression Method    0000 (0) 'Stored'\n-531E1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531E1F CRC                   CEBA8B64 (3468331876)\n-531E23 Compressed Size       00000A7D (2685)\n-531E27 Uncompressed Size     00000A7D (2685)\n-531E2B Filename Length       0076 (118)\n-531E2D Extra Length          0009 (9)\n-531E2F Comment Length        0000 (0)\n-531E31 Disk Start            0000 (0)\n-531E33 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531E35 Ext File Attributes   00000000 (0)\n-531E39 Local Header Offset   0003A015 (237589)\n-531E3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531E3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531EB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531EB5   Length              0005 (5)\n-531EB7   Flags               01 (1) 'Modification'\n-531EB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531EBC CENTRAL HEADER #132   02014B50 (33639248)\n-531EC0 Created Zip Spec      14 (20) '2.0'\n-531EC1 Created OS            00 (0) 'MS-DOS'\n-531EC2 Extract Zip Spec      14 (20) '2.0'\n-531EC3 Extract OS            00 (0) 'MS-DOS'\n-531EC4 General Purpose Flag  0000 (0)\n-531EC6 Compression Method    0000 (0) 'Stored'\n-531EC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531ECC CRC                   00000000 (0)\n-531ED0 Compressed Size       00000000 (0)\n-531ED4 Uncompressed Size     00000000 (0)\n-531ED8 Filename Length       005F (95)\n-531EDA Extra Length          0009 (9)\n-531EDC Comment Length        0000 (0)\n-531EDE Disk Start            0000 (0)\n-531EE0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531EE2 Ext File Attributes   00000000 (0)\n-531EE6 Local Header Offset   0003AB3F (240447)\n-531EEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531EEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531F49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531F4B   Length              0005 (5)\n-531F4D   Flags               01 (1) 'Modification'\n-531F4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531F52 CENTRAL HEADER #133   02014B50 (33639248)\n-531F56 Created Zip Spec      14 (20) '2.0'\n-531F57 Created OS            00 (0) 'MS-DOS'\n-531F58 Extract Zip Spec      14 (20) '2.0'\n-531F59 Extract OS            00 (0) 'MS-DOS'\n-531F5A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-531F5C Compression Method    0000 (0) 'Stored'\n-531F5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531F62 CRC                   0DACEA84 (229436036)\n-531F66 Compressed Size       00000A95 (2709)\n-531F6A Uncompressed Size     00000A95 (2709)\n-531F6E Filename Length       0075 (117)\n-531F70 Extra Length          0009 (9)\n-531F72 Comment Length        0000 (0)\n-531F74 Disk Start            0000 (0)\n-531F76 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-531F78 Ext File Attributes   00000000 (0)\n-531F7C Local Header Offset   0003ABC5 (240581)\n-531F80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531F80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531FF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531FF7   Length              0005 (5)\n-531FF9   Flags               01 (1) 'Modification'\n-531FFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531FFE CENTRAL HEADER #134   02014B50 (33639248)\n-532002 Created Zip Spec      14 (20) '2.0'\n-532003 Created OS            00 (0) 'MS-DOS'\n-532004 Extract Zip Spec      14 (20) '2.0'\n-532005 Extract OS            00 (0) 'MS-DOS'\n-532006 General Purpose Flag  0000 (0)\n-532008 Compression Method    0000 (0) 'Stored'\n-53200A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53200E CRC                   00000000 (0)\n-532012 Compressed Size       00000000 (0)\n-532016 Uncompressed Size     00000000 (0)\n-53201A Filename Length       0060 (96)\n-53201C Extra Length          0009 (9)\n-53201E Comment Length        0000 (0)\n-532020 Disk Start            0000 (0)\n-532022 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532024 Ext File Attributes   00000000 (0)\n-532028 Local Header Offset   0003B706 (243462)\n-53202C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53202C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53208C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53208E   Length              0005 (5)\n-532090   Flags               01 (1) 'Modification'\n-532091   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532095 CENTRAL HEADER #135   02014B50 (33639248)\n-532099 Created Zip Spec      14 (20) '2.0'\n-53209A Created OS            00 (0) 'MS-DOS'\n-53209B Extract Zip Spec      14 (20) '2.0'\n-53209C Extract OS            00 (0) 'MS-DOS'\n-53209D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53209F Compression Method    0000 (0) 'Stored'\n-5320A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5320A5 CRC                   2E84B239 (780448313)\n-5320A9 Compressed Size       0000121D (4637)\n-5320AD Uncompressed Size     0000121D (4637)\n-5320B1 Filename Length       0076 (118)\n-5320B3 Extra Length          0009 (9)\n-5320B5 Comment Length        0000 (0)\n-5320B7 Disk Start            0000 (0)\n-5320B9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5320BB Ext File Attributes   00000000 (0)\n-5320BF Local Header Offset   0003B78D (243597)\n-5320C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5320C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532139 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53213B   Length              0005 (5)\n-53213D   Flags               01 (1) 'Modification'\n-53213E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532142 CENTRAL HEADER #136   02014B50 (33639248)\n-532146 Created Zip Spec      14 (20) '2.0'\n-532147 Created OS            00 (0) 'MS-DOS'\n-532148 Extract Zip Spec      14 (20) '2.0'\n-532149 Extract OS            00 (0) 'MS-DOS'\n-53214A General Purpose Flag  0000 (0)\n-53214C Compression Method    0000 (0) 'Stored'\n-53214E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532152 CRC                   00000000 (0)\n-532156 Compressed Size       00000000 (0)\n-53215A Uncompressed Size     00000000 (0)\n-53215E Filename Length       007A (122)\n-532160 Extra Length          0009 (9)\n-532162 Comment Length        0000 (0)\n-532164 Disk Start            0000 (0)\n-532166 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532168 Ext File Attributes   00000000 (0)\n-53216C Local Header Offset   0003CA57 (248407)\n-532170 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532170: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5321EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5321EC   Length              0005 (5)\n-5321EE   Flags               01 (1) 'Modification'\n-5321EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5321F3 CENTRAL HEADER #137   02014B50 (33639248)\n-5321F7 Created Zip Spec      14 (20) '2.0'\n-5321F8 Created OS            00 (0) 'MS-DOS'\n-5321F9 Extract Zip Spec      14 (20) '2.0'\n-5321FA Extract OS            00 (0) 'MS-DOS'\n-5321FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5321FD Compression Method    0000 (0) 'Stored'\n-5321FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532203 CRC                   10E7267F (283584127)\n-532207 Compressed Size       000006FB (1787)\n-53220B Uncompressed Size     000006FB (1787)\n-53220F Filename Length       0090 (144)\n-532211 Extra Length          0009 (9)\n-532213 Comment Length        0000 (0)\n-532215 Disk Start            0000 (0)\n-532217 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532219 Ext File Attributes   00000000 (0)\n-53221D Local Header Offset   0003CAF8 (248568)\n-532221 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+531335 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531337   Length              0005 (5)\n+531339   Flags               01 (1) 'Modification'\n+53133A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53133E CENTRAL HEADER #112   02014B50 (33639248)\n+531342 Created Zip Spec      14 (20) '2.0'\n+531343 Created OS            00 (0) 'MS-DOS'\n+531344 Extract Zip Spec      14 (20) '2.0'\n+531345 Extract OS            00 (0) 'MS-DOS'\n+531346 General Purpose Flag  0000 (0)\n+531348 Compression Method    0000 (0) 'Stored'\n+53134A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53134E CRC                   00000000 (0)\n+531352 Compressed Size       00000000 (0)\n+531356 Uncompressed Size     00000000 (0)\n+53135A Filename Length       0024 (36)\n+53135C Extra Length          0009 (9)\n+53135E Comment Length        0000 (0)\n+531360 Disk Start            0000 (0)\n+531362 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531364 Ext File Attributes   00000000 (0)\n+531368 Local Header Offset   000352F6 (217846)\n+53136C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53136C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531390 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531392   Length              0005 (5)\n+531394   Flags               01 (1) 'Modification'\n+531395   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531399 CENTRAL HEADER #113   02014B50 (33639248)\n+53139D Created Zip Spec      14 (20) '2.0'\n+53139E Created OS            00 (0) 'MS-DOS'\n+53139F Extract Zip Spec      14 (20) '2.0'\n+5313A0 Extract OS            00 (0) 'MS-DOS'\n+5313A1 General Purpose Flag  0000 (0)\n+5313A3 Compression Method    0000 (0) 'Stored'\n+5313A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5313A9 CRC                   00000000 (0)\n+5313AD Compressed Size       00000000 (0)\n+5313B1 Uncompressed Size     00000000 (0)\n+5313B5 Filename Length       002D (45)\n+5313B7 Extra Length          0009 (9)\n+5313B9 Comment Length        0000 (0)\n+5313BB Disk Start            0000 (0)\n+5313BD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5313BF Ext File Attributes   00000000 (0)\n+5313C3 Local Header Offset   00035341 (217921)\n+5313C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5313C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5313F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5313F6   Length              0005 (5)\n+5313F8   Flags               01 (1) 'Modification'\n+5313F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5313FD CENTRAL HEADER #114   02014B50 (33639248)\n+531401 Created Zip Spec      14 (20) '2.0'\n+531402 Created OS            00 (0) 'MS-DOS'\n+531403 Extract Zip Spec      14 (20) '2.0'\n+531404 Extract OS            00 (0) 'MS-DOS'\n+531405 General Purpose Flag  0000 (0)\n+531407 Compression Method    0000 (0) 'Stored'\n+531409 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53140D CRC                   00000000 (0)\n+531411 Compressed Size       00000000 (0)\n+531415 Uncompressed Size     00000000 (0)\n+531419 Filename Length       005A (90)\n+53141B Extra Length          0009 (9)\n+53141D Comment Length        0000 (0)\n+53141F Disk Start            0000 (0)\n+531421 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531423 Ext File Attributes   00000000 (0)\n+531427 Local Header Offset   00035395 (218005)\n+53142B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53142B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531485 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531487   Length              0005 (5)\n+531489   Flags               01 (1) 'Modification'\n+53148A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53148E CENTRAL HEADER #115   02014B50 (33639248)\n+531492 Created Zip Spec      14 (20) '2.0'\n+531493 Created OS            00 (0) 'MS-DOS'\n+531494 Extract Zip Spec      14 (20) '2.0'\n+531495 Extract OS            00 (0) 'MS-DOS'\n+531496 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+531498 Compression Method    0000 (0) 'Stored'\n+53149A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53149E CRC                   10CC5E74 (281828980)\n+5314A2 Compressed Size       000009CD (2509)\n+5314A6 Uncompressed Size     000009CD (2509)\n+5314AA Filename Length       0070 (112)\n+5314AC Extra Length          0009 (9)\n+5314AE Comment Length        0000 (0)\n+5314B0 Disk Start            0000 (0)\n+5314B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5314B4 Ext File Attributes   00000000 (0)\n+5314B8 Local Header Offset   00035416 (218134)\n+5314BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5314BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53152C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53152E   Length              0005 (5)\n+531530   Flags               01 (1) 'Modification'\n+531531   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531535 CENTRAL HEADER #116   02014B50 (33639248)\n+531539 Created Zip Spec      14 (20) '2.0'\n+53153A Created OS            00 (0) 'MS-DOS'\n+53153B Extract Zip Spec      14 (20) '2.0'\n+53153C Extract OS            00 (0) 'MS-DOS'\n+53153D General Purpose Flag  0000 (0)\n+53153F Compression Method    0000 (0) 'Stored'\n+531541 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531545 CRC                   00000000 (0)\n+531549 Compressed Size       00000000 (0)\n+53154D Uncompressed Size     00000000 (0)\n+531551 Filename Length       005A (90)\n+531553 Extra Length          0009 (9)\n+531555 Comment Length        0000 (0)\n+531557 Disk Start            0000 (0)\n+531559 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53155B Ext File Attributes   00000000 (0)\n+53155F Local Header Offset   00035E8A (220810)\n+531563 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531563: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5315BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5315BF   Length              0005 (5)\n+5315C1   Flags               01 (1) 'Modification'\n+5315C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5315C6 CENTRAL HEADER #117   02014B50 (33639248)\n+5315CA Created Zip Spec      14 (20) '2.0'\n+5315CB Created OS            00 (0) 'MS-DOS'\n+5315CC Extract Zip Spec      14 (20) '2.0'\n+5315CD Extract OS            00 (0) 'MS-DOS'\n+5315CE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5315D0 Compression Method    0000 (0) 'Stored'\n+5315D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5315D6 CRC                   5F6BF872 (1600911474)\n+5315DA Compressed Size       000009A0 (2464)\n+5315DE Uncompressed Size     000009A0 (2464)\n+5315E2 Filename Length       0070 (112)\n+5315E4 Extra Length          0009 (9)\n+5315E6 Comment Length        0000 (0)\n+5315E8 Disk Start            0000 (0)\n+5315EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5315EC Ext File Attributes   00000000 (0)\n+5315F0 Local Header Offset   00035F0B (220939)\n+5315F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5315F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531664 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531666   Length              0005 (5)\n+531668   Flags               01 (1) 'Modification'\n+531669   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53166D CENTRAL HEADER #118   02014B50 (33639248)\n+531671 Created Zip Spec      14 (20) '2.0'\n+531672 Created OS            00 (0) 'MS-DOS'\n+531673 Extract Zip Spec      14 (20) '2.0'\n+531674 Extract OS            00 (0) 'MS-DOS'\n+531675 General Purpose Flag  0000 (0)\n+531677 Compression Method    0000 (0) 'Stored'\n+531679 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53167D CRC                   00000000 (0)\n+531681 Compressed Size       00000000 (0)\n+531685 Uncompressed Size     00000000 (0)\n+531689 Filename Length       0023 (35)\n+53168B Extra Length          0009 (9)\n+53168D Comment Length        0000 (0)\n+53168F Disk Start            0000 (0)\n+531691 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531693 Ext File Attributes   00000000 (0)\n+531697 Local Header Offset   00036952 (223570)\n+53169B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53169B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5316BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5316C0   Length              0005 (5)\n+5316C2   Flags               01 (1) 'Modification'\n+5316C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5316C7 CENTRAL HEADER #119   02014B50 (33639248)\n+5316CB Created Zip Spec      14 (20) '2.0'\n+5316CC Created OS            00 (0) 'MS-DOS'\n+5316CD Extract Zip Spec      14 (20) '2.0'\n+5316CE Extract OS            00 (0) 'MS-DOS'\n+5316CF General Purpose Flag  0000 (0)\n+5316D1 Compression Method    0000 (0) 'Stored'\n+5316D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5316D7 CRC                   00000000 (0)\n+5316DB Compressed Size       00000000 (0)\n+5316DF Uncompressed Size     00000000 (0)\n+5316E3 Filename Length       002C (44)\n+5316E5 Extra Length          0009 (9)\n+5316E7 Comment Length        0000 (0)\n+5316E9 Disk Start            0000 (0)\n+5316EB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5316ED Ext File Attributes   00000000 (0)\n+5316F1 Local Header Offset   0003699C (223644)\n+5316F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5316F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531721 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531723   Length              0005 (5)\n+531725   Flags               01 (1) 'Modification'\n+531726   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53172A CENTRAL HEADER #120   02014B50 (33639248)\n+53172E Created Zip Spec      14 (20) '2.0'\n+53172F Created OS            00 (0) 'MS-DOS'\n+531730 Extract Zip Spec      14 (20) '2.0'\n+531731 Extract OS            00 (0) 'MS-DOS'\n+531732 General Purpose Flag  0000 (0)\n+531734 Compression Method    0000 (0) 'Stored'\n+531736 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53173A CRC                   00000000 (0)\n+53173E Compressed Size       00000000 (0)\n+531742 Uncompressed Size     00000000 (0)\n+531746 Filename Length       0056 (86)\n+531748 Extra Length          0009 (9)\n+53174A Comment Length        0000 (0)\n+53174C Disk Start            0000 (0)\n+53174E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531750 Ext File Attributes   00000000 (0)\n+531754 Local Header Offset   000369EF (223727)\n+531758 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531758: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5317AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5317B0   Length              0005 (5)\n+5317B2   Flags               01 (1) 'Modification'\n+5317B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5317B7 CENTRAL HEADER #121   02014B50 (33639248)\n+5317BB Created Zip Spec      14 (20) '2.0'\n+5317BC Created OS            00 (0) 'MS-DOS'\n+5317BD Extract Zip Spec      14 (20) '2.0'\n+5317BE Extract OS            00 (0) 'MS-DOS'\n+5317BF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5317C1 Compression Method    0000 (0) 'Stored'\n+5317C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5317C7 CRC                   456B0BC9 (1164643273)\n+5317CB Compressed Size       00001135 (4405)\n+5317CF Uncompressed Size     00001135 (4405)\n+5317D3 Filename Length       006C (108)\n+5317D5 Extra Length          0009 (9)\n+5317D7 Comment Length        0000 (0)\n+5317D9 Disk Start            0000 (0)\n+5317DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5317DD Ext File Attributes   00000000 (0)\n+5317E1 Local Header Offset   00036A6C (223852)\n+5317E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5317E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531851 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531853   Length              0005 (5)\n+531855   Flags               01 (1) 'Modification'\n+531856   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53185A CENTRAL HEADER #122   02014B50 (33639248)\n+53185E Created Zip Spec      14 (20) '2.0'\n+53185F Created OS            00 (0) 'MS-DOS'\n+531860 Extract Zip Spec      14 (20) '2.0'\n+531861 Extract OS            00 (0) 'MS-DOS'\n+531862 General Purpose Flag  0000 (0)\n+531864 Compression Method    0000 (0) 'Stored'\n+531866 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53186A CRC                   00000000 (0)\n+53186E Compressed Size       00000000 (0)\n+531872 Uncompressed Size     00000000 (0)\n+531876 Filename Length       0022 (34)\n+531878 Extra Length          0009 (9)\n+53187A Comment Length        0000 (0)\n+53187C Disk Start            0000 (0)\n+53187E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531880 Ext File Attributes   00000000 (0)\n+531884 Local Header Offset   00037C44 (228420)\n+531888 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531888: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5318AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5318AC   Length              0005 (5)\n+5318AE   Flags               01 (1) 'Modification'\n+5318AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5318B3 CENTRAL HEADER #123   02014B50 (33639248)\n+5318B7 Created Zip Spec      14 (20) '2.0'\n+5318B8 Created OS            00 (0) 'MS-DOS'\n+5318B9 Extract Zip Spec      14 (20) '2.0'\n+5318BA Extract OS            00 (0) 'MS-DOS'\n+5318BB General Purpose Flag  0000 (0)\n+5318BD Compression Method    0000 (0) 'Stored'\n+5318BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5318C3 CRC                   00000000 (0)\n+5318C7 Compressed Size       00000000 (0)\n+5318CB Uncompressed Size     00000000 (0)\n+5318CF Filename Length       002B (43)\n+5318D1 Extra Length          0009 (9)\n+5318D3 Comment Length        0000 (0)\n+5318D5 Disk Start            0000 (0)\n+5318D7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5318D9 Ext File Attributes   00000000 (0)\n+5318DD Local Header Offset   00037C8D (228493)\n+5318E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5318E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53190C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53190E   Length              0005 (5)\n+531910   Flags               01 (1) 'Modification'\n+531911   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531915 CENTRAL HEADER #124   02014B50 (33639248)\n+531919 Created Zip Spec      14 (20) '2.0'\n+53191A Created OS            00 (0) 'MS-DOS'\n+53191B Extract Zip Spec      14 (20) '2.0'\n+53191C Extract OS            00 (0) 'MS-DOS'\n+53191D General Purpose Flag  0000 (0)\n+53191F Compression Method    0000 (0) 'Stored'\n+531921 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531925 CRC                   00000000 (0)\n+531929 Compressed Size       00000000 (0)\n+53192D Uncompressed Size     00000000 (0)\n+531931 Filename Length       006B (107)\n+531933 Extra Length          0009 (9)\n+531935 Comment Length        0000 (0)\n+531937 Disk Start            0000 (0)\n+531939 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53193B Ext File Attributes   00000000 (0)\n+53193F Local Header Offset   00037CDF (228575)\n+531943 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531943: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5319AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5319B0   Length              0005 (5)\n+5319B2   Flags               01 (1) 'Modification'\n+5319B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5319B7 CENTRAL HEADER #125   02014B50 (33639248)\n+5319BB Created Zip Spec      14 (20) '2.0'\n+5319BC Created OS            00 (0) 'MS-DOS'\n+5319BD Extract Zip Spec      14 (20) '2.0'\n+5319BE Extract OS            00 (0) 'MS-DOS'\n+5319BF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5319C1 Compression Method    0000 (0) 'Stored'\n+5319C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5319C7 CRC                   E1F88A2C (3791161900)\n+5319CB Compressed Size       00000924 (2340)\n+5319CF Uncompressed Size     00000924 (2340)\n+5319D3 Filename Length       0081 (129)\n+5319D5 Extra Length          0009 (9)\n+5319D7 Comment Length        0000 (0)\n+5319D9 Disk Start            0000 (0)\n+5319DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5319DD Ext File Attributes   00000000 (0)\n+5319E1 Local Header Offset   00037D71 (228721)\n+5319E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5319E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531A66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531A68   Length              0005 (5)\n+531A6A   Flags               01 (1) 'Modification'\n+531A6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531A6F CENTRAL HEADER #126   02014B50 (33639248)\n+531A73 Created Zip Spec      14 (20) '2.0'\n+531A74 Created OS            00 (0) 'MS-DOS'\n+531A75 Extract Zip Spec      14 (20) '2.0'\n+531A76 Extract OS            00 (0) 'MS-DOS'\n+531A77 General Purpose Flag  0000 (0)\n+531A79 Compression Method    0000 (0) 'Stored'\n+531A7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531A7F CRC                   00000000 (0)\n+531A83 Compressed Size       00000000 (0)\n+531A87 Uncompressed Size     00000000 (0)\n+531A8B Filename Length       005F (95)\n+531A8D Extra Length          0009 (9)\n+531A8F Comment Length        0000 (0)\n+531A91 Disk Start            0000 (0)\n+531A93 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531A95 Ext File Attributes   00000000 (0)\n+531A99 Local Header Offset   0003874D (231245)\n+531A9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531A9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531AFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531AFE   Length              0005 (5)\n+531B00   Flags               01 (1) 'Modification'\n+531B01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531B05 CENTRAL HEADER #127   02014B50 (33639248)\n+531B09 Created Zip Spec      14 (20) '2.0'\n+531B0A Created OS            00 (0) 'MS-DOS'\n+531B0B Extract Zip Spec      14 (20) '2.0'\n+531B0C Extract OS            00 (0) 'MS-DOS'\n+531B0D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+531B0F Compression Method    0000 (0) 'Stored'\n+531B11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531B15 CRC                   6A45582D (1782929453)\n+531B19 Compressed Size       000009E0 (2528)\n+531B1D Uncompressed Size     000009E0 (2528)\n+531B21 Filename Length       0075 (117)\n+531B23 Extra Length          0009 (9)\n+531B25 Comment Length        0000 (0)\n+531B27 Disk Start            0000 (0)\n+531B29 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531B2B Ext File Attributes   00000000 (0)\n+531B2F Local Header Offset   000387D3 (231379)\n+531B33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531B33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531BA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531BAA   Length              0005 (5)\n+531BAC   Flags               01 (1) 'Modification'\n+531BAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531BB1 CENTRAL HEADER #128   02014B50 (33639248)\n+531BB5 Created Zip Spec      14 (20) '2.0'\n+531BB6 Created OS            00 (0) 'MS-DOS'\n+531BB7 Extract Zip Spec      14 (20) '2.0'\n+531BB8 Extract OS            00 (0) 'MS-DOS'\n+531BB9 General Purpose Flag  0000 (0)\n+531BBB Compression Method    0000 (0) 'Stored'\n+531BBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531BC1 CRC                   00000000 (0)\n+531BC5 Compressed Size       00000000 (0)\n+531BC9 Uncompressed Size     00000000 (0)\n+531BCD Filename Length       0061 (97)\n+531BCF Extra Length          0009 (9)\n+531BD1 Comment Length        0000 (0)\n+531BD3 Disk Start            0000 (0)\n+531BD5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531BD7 Ext File Attributes   00000000 (0)\n+531BDB Local Header Offset   0003925F (234079)\n+531BDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531BDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531C40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531C42   Length              0005 (5)\n+531C44   Flags               01 (1) 'Modification'\n+531C45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531C49 CENTRAL HEADER #129   02014B50 (33639248)\n+531C4D Created Zip Spec      14 (20) '2.0'\n+531C4E Created OS            00 (0) 'MS-DOS'\n+531C4F Extract Zip Spec      14 (20) '2.0'\n+531C50 Extract OS            00 (0) 'MS-DOS'\n+531C51 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+531C53 Compression Method    0000 (0) 'Stored'\n+531C55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531C59 CRC                   4731534C (1194414924)\n+531C5D Compressed Size       00000B90 (2960)\n+531C61 Uncompressed Size     00000B90 (2960)\n+531C65 Filename Length       0077 (119)\n+531C67 Extra Length          0009 (9)\n+531C69 Comment Length        0000 (0)\n+531C6B Disk Start            0000 (0)\n+531C6D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531C6F Ext File Attributes   00000000 (0)\n+531C73 Local Header Offset   000392E7 (234215)\n+531C77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531C77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531CEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531CF0   Length              0005 (5)\n+531CF2   Flags               01 (1) 'Modification'\n+531CF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531CF7 CENTRAL HEADER #130   02014B50 (33639248)\n+531CFB Created Zip Spec      14 (20) '2.0'\n+531CFC Created OS            00 (0) 'MS-DOS'\n+531CFD Extract Zip Spec      14 (20) '2.0'\n+531CFE Extract OS            00 (0) 'MS-DOS'\n+531CFF General Purpose Flag  0000 (0)\n+531D01 Compression Method    0000 (0) 'Stored'\n+531D03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531D07 CRC                   00000000 (0)\n+531D0B Compressed Size       00000000 (0)\n+531D0F Uncompressed Size     00000000 (0)\n+531D13 Filename Length       0060 (96)\n+531D15 Extra Length          0009 (9)\n+531D17 Comment Length        0000 (0)\n+531D19 Disk Start            0000 (0)\n+531D1B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531D1D Ext File Attributes   00000000 (0)\n+531D21 Local Header Offset   00039F25 (237349)\n+531D25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531D25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531D85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531D87   Length              0005 (5)\n+531D89   Flags               01 (1) 'Modification'\n+531D8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531D8E CENTRAL HEADER #131   02014B50 (33639248)\n+531D92 Created Zip Spec      14 (20) '2.0'\n+531D93 Created OS            00 (0) 'MS-DOS'\n+531D94 Extract Zip Spec      14 (20) '2.0'\n+531D95 Extract OS            00 (0) 'MS-DOS'\n+531D96 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+531D98 Compression Method    0000 (0) 'Stored'\n+531D9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531D9E CRC                   CEBA8B64 (3468331876)\n+531DA2 Compressed Size       00000A7D (2685)\n+531DA6 Uncompressed Size     00000A7D (2685)\n+531DAA Filename Length       0076 (118)\n+531DAC Extra Length          0009 (9)\n+531DAE Comment Length        0000 (0)\n+531DB0 Disk Start            0000 (0)\n+531DB2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531DB4 Ext File Attributes   00000000 (0)\n+531DB8 Local Header Offset   00039FAC (237484)\n+531DBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531DBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531E32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531E34   Length              0005 (5)\n+531E36   Flags               01 (1) 'Modification'\n+531E37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531E3B CENTRAL HEADER #132   02014B50 (33639248)\n+531E3F Created Zip Spec      14 (20) '2.0'\n+531E40 Created OS            00 (0) 'MS-DOS'\n+531E41 Extract Zip Spec      14 (20) '2.0'\n+531E42 Extract OS            00 (0) 'MS-DOS'\n+531E43 General Purpose Flag  0000 (0)\n+531E45 Compression Method    0000 (0) 'Stored'\n+531E47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531E4B CRC                   00000000 (0)\n+531E4F Compressed Size       00000000 (0)\n+531E53 Uncompressed Size     00000000 (0)\n+531E57 Filename Length       005F (95)\n+531E59 Extra Length          0009 (9)\n+531E5B Comment Length        0000 (0)\n+531E5D Disk Start            0000 (0)\n+531E5F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531E61 Ext File Attributes   00000000 (0)\n+531E65 Local Header Offset   0003AAD6 (240342)\n+531E69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531E69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531EC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531ECA   Length              0005 (5)\n+531ECC   Flags               01 (1) 'Modification'\n+531ECD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531ED1 CENTRAL HEADER #133   02014B50 (33639248)\n+531ED5 Created Zip Spec      14 (20) '2.0'\n+531ED6 Created OS            00 (0) 'MS-DOS'\n+531ED7 Extract Zip Spec      14 (20) '2.0'\n+531ED8 Extract OS            00 (0) 'MS-DOS'\n+531ED9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+531EDB Compression Method    0000 (0) 'Stored'\n+531EDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531EE1 CRC                   0DACEA84 (229436036)\n+531EE5 Compressed Size       00000A95 (2709)\n+531EE9 Uncompressed Size     00000A95 (2709)\n+531EED Filename Length       0075 (117)\n+531EEF Extra Length          0009 (9)\n+531EF1 Comment Length        0000 (0)\n+531EF3 Disk Start            0000 (0)\n+531EF5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531EF7 Ext File Attributes   00000000 (0)\n+531EFB Local Header Offset   0003AB5C (240476)\n+531EFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531EFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+531F74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+531F76   Length              0005 (5)\n+531F78   Flags               01 (1) 'Modification'\n+531F79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+531F7D CENTRAL HEADER #134   02014B50 (33639248)\n+531F81 Created Zip Spec      14 (20) '2.0'\n+531F82 Created OS            00 (0) 'MS-DOS'\n+531F83 Extract Zip Spec      14 (20) '2.0'\n+531F84 Extract OS            00 (0) 'MS-DOS'\n+531F85 General Purpose Flag  0000 (0)\n+531F87 Compression Method    0000 (0) 'Stored'\n+531F89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+531F8D CRC                   00000000 (0)\n+531F91 Compressed Size       00000000 (0)\n+531F95 Uncompressed Size     00000000 (0)\n+531F99 Filename Length       0060 (96)\n+531F9B Extra Length          0009 (9)\n+531F9D Comment Length        0000 (0)\n+531F9F Disk Start            0000 (0)\n+531FA1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+531FA3 Ext File Attributes   00000000 (0)\n+531FA7 Local Header Offset   0003B69D (243357)\n+531FAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x531FAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53200B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53200D   Length              0005 (5)\n+53200F   Flags               01 (1) 'Modification'\n+532010   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532014 CENTRAL HEADER #135   02014B50 (33639248)\n+532018 Created Zip Spec      14 (20) '2.0'\n+532019 Created OS            00 (0) 'MS-DOS'\n+53201A Extract Zip Spec      14 (20) '2.0'\n+53201B Extract OS            00 (0) 'MS-DOS'\n+53201C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53201E Compression Method    0000 (0) 'Stored'\n+532020 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532024 CRC                   2E84B239 (780448313)\n+532028 Compressed Size       0000121D (4637)\n+53202C Uncompressed Size     0000121D (4637)\n+532030 Filename Length       0076 (118)\n+532032 Extra Length          0009 (9)\n+532034 Comment Length        0000 (0)\n+532036 Disk Start            0000 (0)\n+532038 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53203A Ext File Attributes   00000000 (0)\n+53203E Local Header Offset   0003B724 (243492)\n+532042 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532042: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5320B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5320BA   Length              0005 (5)\n+5320BC   Flags               01 (1) 'Modification'\n+5320BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5320C1 CENTRAL HEADER #136   02014B50 (33639248)\n+5320C5 Created Zip Spec      14 (20) '2.0'\n+5320C6 Created OS            00 (0) 'MS-DOS'\n+5320C7 Extract Zip Spec      14 (20) '2.0'\n+5320C8 Extract OS            00 (0) 'MS-DOS'\n+5320C9 General Purpose Flag  0000 (0)\n+5320CB Compression Method    0000 (0) 'Stored'\n+5320CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5320D1 CRC                   00000000 (0)\n+5320D5 Compressed Size       00000000 (0)\n+5320D9 Uncompressed Size     00000000 (0)\n+5320DD Filename Length       007A (122)\n+5320DF Extra Length          0009 (9)\n+5320E1 Comment Length        0000 (0)\n+5320E3 Disk Start            0000 (0)\n+5320E5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5320E7 Ext File Attributes   00000000 (0)\n+5320EB Local Header Offset   0003C9EE (248302)\n+5320EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5320EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532169 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53216B   Length              0005 (5)\n+53216D   Flags               01 (1) 'Modification'\n+53216E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532172 CENTRAL HEADER #137   02014B50 (33639248)\n+532176 Created Zip Spec      14 (20) '2.0'\n+532177 Created OS            00 (0) 'MS-DOS'\n+532178 Extract Zip Spec      14 (20) '2.0'\n+532179 Extract OS            00 (0) 'MS-DOS'\n+53217A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53217C Compression Method    0000 (0) 'Stored'\n+53217E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532182 CRC                   10E7267F (283584127)\n+532186 Compressed Size       000006FB (1787)\n+53218A Uncompressed Size     000006FB (1787)\n+53218E Filename Length       0090 (144)\n+532190 Extra Length          0009 (9)\n+532192 Comment Length        0000 (0)\n+532194 Disk Start            0000 (0)\n+532196 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532198 Ext File Attributes   00000000 (0)\n+53219C Local Header Offset   0003CA8F (248463)\n+5321A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x532221: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5321A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5322B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5322B3   Length              0005 (5)\n-5322B5   Flags               01 (1) 'Modification'\n-5322B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5322BA CENTRAL HEADER #138   02014B50 (33639248)\n-5322BE Created Zip Spec      14 (20) '2.0'\n-5322BF Created OS            00 (0) 'MS-DOS'\n-5322C0 Extract Zip Spec      14 (20) '2.0'\n-5322C1 Extract OS            00 (0) 'MS-DOS'\n-5322C2 General Purpose Flag  0000 (0)\n-5322C4 Compression Method    0000 (0) 'Stored'\n-5322C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5322CA CRC                   00000000 (0)\n-5322CE Compressed Size       00000000 (0)\n-5322D2 Uncompressed Size     00000000 (0)\n-5322D6 Filename Length       007B (123)\n-5322D8 Extra Length          0009 (9)\n-5322DA Comment Length        0000 (0)\n-5322DC Disk Start            0000 (0)\n-5322DE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5322E0 Ext File Attributes   00000000 (0)\n-5322E4 Local Header Offset   0003D2BA (250554)\n-5322E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5322E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532363 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532365   Length              0005 (5)\n-532367   Flags               01 (1) 'Modification'\n-532368   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53236C CENTRAL HEADER #139   02014B50 (33639248)\n-532370 Created Zip Spec      14 (20) '2.0'\n-532371 Created OS            00 (0) 'MS-DOS'\n-532372 Extract Zip Spec      14 (20) '2.0'\n-532373 Extract OS            00 (0) 'MS-DOS'\n-532374 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-532376 Compression Method    0000 (0) 'Stored'\n-532378 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53237C CRC                   24E47A3B (618953275)\n-532380 Compressed Size       000006FF (1791)\n-532384 Uncompressed Size     000006FF (1791)\n-532388 Filename Length       0091 (145)\n-53238A Extra Length          0009 (9)\n-53238C Comment Length        0000 (0)\n-53238E Disk Start            0000 (0)\n-532390 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532392 Ext File Attributes   00000000 (0)\n-532396 Local Header Offset   0003D35C (250716)\n-53239A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+532230 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532232   Length              0005 (5)\n+532234   Flags               01 (1) 'Modification'\n+532235   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532239 CENTRAL HEADER #138   02014B50 (33639248)\n+53223D Created Zip Spec      14 (20) '2.0'\n+53223E Created OS            00 (0) 'MS-DOS'\n+53223F Extract Zip Spec      14 (20) '2.0'\n+532240 Extract OS            00 (0) 'MS-DOS'\n+532241 General Purpose Flag  0000 (0)\n+532243 Compression Method    0000 (0) 'Stored'\n+532245 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532249 CRC                   00000000 (0)\n+53224D Compressed Size       00000000 (0)\n+532251 Uncompressed Size     00000000 (0)\n+532255 Filename Length       007B (123)\n+532257 Extra Length          0009 (9)\n+532259 Comment Length        0000 (0)\n+53225B Disk Start            0000 (0)\n+53225D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53225F Ext File Attributes   00000000 (0)\n+532263 Local Header Offset   0003D251 (250449)\n+532267 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532267: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5322E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5322E4   Length              0005 (5)\n+5322E6   Flags               01 (1) 'Modification'\n+5322E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5322EB CENTRAL HEADER #139   02014B50 (33639248)\n+5322EF Created Zip Spec      14 (20) '2.0'\n+5322F0 Created OS            00 (0) 'MS-DOS'\n+5322F1 Extract Zip Spec      14 (20) '2.0'\n+5322F2 Extract OS            00 (0) 'MS-DOS'\n+5322F3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5322F5 Compression Method    0000 (0) 'Stored'\n+5322F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5322FB CRC                   24E47A3B (618953275)\n+5322FF Compressed Size       000006FF (1791)\n+532303 Uncompressed Size     000006FF (1791)\n+532307 Filename Length       0091 (145)\n+532309 Extra Length          0009 (9)\n+53230B Comment Length        0000 (0)\n+53230D Disk Start            0000 (0)\n+53230F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532311 Ext File Attributes   00000000 (0)\n+532315 Local Header Offset   0003D2F3 (250611)\n+532319 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x53239A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x532319: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53242B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53242D   Length              0005 (5)\n-53242F   Flags               01 (1) 'Modification'\n-532430   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532434 CENTRAL HEADER #140   02014B50 (33639248)\n-532438 Created Zip Spec      14 (20) '2.0'\n-532439 Created OS            00 (0) 'MS-DOS'\n-53243A Extract Zip Spec      14 (20) '2.0'\n-53243B Extract OS            00 (0) 'MS-DOS'\n-53243C General Purpose Flag  0000 (0)\n-53243E Compression Method    0000 (0) 'Stored'\n-532440 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532444 CRC                   00000000 (0)\n-532448 Compressed Size       00000000 (0)\n-53244C Uncompressed Size     00000000 (0)\n-532450 Filename Length       0076 (118)\n-532452 Extra Length          0009 (9)\n-532454 Comment Length        0000 (0)\n-532456 Disk Start            0000 (0)\n-532458 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53245A Ext File Attributes   00000000 (0)\n-53245E Local Header Offset   0003DB23 (252707)\n-532462 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532462: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5324D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5324DA   Length              0005 (5)\n-5324DC   Flags               01 (1) 'Modification'\n-5324DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5324E1 CENTRAL HEADER #141   02014B50 (33639248)\n-5324E5 Created Zip Spec      14 (20) '2.0'\n-5324E6 Created OS            00 (0) 'MS-DOS'\n-5324E7 Extract Zip Spec      14 (20) '2.0'\n-5324E8 Extract OS            00 (0) 'MS-DOS'\n-5324E9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5324EB Compression Method    0000 (0) 'Stored'\n-5324ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5324F1 CRC                   042BB565 (69973349)\n-5324F5 Compressed Size       00001364 (4964)\n-5324F9 Uncompressed Size     00001364 (4964)\n-5324FD Filename Length       008C (140)\n-5324FF Extra Length          0009 (9)\n-532501 Comment Length        0000 (0)\n-532503 Disk Start            0000 (0)\n-532505 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532507 Ext File Attributes   00000000 (0)\n-53250B Local Header Offset   0003DBC0 (252864)\n-53250F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5323AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5323AC   Length              0005 (5)\n+5323AE   Flags               01 (1) 'Modification'\n+5323AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5323B3 CENTRAL HEADER #140   02014B50 (33639248)\n+5323B7 Created Zip Spec      14 (20) '2.0'\n+5323B8 Created OS            00 (0) 'MS-DOS'\n+5323B9 Extract Zip Spec      14 (20) '2.0'\n+5323BA Extract OS            00 (0) 'MS-DOS'\n+5323BB General Purpose Flag  0000 (0)\n+5323BD Compression Method    0000 (0) 'Stored'\n+5323BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5323C3 CRC                   00000000 (0)\n+5323C7 Compressed Size       00000000 (0)\n+5323CB Uncompressed Size     00000000 (0)\n+5323CF Filename Length       0076 (118)\n+5323D1 Extra Length          0009 (9)\n+5323D3 Comment Length        0000 (0)\n+5323D5 Disk Start            0000 (0)\n+5323D7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5323D9 Ext File Attributes   00000000 (0)\n+5323DD Local Header Offset   0003DABA (252602)\n+5323E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5323E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532457 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532459   Length              0005 (5)\n+53245B   Flags               01 (1) 'Modification'\n+53245C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532460 CENTRAL HEADER #141   02014B50 (33639248)\n+532464 Created Zip Spec      14 (20) '2.0'\n+532465 Created OS            00 (0) 'MS-DOS'\n+532466 Extract Zip Spec      14 (20) '2.0'\n+532467 Extract OS            00 (0) 'MS-DOS'\n+532468 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53246A Compression Method    0000 (0) 'Stored'\n+53246C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532470 CRC                   042BB565 (69973349)\n+532474 Compressed Size       00001364 (4964)\n+532478 Uncompressed Size     00001364 (4964)\n+53247C Filename Length       008C (140)\n+53247E Extra Length          0009 (9)\n+532480 Comment Length        0000 (0)\n+532482 Disk Start            0000 (0)\n+532484 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532486 Ext File Attributes   00000000 (0)\n+53248A Local Header Offset   0003DB57 (252759)\n+53248E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0x53250F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53248E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53259B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53259D   Length              0005 (5)\n-53259F   Flags               01 (1) 'Modification'\n-5325A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5325A4 CENTRAL HEADER #142   02014B50 (33639248)\n-5325A8 Created Zip Spec      14 (20) '2.0'\n-5325A9 Created OS            00 (0) 'MS-DOS'\n-5325AA Extract Zip Spec      14 (20) '2.0'\n-5325AB Extract OS            00 (0) 'MS-DOS'\n-5325AC General Purpose Flag  0000 (0)\n-5325AE Compression Method    0000 (0) 'Stored'\n-5325B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5325B4 CRC                   00000000 (0)\n-5325B8 Compressed Size       00000000 (0)\n-5325BC Uncompressed Size     00000000 (0)\n-5325C0 Filename Length       0077 (119)\n-5325C2 Extra Length          0009 (9)\n-5325C4 Comment Length        0000 (0)\n-5325C6 Disk Start            0000 (0)\n-5325C8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5325CA Ext File Attributes   00000000 (0)\n-5325CE Local Header Offset   0003EFE7 (258023)\n-5325D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5325D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532649 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53264B   Length              0005 (5)\n-53264D   Flags               01 (1) 'Modification'\n-53264E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532652 CENTRAL HEADER #143   02014B50 (33639248)\n-532656 Created Zip Spec      14 (20) '2.0'\n-532657 Created OS            00 (0) 'MS-DOS'\n-532658 Extract Zip Spec      14 (20) '2.0'\n-532659 Extract OS            00 (0) 'MS-DOS'\n-53265A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53265C Compression Method    0000 (0) 'Stored'\n-53265E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532662 CRC                   7A63232B (2053317419)\n-532666 Compressed Size       000013C0 (5056)\n-53266A Uncompressed Size     000013C0 (5056)\n-53266E Filename Length       008D (141)\n-532670 Extra Length          0009 (9)\n-532672 Comment Length        0000 (0)\n-532674 Disk Start            0000 (0)\n-532676 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532678 Ext File Attributes   00000000 (0)\n-53267C Local Header Offset   0003F085 (258181)\n-532680 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+53251A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53251C   Length              0005 (5)\n+53251E   Flags               01 (1) 'Modification'\n+53251F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532523 CENTRAL HEADER #142   02014B50 (33639248)\n+532527 Created Zip Spec      14 (20) '2.0'\n+532528 Created OS            00 (0) 'MS-DOS'\n+532529 Extract Zip Spec      14 (20) '2.0'\n+53252A Extract OS            00 (0) 'MS-DOS'\n+53252B General Purpose Flag  0000 (0)\n+53252D Compression Method    0000 (0) 'Stored'\n+53252F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532533 CRC                   00000000 (0)\n+532537 Compressed Size       00000000 (0)\n+53253B Uncompressed Size     00000000 (0)\n+53253F Filename Length       0077 (119)\n+532541 Extra Length          0009 (9)\n+532543 Comment Length        0000 (0)\n+532545 Disk Start            0000 (0)\n+532547 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532549 Ext File Attributes   00000000 (0)\n+53254D Local Header Offset   0003EF7E (257918)\n+532551 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532551: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5325C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5325CA   Length              0005 (5)\n+5325CC   Flags               01 (1) 'Modification'\n+5325CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5325D1 CENTRAL HEADER #143   02014B50 (33639248)\n+5325D5 Created Zip Spec      14 (20) '2.0'\n+5325D6 Created OS            00 (0) 'MS-DOS'\n+5325D7 Extract Zip Spec      14 (20) '2.0'\n+5325D8 Extract OS            00 (0) 'MS-DOS'\n+5325D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5325DB Compression Method    0000 (0) 'Stored'\n+5325DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5325E1 CRC                   7A63232B (2053317419)\n+5325E5 Compressed Size       000013C0 (5056)\n+5325E9 Uncompressed Size     000013C0 (5056)\n+5325ED Filename Length       008D (141)\n+5325EF Extra Length          0009 (9)\n+5325F1 Comment Length        0000 (0)\n+5325F3 Disk Start            0000 (0)\n+5325F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5325F7 Ext File Attributes   00000000 (0)\n+5325FB Local Header Offset   0003F01C (258076)\n+5325FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0x532680: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5325FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53270D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53270F   Length              0005 (5)\n-532711   Flags               01 (1) 'Modification'\n-532712   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532716 CENTRAL HEADER #144   02014B50 (33639248)\n-53271A Created Zip Spec      14 (20) '2.0'\n-53271B Created OS            00 (0) 'MS-DOS'\n-53271C Extract Zip Spec      14 (20) '2.0'\n-53271D Extract OS            00 (0) 'MS-DOS'\n-53271E General Purpose Flag  0000 (0)\n-532720 Compression Method    0000 (0) 'Stored'\n-532722 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532726 CRC                   00000000 (0)\n-53272A Compressed Size       00000000 (0)\n-53272E Uncompressed Size     00000000 (0)\n-532732 Filename Length       0026 (38)\n-532734 Extra Length          0009 (9)\n-532736 Comment Length        0000 (0)\n-532738 Disk Start            0000 (0)\n-53273A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53273C Ext File Attributes   00000000 (0)\n-532740 Local Header Offset   00040509 (263433)\n-532744 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532744: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53276A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53276C   Length              0005 (5)\n-53276E   Flags               01 (1) 'Modification'\n-53276F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532773 CENTRAL HEADER #145   02014B50 (33639248)\n-532777 Created Zip Spec      14 (20) '2.0'\n-532778 Created OS            00 (0) 'MS-DOS'\n-532779 Extract Zip Spec      14 (20) '2.0'\n-53277A Extract OS            00 (0) 'MS-DOS'\n-53277B General Purpose Flag  0000 (0)\n-53277D Compression Method    0000 (0) 'Stored'\n-53277F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532783 CRC                   00000000 (0)\n-532787 Compressed Size       00000000 (0)\n-53278B Uncompressed Size     00000000 (0)\n-53278F Filename Length       002F (47)\n-532791 Extra Length          0009 (9)\n-532793 Comment Length        0000 (0)\n-532795 Disk Start            0000 (0)\n-532797 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532799 Ext File Attributes   00000000 (0)\n-53279D Local Header Offset   00040556 (263510)\n-5327A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5327A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5327D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5327D2   Length              0005 (5)\n-5327D4   Flags               01 (1) 'Modification'\n-5327D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5327D9 CENTRAL HEADER #146   02014B50 (33639248)\n-5327DD Created Zip Spec      14 (20) '2.0'\n-5327DE Created OS            00 (0) 'MS-DOS'\n-5327DF Extract Zip Spec      14 (20) '2.0'\n-5327E0 Extract OS            00 (0) 'MS-DOS'\n-5327E1 General Purpose Flag  0000 (0)\n-5327E3 Compression Method    0000 (0) 'Stored'\n-5327E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5327E9 CRC                   00000000 (0)\n-5327ED Compressed Size       00000000 (0)\n-5327F1 Uncompressed Size     00000000 (0)\n-5327F5 Filename Length       0060 (96)\n-5327F7 Extra Length          0009 (9)\n-5327F9 Comment Length        0000 (0)\n-5327FB Disk Start            0000 (0)\n-5327FD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5327FF Ext File Attributes   00000000 (0)\n-532803 Local Header Offset   000405AC (263596)\n-532807 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532807: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532867 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532869   Length              0005 (5)\n-53286B   Flags               01 (1) 'Modification'\n-53286C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532870 CENTRAL HEADER #147   02014B50 (33639248)\n-532874 Created Zip Spec      14 (20) '2.0'\n-532875 Created OS            00 (0) 'MS-DOS'\n-532876 Extract Zip Spec      14 (20) '2.0'\n-532877 Extract OS            00 (0) 'MS-DOS'\n-532878 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53287A Compression Method    0000 (0) 'Stored'\n-53287C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532880 CRC                   19888393 (428376979)\n-532884 Compressed Size       0000092E (2350)\n-532888 Uncompressed Size     0000092E (2350)\n-53288C Filename Length       0076 (118)\n-53288E Extra Length          0009 (9)\n-532890 Comment Length        0000 (0)\n-532892 Disk Start            0000 (0)\n-532894 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532896 Ext File Attributes   00000000 (0)\n-53289A Local Header Offset   00040633 (263731)\n-53289E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53289E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532914 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532916   Length              0005 (5)\n-532918   Flags               01 (1) 'Modification'\n-532919   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53291D CENTRAL HEADER #148   02014B50 (33639248)\n-532921 Created Zip Spec      14 (20) '2.0'\n-532922 Created OS            00 (0) 'MS-DOS'\n-532923 Extract Zip Spec      14 (20) '2.0'\n-532924 Extract OS            00 (0) 'MS-DOS'\n-532925 General Purpose Flag  0000 (0)\n-532927 Compression Method    0000 (0) 'Stored'\n-532929 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53292D CRC                   00000000 (0)\n-532931 Compressed Size       00000000 (0)\n-532935 Uncompressed Size     00000000 (0)\n-532939 Filename Length       0026 (38)\n-53293B Extra Length          0009 (9)\n-53293D Comment Length        0000 (0)\n-53293F Disk Start            0000 (0)\n-532941 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532943 Ext File Attributes   00000000 (0)\n-532947 Local Header Offset   0004100E (266254)\n-53294B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53294B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532971 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532973   Length              0005 (5)\n-532975   Flags               01 (1) 'Modification'\n-532976   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53297A CENTRAL HEADER #149   02014B50 (33639248)\n-53297E Created Zip Spec      14 (20) '2.0'\n-53297F Created OS            00 (0) 'MS-DOS'\n-532980 Extract Zip Spec      14 (20) '2.0'\n-532981 Extract OS            00 (0) 'MS-DOS'\n-532982 General Purpose Flag  0000 (0)\n-532984 Compression Method    0000 (0) 'Stored'\n-532986 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53298A CRC                   00000000 (0)\n-53298E Compressed Size       00000000 (0)\n-532992 Uncompressed Size     00000000 (0)\n-532996 Filename Length       002F (47)\n-532998 Extra Length          0009 (9)\n-53299A Comment Length        0000 (0)\n-53299C Disk Start            0000 (0)\n-53299E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5329A0 Ext File Attributes   00000000 (0)\n-5329A4 Local Header Offset   0004105B (266331)\n-5329A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5329A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5329D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5329D9   Length              0005 (5)\n-5329DB   Flags               01 (1) 'Modification'\n-5329DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5329E0 CENTRAL HEADER #150   02014B50 (33639248)\n-5329E4 Created Zip Spec      14 (20) '2.0'\n-5329E5 Created OS            00 (0) 'MS-DOS'\n-5329E6 Extract Zip Spec      14 (20) '2.0'\n-5329E7 Extract OS            00 (0) 'MS-DOS'\n-5329E8 General Purpose Flag  0000 (0)\n-5329EA Compression Method    0000 (0) 'Stored'\n-5329EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5329F0 CRC                   00000000 (0)\n-5329F4 Compressed Size       00000000 (0)\n-5329F8 Uncompressed Size     00000000 (0)\n-5329FC Filename Length       0066 (102)\n-5329FE Extra Length          0009 (9)\n-532A00 Comment Length        0000 (0)\n-532A02 Disk Start            0000 (0)\n-532A04 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532A06 Ext File Attributes   00000000 (0)\n-532A0A Local Header Offset   000410B1 (266417)\n-532A0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532A0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532A74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532A76   Length              0005 (5)\n-532A78   Flags               01 (1) 'Modification'\n-532A79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532A7D CENTRAL HEADER #151   02014B50 (33639248)\n-532A81 Created Zip Spec      14 (20) '2.0'\n-532A82 Created OS            00 (0) 'MS-DOS'\n-532A83 Extract Zip Spec      14 (20) '2.0'\n-532A84 Extract OS            00 (0) 'MS-DOS'\n-532A85 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-532A87 Compression Method    0000 (0) 'Stored'\n-532A89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532A8D CRC                   8B1E3BB7 (2334014391)\n-532A91 Compressed Size       00002091 (8337)\n-532A95 Uncompressed Size     00002091 (8337)\n-532A99 Filename Length       007C (124)\n-532A9B Extra Length          0009 (9)\n-532A9D Comment Length        0000 (0)\n-532A9F Disk Start            0000 (0)\n-532AA1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532AA3 Ext File Attributes   00000000 (0)\n-532AA7 Local Header Offset   0004113E (266558)\n-532AAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532AAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532B27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532B29   Length              0005 (5)\n-532B2B   Flags               01 (1) 'Modification'\n-532B2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532B30 CENTRAL HEADER #152   02014B50 (33639248)\n-532B34 Created Zip Spec      14 (20) '2.0'\n-532B35 Created OS            00 (0) 'MS-DOS'\n-532B36 Extract Zip Spec      14 (20) '2.0'\n-532B37 Extract OS            00 (0) 'MS-DOS'\n-532B38 General Purpose Flag  0000 (0)\n-532B3A Compression Method    0000 (0) 'Stored'\n-532B3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532B40 CRC                   00000000 (0)\n-532B44 Compressed Size       00000000 (0)\n-532B48 Uncompressed Size     00000000 (0)\n-532B4C Filename Length       002E (46)\n-532B4E Extra Length          0009 (9)\n-532B50 Comment Length        0000 (0)\n-532B52 Disk Start            0000 (0)\n-532B54 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532B56 Ext File Attributes   00000000 (0)\n-532B5A Local Header Offset   00043282 (275074)\n-532B5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532B5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532B8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532B8E   Length              0005 (5)\n-532B90   Flags               01 (1) 'Modification'\n-532B91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532B95 CENTRAL HEADER #153   02014B50 (33639248)\n-532B99 Created Zip Spec      14 (20) '2.0'\n-532B9A Created OS            00 (0) 'MS-DOS'\n-532B9B Extract Zip Spec      14 (20) '2.0'\n-532B9C Extract OS            00 (0) 'MS-DOS'\n-532B9D General Purpose Flag  0000 (0)\n-532B9F Compression Method    0000 (0) 'Stored'\n-532BA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532BA5 CRC                   00000000 (0)\n-532BA9 Compressed Size       00000000 (0)\n-532BAD Uncompressed Size     00000000 (0)\n-532BB1 Filename Length       0037 (55)\n-532BB3 Extra Length          0009 (9)\n-532BB5 Comment Length        0000 (0)\n-532BB7 Disk Start            0000 (0)\n-532BB9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532BBB Ext File Attributes   00000000 (0)\n-532BBF Local Header Offset   000432D7 (275159)\n-532BC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532BC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532BFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532BFC   Length              0005 (5)\n-532BFE   Flags               01 (1) 'Modification'\n-532BFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532C03 CENTRAL HEADER #154   02014B50 (33639248)\n-532C07 Created Zip Spec      14 (20) '2.0'\n-532C08 Created OS            00 (0) 'MS-DOS'\n-532C09 Extract Zip Spec      14 (20) '2.0'\n-532C0A Extract OS            00 (0) 'MS-DOS'\n-532C0B General Purpose Flag  0000 (0)\n-532C0D Compression Method    0000 (0) 'Stored'\n-532C0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532C13 CRC                   00000000 (0)\n-532C17 Compressed Size       00000000 (0)\n-532C1B Uncompressed Size     00000000 (0)\n-532C1F Filename Length       007B (123)\n-532C21 Extra Length          0009 (9)\n-532C23 Comment Length        0000 (0)\n-532C25 Disk Start            0000 (0)\n-532C27 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532C29 Ext File Attributes   00000000 (0)\n-532C2D Local Header Offset   00043335 (275253)\n-532C31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532C31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532CAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532CAE   Length              0005 (5)\n-532CB0   Flags               01 (1) 'Modification'\n-532CB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532CB5 CENTRAL HEADER #155   02014B50 (33639248)\n-532CB9 Created Zip Spec      14 (20) '2.0'\n-532CBA Created OS            00 (0) 'MS-DOS'\n-532CBB Extract Zip Spec      14 (20) '2.0'\n-532CBC Extract OS            00 (0) 'MS-DOS'\n-532CBD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-532CBF Compression Method    0000 (0) 'Stored'\n-532CC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532CC5 CRC                   0D142FFC (219426812)\n-532CC9 Compressed Size       00001A7B (6779)\n-532CCD Uncompressed Size     00001A7B (6779)\n-532CD1 Filename Length       0091 (145)\n-532CD3 Extra Length          0009 (9)\n-532CD5 Comment Length        0000 (0)\n-532CD7 Disk Start            0000 (0)\n-532CD9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532CDB Ext File Attributes   00000000 (0)\n-532CDF Local Header Offset   000433D7 (275415)\n-532CE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+53268C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53268E   Length              0005 (5)\n+532690   Flags               01 (1) 'Modification'\n+532691   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532695 CENTRAL HEADER #144   02014B50 (33639248)\n+532699 Created Zip Spec      14 (20) '2.0'\n+53269A Created OS            00 (0) 'MS-DOS'\n+53269B Extract Zip Spec      14 (20) '2.0'\n+53269C Extract OS            00 (0) 'MS-DOS'\n+53269D General Purpose Flag  0000 (0)\n+53269F Compression Method    0000 (0) 'Stored'\n+5326A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5326A5 CRC                   00000000 (0)\n+5326A9 Compressed Size       00000000 (0)\n+5326AD Uncompressed Size     00000000 (0)\n+5326B1 Filename Length       0026 (38)\n+5326B3 Extra Length          0009 (9)\n+5326B5 Comment Length        0000 (0)\n+5326B7 Disk Start            0000 (0)\n+5326B9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5326BB Ext File Attributes   00000000 (0)\n+5326BF Local Header Offset   000404A0 (263328)\n+5326C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5326C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5326E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5326EB   Length              0005 (5)\n+5326ED   Flags               01 (1) 'Modification'\n+5326EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5326F2 CENTRAL HEADER #145   02014B50 (33639248)\n+5326F6 Created Zip Spec      14 (20) '2.0'\n+5326F7 Created OS            00 (0) 'MS-DOS'\n+5326F8 Extract Zip Spec      14 (20) '2.0'\n+5326F9 Extract OS            00 (0) 'MS-DOS'\n+5326FA General Purpose Flag  0000 (0)\n+5326FC Compression Method    0000 (0) 'Stored'\n+5326FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532702 CRC                   00000000 (0)\n+532706 Compressed Size       00000000 (0)\n+53270A Uncompressed Size     00000000 (0)\n+53270E Filename Length       002F (47)\n+532710 Extra Length          0009 (9)\n+532712 Comment Length        0000 (0)\n+532714 Disk Start            0000 (0)\n+532716 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532718 Ext File Attributes   00000000 (0)\n+53271C Local Header Offset   000404ED (263405)\n+532720 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532720: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53274F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532751   Length              0005 (5)\n+532753   Flags               01 (1) 'Modification'\n+532754   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532758 CENTRAL HEADER #146   02014B50 (33639248)\n+53275C Created Zip Spec      14 (20) '2.0'\n+53275D Created OS            00 (0) 'MS-DOS'\n+53275E Extract Zip Spec      14 (20) '2.0'\n+53275F Extract OS            00 (0) 'MS-DOS'\n+532760 General Purpose Flag  0000 (0)\n+532762 Compression Method    0000 (0) 'Stored'\n+532764 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532768 CRC                   00000000 (0)\n+53276C Compressed Size       00000000 (0)\n+532770 Uncompressed Size     00000000 (0)\n+532774 Filename Length       0060 (96)\n+532776 Extra Length          0009 (9)\n+532778 Comment Length        0000 (0)\n+53277A Disk Start            0000 (0)\n+53277C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53277E Ext File Attributes   00000000 (0)\n+532782 Local Header Offset   00040543 (263491)\n+532786 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532786: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5327E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5327E8   Length              0005 (5)\n+5327EA   Flags               01 (1) 'Modification'\n+5327EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5327EF CENTRAL HEADER #147   02014B50 (33639248)\n+5327F3 Created Zip Spec      14 (20) '2.0'\n+5327F4 Created OS            00 (0) 'MS-DOS'\n+5327F5 Extract Zip Spec      14 (20) '2.0'\n+5327F6 Extract OS            00 (0) 'MS-DOS'\n+5327F7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5327F9 Compression Method    0000 (0) 'Stored'\n+5327FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5327FF CRC                   19888393 (428376979)\n+532803 Compressed Size       0000092E (2350)\n+532807 Uncompressed Size     0000092E (2350)\n+53280B Filename Length       0076 (118)\n+53280D Extra Length          0009 (9)\n+53280F Comment Length        0000 (0)\n+532811 Disk Start            0000 (0)\n+532813 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532815 Ext File Attributes   00000000 (0)\n+532819 Local Header Offset   000405CA (263626)\n+53281D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53281D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532893 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532895   Length              0005 (5)\n+532897   Flags               01 (1) 'Modification'\n+532898   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53289C CENTRAL HEADER #148   02014B50 (33639248)\n+5328A0 Created Zip Spec      14 (20) '2.0'\n+5328A1 Created OS            00 (0) 'MS-DOS'\n+5328A2 Extract Zip Spec      14 (20) '2.0'\n+5328A3 Extract OS            00 (0) 'MS-DOS'\n+5328A4 General Purpose Flag  0000 (0)\n+5328A6 Compression Method    0000 (0) 'Stored'\n+5328A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5328AC CRC                   00000000 (0)\n+5328B0 Compressed Size       00000000 (0)\n+5328B4 Uncompressed Size     00000000 (0)\n+5328B8 Filename Length       0026 (38)\n+5328BA Extra Length          0009 (9)\n+5328BC Comment Length        0000 (0)\n+5328BE Disk Start            0000 (0)\n+5328C0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5328C2 Ext File Attributes   00000000 (0)\n+5328C6 Local Header Offset   00040FA5 (266149)\n+5328CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5328CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5328F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5328F2   Length              0005 (5)\n+5328F4   Flags               01 (1) 'Modification'\n+5328F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5328F9 CENTRAL HEADER #149   02014B50 (33639248)\n+5328FD Created Zip Spec      14 (20) '2.0'\n+5328FE Created OS            00 (0) 'MS-DOS'\n+5328FF Extract Zip Spec      14 (20) '2.0'\n+532900 Extract OS            00 (0) 'MS-DOS'\n+532901 General Purpose Flag  0000 (0)\n+532903 Compression Method    0000 (0) 'Stored'\n+532905 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532909 CRC                   00000000 (0)\n+53290D Compressed Size       00000000 (0)\n+532911 Uncompressed Size     00000000 (0)\n+532915 Filename Length       002F (47)\n+532917 Extra Length          0009 (9)\n+532919 Comment Length        0000 (0)\n+53291B Disk Start            0000 (0)\n+53291D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53291F Ext File Attributes   00000000 (0)\n+532923 Local Header Offset   00040FF2 (266226)\n+532927 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532927: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532956 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532958   Length              0005 (5)\n+53295A   Flags               01 (1) 'Modification'\n+53295B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53295F CENTRAL HEADER #150   02014B50 (33639248)\n+532963 Created Zip Spec      14 (20) '2.0'\n+532964 Created OS            00 (0) 'MS-DOS'\n+532965 Extract Zip Spec      14 (20) '2.0'\n+532966 Extract OS            00 (0) 'MS-DOS'\n+532967 General Purpose Flag  0000 (0)\n+532969 Compression Method    0000 (0) 'Stored'\n+53296B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53296F CRC                   00000000 (0)\n+532973 Compressed Size       00000000 (0)\n+532977 Uncompressed Size     00000000 (0)\n+53297B Filename Length       0066 (102)\n+53297D Extra Length          0009 (9)\n+53297F Comment Length        0000 (0)\n+532981 Disk Start            0000 (0)\n+532983 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532985 Ext File Attributes   00000000 (0)\n+532989 Local Header Offset   00041048 (266312)\n+53298D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53298D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5329F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5329F5   Length              0005 (5)\n+5329F7   Flags               01 (1) 'Modification'\n+5329F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5329FC CENTRAL HEADER #151   02014B50 (33639248)\n+532A00 Created Zip Spec      14 (20) '2.0'\n+532A01 Created OS            00 (0) 'MS-DOS'\n+532A02 Extract Zip Spec      14 (20) '2.0'\n+532A03 Extract OS            00 (0) 'MS-DOS'\n+532A04 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+532A06 Compression Method    0000 (0) 'Stored'\n+532A08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532A0C CRC                   8B1E3BB7 (2334014391)\n+532A10 Compressed Size       00002091 (8337)\n+532A14 Uncompressed Size     00002091 (8337)\n+532A18 Filename Length       007C (124)\n+532A1A Extra Length          0009 (9)\n+532A1C Comment Length        0000 (0)\n+532A1E Disk Start            0000 (0)\n+532A20 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532A22 Ext File Attributes   00000000 (0)\n+532A26 Local Header Offset   000410D5 (266453)\n+532A2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532A2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532AA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532AA8   Length              0005 (5)\n+532AAA   Flags               01 (1) 'Modification'\n+532AAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532AAF CENTRAL HEADER #152   02014B50 (33639248)\n+532AB3 Created Zip Spec      14 (20) '2.0'\n+532AB4 Created OS            00 (0) 'MS-DOS'\n+532AB5 Extract Zip Spec      14 (20) '2.0'\n+532AB6 Extract OS            00 (0) 'MS-DOS'\n+532AB7 General Purpose Flag  0000 (0)\n+532AB9 Compression Method    0000 (0) 'Stored'\n+532ABB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532ABF CRC                   00000000 (0)\n+532AC3 Compressed Size       00000000 (0)\n+532AC7 Uncompressed Size     00000000 (0)\n+532ACB Filename Length       002E (46)\n+532ACD Extra Length          0009 (9)\n+532ACF Comment Length        0000 (0)\n+532AD1 Disk Start            0000 (0)\n+532AD3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532AD5 Ext File Attributes   00000000 (0)\n+532AD9 Local Header Offset   00043219 (274969)\n+532ADD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532ADD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532B0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532B0D   Length              0005 (5)\n+532B0F   Flags               01 (1) 'Modification'\n+532B10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532B14 CENTRAL HEADER #153   02014B50 (33639248)\n+532B18 Created Zip Spec      14 (20) '2.0'\n+532B19 Created OS            00 (0) 'MS-DOS'\n+532B1A Extract Zip Spec      14 (20) '2.0'\n+532B1B Extract OS            00 (0) 'MS-DOS'\n+532B1C General Purpose Flag  0000 (0)\n+532B1E Compression Method    0000 (0) 'Stored'\n+532B20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532B24 CRC                   00000000 (0)\n+532B28 Compressed Size       00000000 (0)\n+532B2C Uncompressed Size     00000000 (0)\n+532B30 Filename Length       0037 (55)\n+532B32 Extra Length          0009 (9)\n+532B34 Comment Length        0000 (0)\n+532B36 Disk Start            0000 (0)\n+532B38 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532B3A Ext File Attributes   00000000 (0)\n+532B3E Local Header Offset   0004326E (275054)\n+532B42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532B42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532B79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532B7B   Length              0005 (5)\n+532B7D   Flags               01 (1) 'Modification'\n+532B7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532B82 CENTRAL HEADER #154   02014B50 (33639248)\n+532B86 Created Zip Spec      14 (20) '2.0'\n+532B87 Created OS            00 (0) 'MS-DOS'\n+532B88 Extract Zip Spec      14 (20) '2.0'\n+532B89 Extract OS            00 (0) 'MS-DOS'\n+532B8A General Purpose Flag  0000 (0)\n+532B8C Compression Method    0000 (0) 'Stored'\n+532B8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532B92 CRC                   00000000 (0)\n+532B96 Compressed Size       00000000 (0)\n+532B9A Uncompressed Size     00000000 (0)\n+532B9E Filename Length       007B (123)\n+532BA0 Extra Length          0009 (9)\n+532BA2 Comment Length        0000 (0)\n+532BA4 Disk Start            0000 (0)\n+532BA6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532BA8 Ext File Attributes   00000000 (0)\n+532BAC Local Header Offset   000432CC (275148)\n+532BB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532BB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532C2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532C2D   Length              0005 (5)\n+532C2F   Flags               01 (1) 'Modification'\n+532C30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532C34 CENTRAL HEADER #155   02014B50 (33639248)\n+532C38 Created Zip Spec      14 (20) '2.0'\n+532C39 Created OS            00 (0) 'MS-DOS'\n+532C3A Extract Zip Spec      14 (20) '2.0'\n+532C3B Extract OS            00 (0) 'MS-DOS'\n+532C3C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+532C3E Compression Method    0000 (0) 'Stored'\n+532C40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532C44 CRC                   0D142FFC (219426812)\n+532C48 Compressed Size       00001A7B (6779)\n+532C4C Uncompressed Size     00001A7B (6779)\n+532C50 Filename Length       0091 (145)\n+532C52 Extra Length          0009 (9)\n+532C54 Comment Length        0000 (0)\n+532C56 Disk Start            0000 (0)\n+532C58 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532C5A Ext File Attributes   00000000 (0)\n+532C5E Local Header Offset   0004336E (275310)\n+532C62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x532CE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x532C62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-532D74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532D76   Length              0005 (5)\n-532D78   Flags               01 (1) 'Modification'\n-532D79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532D7D CENTRAL HEADER #156   02014B50 (33639248)\n-532D81 Created Zip Spec      14 (20) '2.0'\n-532D82 Created OS            00 (0) 'MS-DOS'\n-532D83 Extract Zip Spec      14 (20) '2.0'\n-532D84 Extract OS            00 (0) 'MS-DOS'\n-532D85 General Purpose Flag  0000 (0)\n-532D87 Compression Method    0000 (0) 'Stored'\n-532D89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532D8D CRC                   00000000 (0)\n-532D91 Compressed Size       00000000 (0)\n-532D95 Uncompressed Size     00000000 (0)\n-532D99 Filename Length       0031 (49)\n-532D9B Extra Length          0009 (9)\n-532D9D Comment Length        0000 (0)\n-532D9F Disk Start            0000 (0)\n-532DA1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532DA3 Ext File Attributes   00000000 (0)\n-532DA7 Local Header Offset   00044F1A (282394)\n-532DAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532DAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532DDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532DDE   Length              0005 (5)\n-532DE0   Flags               01 (1) 'Modification'\n-532DE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532DE5 CENTRAL HEADER #157   02014B50 (33639248)\n-532DE9 Created Zip Spec      14 (20) '2.0'\n-532DEA Created OS            00 (0) 'MS-DOS'\n-532DEB Extract Zip Spec      14 (20) '2.0'\n-532DEC Extract OS            00 (0) 'MS-DOS'\n-532DED General Purpose Flag  0000 (0)\n-532DEF Compression Method    0000 (0) 'Stored'\n-532DF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532DF5 CRC                   00000000 (0)\n-532DF9 Compressed Size       00000000 (0)\n-532DFD Uncompressed Size     00000000 (0)\n-532E01 Filename Length       003A (58)\n-532E03 Extra Length          0009 (9)\n-532E05 Comment Length        0000 (0)\n-532E07 Disk Start            0000 (0)\n-532E09 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532E0B Ext File Attributes   00000000 (0)\n-532E0F Local Header Offset   00044F72 (282482)\n-532E13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532E13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532E4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532E4F   Length              0005 (5)\n-532E51   Flags               01 (1) 'Modification'\n-532E52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532E56 CENTRAL HEADER #158   02014B50 (33639248)\n-532E5A Created Zip Spec      14 (20) '2.0'\n-532E5B Created OS            00 (0) 'MS-DOS'\n-532E5C Extract Zip Spec      14 (20) '2.0'\n-532E5D Extract OS            00 (0) 'MS-DOS'\n-532E5E General Purpose Flag  0000 (0)\n-532E60 Compression Method    0000 (0) 'Stored'\n-532E62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532E66 CRC                   00000000 (0)\n-532E6A Compressed Size       00000000 (0)\n-532E6E Uncompressed Size     00000000 (0)\n-532E72 Filename Length       0081 (129)\n-532E74 Extra Length          0009 (9)\n-532E76 Comment Length        0000 (0)\n-532E78 Disk Start            0000 (0)\n-532E7A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532E7C Ext File Attributes   00000000 (0)\n-532E80 Local Header Offset   00044FD3 (282579)\n-532E84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532E84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532F05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532F07   Length              0005 (5)\n-532F09   Flags               01 (1) 'Modification'\n-532F0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532F0E CENTRAL HEADER #159   02014B50 (33639248)\n-532F12 Created Zip Spec      14 (20) '2.0'\n-532F13 Created OS            00 (0) 'MS-DOS'\n-532F14 Extract Zip Spec      14 (20) '2.0'\n-532F15 Extract OS            00 (0) 'MS-DOS'\n-532F16 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-532F18 Compression Method    0000 (0) 'Stored'\n-532F1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532F1E CRC                   726CFBF2 (1919745010)\n-532F22 Compressed Size       00000886 (2182)\n-532F26 Uncompressed Size     00000886 (2182)\n-532F2A Filename Length       0097 (151)\n-532F2C Extra Length          0009 (9)\n-532F2E Comment Length        0000 (0)\n-532F30 Disk Start            0000 (0)\n-532F32 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-532F34 Ext File Attributes   00000000 (0)\n-532F38 Local Header Offset   0004507B (282747)\n-532F3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+532CF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532CF5   Length              0005 (5)\n+532CF7   Flags               01 (1) 'Modification'\n+532CF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532CFC CENTRAL HEADER #156   02014B50 (33639248)\n+532D00 Created Zip Spec      14 (20) '2.0'\n+532D01 Created OS            00 (0) 'MS-DOS'\n+532D02 Extract Zip Spec      14 (20) '2.0'\n+532D03 Extract OS            00 (0) 'MS-DOS'\n+532D04 General Purpose Flag  0000 (0)\n+532D06 Compression Method    0000 (0) 'Stored'\n+532D08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532D0C CRC                   00000000 (0)\n+532D10 Compressed Size       00000000 (0)\n+532D14 Uncompressed Size     00000000 (0)\n+532D18 Filename Length       0031 (49)\n+532D1A Extra Length          0009 (9)\n+532D1C Comment Length        0000 (0)\n+532D1E Disk Start            0000 (0)\n+532D20 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532D22 Ext File Attributes   00000000 (0)\n+532D26 Local Header Offset   00044EB1 (282289)\n+532D2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532D2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532D5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532D5D   Length              0005 (5)\n+532D5F   Flags               01 (1) 'Modification'\n+532D60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532D64 CENTRAL HEADER #157   02014B50 (33639248)\n+532D68 Created Zip Spec      14 (20) '2.0'\n+532D69 Created OS            00 (0) 'MS-DOS'\n+532D6A Extract Zip Spec      14 (20) '2.0'\n+532D6B Extract OS            00 (0) 'MS-DOS'\n+532D6C General Purpose Flag  0000 (0)\n+532D6E Compression Method    0000 (0) 'Stored'\n+532D70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532D74 CRC                   00000000 (0)\n+532D78 Compressed Size       00000000 (0)\n+532D7C Uncompressed Size     00000000 (0)\n+532D80 Filename Length       003A (58)\n+532D82 Extra Length          0009 (9)\n+532D84 Comment Length        0000 (0)\n+532D86 Disk Start            0000 (0)\n+532D88 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532D8A Ext File Attributes   00000000 (0)\n+532D8E Local Header Offset   00044F09 (282377)\n+532D92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532D92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532DCC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532DCE   Length              0005 (5)\n+532DD0   Flags               01 (1) 'Modification'\n+532DD1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532DD5 CENTRAL HEADER #158   02014B50 (33639248)\n+532DD9 Created Zip Spec      14 (20) '2.0'\n+532DDA Created OS            00 (0) 'MS-DOS'\n+532DDB Extract Zip Spec      14 (20) '2.0'\n+532DDC Extract OS            00 (0) 'MS-DOS'\n+532DDD General Purpose Flag  0000 (0)\n+532DDF Compression Method    0000 (0) 'Stored'\n+532DE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532DE5 CRC                   00000000 (0)\n+532DE9 Compressed Size       00000000 (0)\n+532DED Uncompressed Size     00000000 (0)\n+532DF1 Filename Length       0081 (129)\n+532DF3 Extra Length          0009 (9)\n+532DF5 Comment Length        0000 (0)\n+532DF7 Disk Start            0000 (0)\n+532DF9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532DFB Ext File Attributes   00000000 (0)\n+532DFF Local Header Offset   00044F6A (282474)\n+532E03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x532E03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+532E84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532E86   Length              0005 (5)\n+532E88   Flags               01 (1) 'Modification'\n+532E89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532E8D CENTRAL HEADER #159   02014B50 (33639248)\n+532E91 Created Zip Spec      14 (20) '2.0'\n+532E92 Created OS            00 (0) 'MS-DOS'\n+532E93 Extract Zip Spec      14 (20) '2.0'\n+532E94 Extract OS            00 (0) 'MS-DOS'\n+532E95 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+532E97 Compression Method    0000 (0) 'Stored'\n+532E99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532E9D CRC                   726CFBF2 (1919745010)\n+532EA1 Compressed Size       00000886 (2182)\n+532EA5 Uncompressed Size     00000886 (2182)\n+532EA9 Filename Length       0097 (151)\n+532EAB Extra Length          0009 (9)\n+532EAD Comment Length        0000 (0)\n+532EAF Disk Start            0000 (0)\n+532EB1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532EB3 Ext File Attributes   00000000 (0)\n+532EB7 Local Header Offset   00045012 (282642)\n+532EBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x532F3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x532EBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-532FD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532FD5   Length              0005 (5)\n-532FD7   Flags               01 (1) 'Modification'\n-532FD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532FDC CENTRAL HEADER #160   02014B50 (33639248)\n-532FE0 Created Zip Spec      14 (20) '2.0'\n-532FE1 Created OS            00 (0) 'MS-DOS'\n-532FE2 Extract Zip Spec      14 (20) '2.0'\n-532FE3 Extract OS            00 (0) 'MS-DOS'\n-532FE4 General Purpose Flag  0000 (0)\n-532FE6 Compression Method    0000 (0) 'Stored'\n-532FE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532FEC CRC                   00000000 (0)\n-532FF0 Compressed Size       00000000 (0)\n-532FF4 Uncompressed Size     00000000 (0)\n-532FF8 Filename Length       0088 (136)\n-532FFA Extra Length          0009 (9)\n-532FFC Comment Length        0000 (0)\n-532FFE Disk Start            0000 (0)\n-533000 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533002 Ext File Attributes   00000000 (0)\n-533006 Local Header Offset   000459CF (285135)\n-53300A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+532F52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+532F54   Length              0005 (5)\n+532F56   Flags               01 (1) 'Modification'\n+532F57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+532F5B CENTRAL HEADER #160   02014B50 (33639248)\n+532F5F Created Zip Spec      14 (20) '2.0'\n+532F60 Created OS            00 (0) 'MS-DOS'\n+532F61 Extract Zip Spec      14 (20) '2.0'\n+532F62 Extract OS            00 (0) 'MS-DOS'\n+532F63 General Purpose Flag  0000 (0)\n+532F65 Compression Method    0000 (0) 'Stored'\n+532F67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+532F6B CRC                   00000000 (0)\n+532F6F Compressed Size       00000000 (0)\n+532F73 Uncompressed Size     00000000 (0)\n+532F77 Filename Length       0088 (136)\n+532F79 Extra Length          0009 (9)\n+532F7B Comment Length        0000 (0)\n+532F7D Disk Start            0000 (0)\n+532F7F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+532F81 Ext File Attributes   00000000 (0)\n+532F85 Local Header Offset   00045966 (285030)\n+532F89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x53300A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x532F89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-533092 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533094   Length              0005 (5)\n-533096   Flags               01 (1) 'Modification'\n-533097   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53309B CENTRAL HEADER #161   02014B50 (33639248)\n-53309F Created Zip Spec      14 (20) '2.0'\n-5330A0 Created OS            00 (0) 'MS-DOS'\n-5330A1 Extract Zip Spec      14 (20) '2.0'\n-5330A2 Extract OS            00 (0) 'MS-DOS'\n-5330A3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5330A5 Compression Method    0000 (0) 'Stored'\n-5330A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5330AB CRC                   0124A640 (19179072)\n-5330AF Compressed Size       00001071 (4209)\n-5330B3 Uncompressed Size     00001071 (4209)\n-5330B7 Filename Length       009E (158)\n-5330B9 Extra Length          0009 (9)\n-5330BB Comment Length        0000 (0)\n-5330BD Disk Start            0000 (0)\n-5330BF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5330C1 Ext File Attributes   00000000 (0)\n-5330C5 Local Header Offset   00045A7E (285310)\n-5330C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+533011 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533013   Length              0005 (5)\n+533015   Flags               01 (1) 'Modification'\n+533016   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53301A CENTRAL HEADER #161   02014B50 (33639248)\n+53301E Created Zip Spec      14 (20) '2.0'\n+53301F Created OS            00 (0) 'MS-DOS'\n+533020 Extract Zip Spec      14 (20) '2.0'\n+533021 Extract OS            00 (0) 'MS-DOS'\n+533022 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+533024 Compression Method    0000 (0) 'Stored'\n+533026 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53302A CRC                   0124A640 (19179072)\n+53302E Compressed Size       00001071 (4209)\n+533032 Uncompressed Size     00001071 (4209)\n+533036 Filename Length       009E (158)\n+533038 Extra Length          0009 (9)\n+53303A Comment Length        0000 (0)\n+53303C Disk Start            0000 (0)\n+53303E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533040 Ext File Attributes   00000000 (0)\n+533044 Local Header Offset   00045A15 (285205)\n+533048 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5330C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x533048: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-533167 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533169   Length              0005 (5)\n-53316B   Flags               01 (1) 'Modification'\n-53316C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533170 CENTRAL HEADER #162   02014B50 (33639248)\n-533174 Created Zip Spec      14 (20) '2.0'\n-533175 Created OS            00 (0) 'MS-DOS'\n-533176 Extract Zip Spec      14 (20) '2.0'\n-533177 Extract OS            00 (0) 'MS-DOS'\n-533178 General Purpose Flag  0000 (0)\n-53317A Compression Method    0000 (0) 'Stored'\n-53317C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533180 CRC                   00000000 (0)\n-533184 Compressed Size       00000000 (0)\n-533188 Uncompressed Size     00000000 (0)\n-53318C Filename Length       0088 (136)\n-53318E Extra Length          0009 (9)\n-533190 Comment Length        0000 (0)\n-533192 Disk Start            0000 (0)\n-533194 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533196 Ext File Attributes   00000000 (0)\n-53319A Local Header Offset   00046BC4 (289732)\n-53319E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5330E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5330E8   Length              0005 (5)\n+5330EA   Flags               01 (1) 'Modification'\n+5330EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5330EF CENTRAL HEADER #162   02014B50 (33639248)\n+5330F3 Created Zip Spec      14 (20) '2.0'\n+5330F4 Created OS            00 (0) 'MS-DOS'\n+5330F5 Extract Zip Spec      14 (20) '2.0'\n+5330F6 Extract OS            00 (0) 'MS-DOS'\n+5330F7 General Purpose Flag  0000 (0)\n+5330F9 Compression Method    0000 (0) 'Stored'\n+5330FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5330FF CRC                   00000000 (0)\n+533103 Compressed Size       00000000 (0)\n+533107 Uncompressed Size     00000000 (0)\n+53310B Filename Length       0088 (136)\n+53310D Extra Length          0009 (9)\n+53310F Comment Length        0000 (0)\n+533111 Disk Start            0000 (0)\n+533113 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533115 Ext File Attributes   00000000 (0)\n+533119 Local Header Offset   00046B5B (289627)\n+53311D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x53319E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53311D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-533226 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533228   Length              0005 (5)\n-53322A   Flags               01 (1) 'Modification'\n-53322B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53322F CENTRAL HEADER #163   02014B50 (33639248)\n-533233 Created Zip Spec      14 (20) '2.0'\n-533234 Created OS            00 (0) 'MS-DOS'\n-533235 Extract Zip Spec      14 (20) '2.0'\n-533236 Extract OS            00 (0) 'MS-DOS'\n-533237 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-533239 Compression Method    0000 (0) 'Stored'\n-53323B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53323F CRC                   7E793C9C (2121874588)\n-533243 Compressed Size       000008CC (2252)\n-533247 Uncompressed Size     000008CC (2252)\n-53324B Filename Length       009E (158)\n-53324D Extra Length          0009 (9)\n-53324F Comment Length        0000 (0)\n-533251 Disk Start            0000 (0)\n-533253 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533255 Ext File Attributes   00000000 (0)\n-533259 Local Header Offset   00046C73 (289907)\n-53325D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5331A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5331A7   Length              0005 (5)\n+5331A9   Flags               01 (1) 'Modification'\n+5331AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5331AE CENTRAL HEADER #163   02014B50 (33639248)\n+5331B2 Created Zip Spec      14 (20) '2.0'\n+5331B3 Created OS            00 (0) 'MS-DOS'\n+5331B4 Extract Zip Spec      14 (20) '2.0'\n+5331B5 Extract OS            00 (0) 'MS-DOS'\n+5331B6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5331B8 Compression Method    0000 (0) 'Stored'\n+5331BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5331BE CRC                   7E793C9C (2121874588)\n+5331C2 Compressed Size       000008CC (2252)\n+5331C6 Uncompressed Size     000008CC (2252)\n+5331CA Filename Length       009E (158)\n+5331CC Extra Length          0009 (9)\n+5331CE Comment Length        0000 (0)\n+5331D0 Disk Start            0000 (0)\n+5331D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5331D4 Ext File Attributes   00000000 (0)\n+5331D8 Local Header Offset   00046C0A (289802)\n+5331DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x53325D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5331DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5332FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5332FD   Length              0005 (5)\n-5332FF   Flags               01 (1) 'Modification'\n-533300   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533304 CENTRAL HEADER #164   02014B50 (33639248)\n-533308 Created Zip Spec      14 (20) '2.0'\n-533309 Created OS            00 (0) 'MS-DOS'\n-53330A Extract Zip Spec      14 (20) '2.0'\n-53330B Extract OS            00 (0) 'MS-DOS'\n-53330C General Purpose Flag  0000 (0)\n-53330E Compression Method    0000 (0) 'Stored'\n-533310 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533314 CRC                   00000000 (0)\n-533318 Compressed Size       00000000 (0)\n-53331C Uncompressed Size     00000000 (0)\n-533320 Filename Length       0026 (38)\n-533322 Extra Length          0009 (9)\n-533324 Comment Length        0000 (0)\n-533326 Disk Start            0000 (0)\n-533328 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53332A Ext File Attributes   00000000 (0)\n-53332E Local Header Offset   00047614 (292372)\n-533332 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533332: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533358 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53335A   Length              0005 (5)\n-53335C   Flags               01 (1) 'Modification'\n-53335D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533361 CENTRAL HEADER #165   02014B50 (33639248)\n-533365 Created Zip Spec      14 (20) '2.0'\n-533366 Created OS            00 (0) 'MS-DOS'\n-533367 Extract Zip Spec      14 (20) '2.0'\n-533368 Extract OS            00 (0) 'MS-DOS'\n-533369 General Purpose Flag  0000 (0)\n-53336B Compression Method    0000 (0) 'Stored'\n-53336D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533371 CRC                   00000000 (0)\n-533375 Compressed Size       00000000 (0)\n-533379 Uncompressed Size     00000000 (0)\n-53337D Filename Length       002F (47)\n-53337F Extra Length          0009 (9)\n-533381 Comment Length        0000 (0)\n-533383 Disk Start            0000 (0)\n-533385 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533387 Ext File Attributes   00000000 (0)\n-53338B Local Header Offset   00047661 (292449)\n-53338F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53338F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5333BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5333C0   Length              0005 (5)\n-5333C2   Flags               01 (1) 'Modification'\n-5333C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5333C7 CENTRAL HEADER #166   02014B50 (33639248)\n-5333CB Created Zip Spec      14 (20) '2.0'\n-5333CC Created OS            00 (0) 'MS-DOS'\n-5333CD Extract Zip Spec      14 (20) '2.0'\n-5333CE Extract OS            00 (0) 'MS-DOS'\n-5333CF General Purpose Flag  0000 (0)\n-5333D1 Compression Method    0000 (0) 'Stored'\n-5333D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5333D7 CRC                   00000000 (0)\n-5333DB Compressed Size       00000000 (0)\n-5333DF Uncompressed Size     00000000 (0)\n-5333E3 Filename Length       005D (93)\n-5333E5 Extra Length          0009 (9)\n-5333E7 Comment Length        0000 (0)\n-5333E9 Disk Start            0000 (0)\n-5333EB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5333ED Ext File Attributes   00000000 (0)\n-5333F1 Local Header Offset   000476B7 (292535)\n-5333F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5333F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533452 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533454   Length              0005 (5)\n-533456   Flags               01 (1) 'Modification'\n-533457   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53345B CENTRAL HEADER #167   02014B50 (33639248)\n-53345F Created Zip Spec      14 (20) '2.0'\n-533460 Created OS            00 (0) 'MS-DOS'\n-533461 Extract Zip Spec      14 (20) '2.0'\n-533462 Extract OS            00 (0) 'MS-DOS'\n-533463 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-533465 Compression Method    0000 (0) 'Stored'\n-533467 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53346B CRC                   4C048087 (1275363463)\n-53346F Compressed Size       00000861 (2145)\n-533473 Uncompressed Size     00000861 (2145)\n-533477 Filename Length       0073 (115)\n-533479 Extra Length          0009 (9)\n-53347B Comment Length        0000 (0)\n-53347D Disk Start            0000 (0)\n-53347F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533481 Ext File Attributes   00000000 (0)\n-533485 Local Header Offset   0004773B (292667)\n-533489 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533489: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5334FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5334FE   Length              0005 (5)\n-533500   Flags               01 (1) 'Modification'\n-533501   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533505 CENTRAL HEADER #168   02014B50 (33639248)\n-533509 Created Zip Spec      14 (20) '2.0'\n-53350A Created OS            00 (0) 'MS-DOS'\n-53350B Extract Zip Spec      14 (20) '2.0'\n-53350C Extract OS            00 (0) 'MS-DOS'\n-53350D General Purpose Flag  0000 (0)\n-53350F Compression Method    0000 (0) 'Stored'\n-533511 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533515 CRC                   00000000 (0)\n-533519 Compressed Size       00000000 (0)\n-53351D Uncompressed Size     00000000 (0)\n-533521 Filename Length       002D (45)\n-533523 Extra Length          0009 (9)\n-533525 Comment Length        0000 (0)\n-533527 Disk Start            0000 (0)\n-533529 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53352B Ext File Attributes   00000000 (0)\n-53352F Local Header Offset   00048046 (294982)\n-533533 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533533: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533560 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533562   Length              0005 (5)\n-533564   Flags               01 (1) 'Modification'\n-533565   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533569 CENTRAL HEADER #169   02014B50 (33639248)\n-53356D Created Zip Spec      14 (20) '2.0'\n-53356E Created OS            00 (0) 'MS-DOS'\n-53356F Extract Zip Spec      14 (20) '2.0'\n-533570 Extract OS            00 (0) 'MS-DOS'\n-533571 General Purpose Flag  0000 (0)\n-533573 Compression Method    0000 (0) 'Stored'\n-533575 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533579 CRC                   00000000 (0)\n-53357D Compressed Size       00000000 (0)\n-533581 Uncompressed Size     00000000 (0)\n-533585 Filename Length       0036 (54)\n-533587 Extra Length          0009 (9)\n-533589 Comment Length        0000 (0)\n-53358B Disk Start            0000 (0)\n-53358D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53358F Ext File Attributes   00000000 (0)\n-533593 Local Header Offset   0004809A (295066)\n-533597 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533597: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5335CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5335CF   Length              0005 (5)\n-5335D1   Flags               01 (1) 'Modification'\n-5335D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5335D6 CENTRAL HEADER #170   02014B50 (33639248)\n-5335DA Created Zip Spec      14 (20) '2.0'\n-5335DB Created OS            00 (0) 'MS-DOS'\n-5335DC Extract Zip Spec      14 (20) '2.0'\n-5335DD Extract OS            00 (0) 'MS-DOS'\n-5335DE General Purpose Flag  0000 (0)\n-5335E0 Compression Method    0000 (0) 'Stored'\n-5335E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5335E6 CRC                   00000000 (0)\n-5335EA Compressed Size       00000000 (0)\n-5335EE Uncompressed Size     00000000 (0)\n-5335F2 Filename Length       006A (106)\n-5335F4 Extra Length          0009 (9)\n-5335F6 Comment Length        0000 (0)\n-5335F8 Disk Start            0000 (0)\n-5335FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5335FC Ext File Attributes   00000000 (0)\n-533600 Local Header Offset   000480F7 (295159)\n-533604 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533604: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53366E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533670   Length              0005 (5)\n-533672   Flags               01 (1) 'Modification'\n-533673   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533677 CENTRAL HEADER #171   02014B50 (33639248)\n-53367B Created Zip Spec      14 (20) '2.0'\n-53367C Created OS            00 (0) 'MS-DOS'\n-53367D Extract Zip Spec      14 (20) '2.0'\n-53367E Extract OS            00 (0) 'MS-DOS'\n-53367F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-533681 Compression Method    0000 (0) 'Stored'\n-533683 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533687 CRC                   877B2EE8 (2272997096)\n-53368B Compressed Size       0000215E (8542)\n-53368F Uncompressed Size     0000215E (8542)\n-533693 Filename Length       0080 (128)\n-533695 Extra Length          0009 (9)\n-533697 Comment Length        0000 (0)\n-533699 Disk Start            0000 (0)\n-53369B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53369D Ext File Attributes   00000000 (0)\n-5336A1 Local Header Offset   00048188 (295304)\n-5336A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5336A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533725 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533727   Length              0005 (5)\n-533729   Flags               01 (1) 'Modification'\n-53372A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53372E CENTRAL HEADER #172   02014B50 (33639248)\n-533732 Created Zip Spec      14 (20) '2.0'\n-533733 Created OS            00 (0) 'MS-DOS'\n-533734 Extract Zip Spec      14 (20) '2.0'\n-533735 Extract OS            00 (0) 'MS-DOS'\n-533736 General Purpose Flag  0000 (0)\n-533738 Compression Method    0000 (0) 'Stored'\n-53373A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53373E CRC                   00000000 (0)\n-533742 Compressed Size       00000000 (0)\n-533746 Uncompressed Size     00000000 (0)\n-53374A Filename Length       006E (110)\n-53374C Extra Length          0009 (9)\n-53374E Comment Length        0000 (0)\n-533750 Disk Start            0000 (0)\n-533752 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533754 Ext File Attributes   00000000 (0)\n-533758 Local Header Offset   0004A39D (304029)\n-53375C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53375C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5337CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5337CC   Length              0005 (5)\n-5337CE   Flags               01 (1) 'Modification'\n-5337CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5337D3 CENTRAL HEADER #173   02014B50 (33639248)\n-5337D7 Created Zip Spec      14 (20) '2.0'\n-5337D8 Created OS            00 (0) 'MS-DOS'\n-5337D9 Extract Zip Spec      14 (20) '2.0'\n-5337DA Extract OS            00 (0) 'MS-DOS'\n-5337DB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5337DD Compression Method    0000 (0) 'Stored'\n-5337DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5337E3 CRC                   E43D22D5 (3829211861)\n-5337E7 Compressed Size       0000147F (5247)\n-5337EB Uncompressed Size     0000147F (5247)\n-5337EF Filename Length       0084 (132)\n-5337F1 Extra Length          0009 (9)\n-5337F3 Comment Length        0000 (0)\n-5337F5 Disk Start            0000 (0)\n-5337F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5337F9 Ext File Attributes   00000000 (0)\n-5337FD Local Header Offset   0004A432 (304178)\n-533801 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+53327A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53327C   Length              0005 (5)\n+53327E   Flags               01 (1) 'Modification'\n+53327F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533283 CENTRAL HEADER #164   02014B50 (33639248)\n+533287 Created Zip Spec      14 (20) '2.0'\n+533288 Created OS            00 (0) 'MS-DOS'\n+533289 Extract Zip Spec      14 (20) '2.0'\n+53328A Extract OS            00 (0) 'MS-DOS'\n+53328B General Purpose Flag  0000 (0)\n+53328D Compression Method    0000 (0) 'Stored'\n+53328F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533293 CRC                   00000000 (0)\n+533297 Compressed Size       00000000 (0)\n+53329B Uncompressed Size     00000000 (0)\n+53329F Filename Length       0026 (38)\n+5332A1 Extra Length          0009 (9)\n+5332A3 Comment Length        0000 (0)\n+5332A5 Disk Start            0000 (0)\n+5332A7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5332A9 Ext File Attributes   00000000 (0)\n+5332AD Local Header Offset   000475AB (292267)\n+5332B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5332B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5332D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5332D9   Length              0005 (5)\n+5332DB   Flags               01 (1) 'Modification'\n+5332DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5332E0 CENTRAL HEADER #165   02014B50 (33639248)\n+5332E4 Created Zip Spec      14 (20) '2.0'\n+5332E5 Created OS            00 (0) 'MS-DOS'\n+5332E6 Extract Zip Spec      14 (20) '2.0'\n+5332E7 Extract OS            00 (0) 'MS-DOS'\n+5332E8 General Purpose Flag  0000 (0)\n+5332EA Compression Method    0000 (0) 'Stored'\n+5332EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5332F0 CRC                   00000000 (0)\n+5332F4 Compressed Size       00000000 (0)\n+5332F8 Uncompressed Size     00000000 (0)\n+5332FC Filename Length       002F (47)\n+5332FE Extra Length          0009 (9)\n+533300 Comment Length        0000 (0)\n+533302 Disk Start            0000 (0)\n+533304 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533306 Ext File Attributes   00000000 (0)\n+53330A Local Header Offset   000475F8 (292344)\n+53330E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53330E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53333D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53333F   Length              0005 (5)\n+533341   Flags               01 (1) 'Modification'\n+533342   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533346 CENTRAL HEADER #166   02014B50 (33639248)\n+53334A Created Zip Spec      14 (20) '2.0'\n+53334B Created OS            00 (0) 'MS-DOS'\n+53334C Extract Zip Spec      14 (20) '2.0'\n+53334D Extract OS            00 (0) 'MS-DOS'\n+53334E General Purpose Flag  0000 (0)\n+533350 Compression Method    0000 (0) 'Stored'\n+533352 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533356 CRC                   00000000 (0)\n+53335A Compressed Size       00000000 (0)\n+53335E Uncompressed Size     00000000 (0)\n+533362 Filename Length       005D (93)\n+533364 Extra Length          0009 (9)\n+533366 Comment Length        0000 (0)\n+533368 Disk Start            0000 (0)\n+53336A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53336C Ext File Attributes   00000000 (0)\n+533370 Local Header Offset   0004764E (292430)\n+533374 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533374: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5333D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5333D3   Length              0005 (5)\n+5333D5   Flags               01 (1) 'Modification'\n+5333D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5333DA CENTRAL HEADER #167   02014B50 (33639248)\n+5333DE Created Zip Spec      14 (20) '2.0'\n+5333DF Created OS            00 (0) 'MS-DOS'\n+5333E0 Extract Zip Spec      14 (20) '2.0'\n+5333E1 Extract OS            00 (0) 'MS-DOS'\n+5333E2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5333E4 Compression Method    0000 (0) 'Stored'\n+5333E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5333EA CRC                   4C048087 (1275363463)\n+5333EE Compressed Size       00000861 (2145)\n+5333F2 Uncompressed Size     00000861 (2145)\n+5333F6 Filename Length       0073 (115)\n+5333F8 Extra Length          0009 (9)\n+5333FA Comment Length        0000 (0)\n+5333FC Disk Start            0000 (0)\n+5333FE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533400 Ext File Attributes   00000000 (0)\n+533404 Local Header Offset   000476D2 (292562)\n+533408 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533408: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53347B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53347D   Length              0005 (5)\n+53347F   Flags               01 (1) 'Modification'\n+533480   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533484 CENTRAL HEADER #168   02014B50 (33639248)\n+533488 Created Zip Spec      14 (20) '2.0'\n+533489 Created OS            00 (0) 'MS-DOS'\n+53348A Extract Zip Spec      14 (20) '2.0'\n+53348B Extract OS            00 (0) 'MS-DOS'\n+53348C General Purpose Flag  0000 (0)\n+53348E Compression Method    0000 (0) 'Stored'\n+533490 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533494 CRC                   00000000 (0)\n+533498 Compressed Size       00000000 (0)\n+53349C Uncompressed Size     00000000 (0)\n+5334A0 Filename Length       002D (45)\n+5334A2 Extra Length          0009 (9)\n+5334A4 Comment Length        0000 (0)\n+5334A6 Disk Start            0000 (0)\n+5334A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5334AA Ext File Attributes   00000000 (0)\n+5334AE Local Header Offset   00047FDD (294877)\n+5334B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5334B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5334DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5334E1   Length              0005 (5)\n+5334E3   Flags               01 (1) 'Modification'\n+5334E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5334E8 CENTRAL HEADER #169   02014B50 (33639248)\n+5334EC Created Zip Spec      14 (20) '2.0'\n+5334ED Created OS            00 (0) 'MS-DOS'\n+5334EE Extract Zip Spec      14 (20) '2.0'\n+5334EF Extract OS            00 (0) 'MS-DOS'\n+5334F0 General Purpose Flag  0000 (0)\n+5334F2 Compression Method    0000 (0) 'Stored'\n+5334F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5334F8 CRC                   00000000 (0)\n+5334FC Compressed Size       00000000 (0)\n+533500 Uncompressed Size     00000000 (0)\n+533504 Filename Length       0036 (54)\n+533506 Extra Length          0009 (9)\n+533508 Comment Length        0000 (0)\n+53350A Disk Start            0000 (0)\n+53350C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53350E Ext File Attributes   00000000 (0)\n+533512 Local Header Offset   00048031 (294961)\n+533516 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533516: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53354C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53354E   Length              0005 (5)\n+533550   Flags               01 (1) 'Modification'\n+533551   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533555 CENTRAL HEADER #170   02014B50 (33639248)\n+533559 Created Zip Spec      14 (20) '2.0'\n+53355A Created OS            00 (0) 'MS-DOS'\n+53355B Extract Zip Spec      14 (20) '2.0'\n+53355C Extract OS            00 (0) 'MS-DOS'\n+53355D General Purpose Flag  0000 (0)\n+53355F Compression Method    0000 (0) 'Stored'\n+533561 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533565 CRC                   00000000 (0)\n+533569 Compressed Size       00000000 (0)\n+53356D Uncompressed Size     00000000 (0)\n+533571 Filename Length       006A (106)\n+533573 Extra Length          0009 (9)\n+533575 Comment Length        0000 (0)\n+533577 Disk Start            0000 (0)\n+533579 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53357B Ext File Attributes   00000000 (0)\n+53357F Local Header Offset   0004808E (295054)\n+533583 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533583: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5335ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5335EF   Length              0005 (5)\n+5335F1   Flags               01 (1) 'Modification'\n+5335F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5335F6 CENTRAL HEADER #171   02014B50 (33639248)\n+5335FA Created Zip Spec      14 (20) '2.0'\n+5335FB Created OS            00 (0) 'MS-DOS'\n+5335FC Extract Zip Spec      14 (20) '2.0'\n+5335FD Extract OS            00 (0) 'MS-DOS'\n+5335FE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+533600 Compression Method    0000 (0) 'Stored'\n+533602 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533606 CRC                   877B2EE8 (2272997096)\n+53360A Compressed Size       0000215E (8542)\n+53360E Uncompressed Size     0000215E (8542)\n+533612 Filename Length       0080 (128)\n+533614 Extra Length          0009 (9)\n+533616 Comment Length        0000 (0)\n+533618 Disk Start            0000 (0)\n+53361A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53361C Ext File Attributes   00000000 (0)\n+533620 Local Header Offset   0004811F (295199)\n+533624 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533624: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5336A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5336A6   Length              0005 (5)\n+5336A8   Flags               01 (1) 'Modification'\n+5336A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5336AD CENTRAL HEADER #172   02014B50 (33639248)\n+5336B1 Created Zip Spec      14 (20) '2.0'\n+5336B2 Created OS            00 (0) 'MS-DOS'\n+5336B3 Extract Zip Spec      14 (20) '2.0'\n+5336B4 Extract OS            00 (0) 'MS-DOS'\n+5336B5 General Purpose Flag  0000 (0)\n+5336B7 Compression Method    0000 (0) 'Stored'\n+5336B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5336BD CRC                   00000000 (0)\n+5336C1 Compressed Size       00000000 (0)\n+5336C5 Uncompressed Size     00000000 (0)\n+5336C9 Filename Length       006E (110)\n+5336CB Extra Length          0009 (9)\n+5336CD Comment Length        0000 (0)\n+5336CF Disk Start            0000 (0)\n+5336D1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5336D3 Ext File Attributes   00000000 (0)\n+5336D7 Local Header Offset   0004A334 (303924)\n+5336DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5336DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533749 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53374B   Length              0005 (5)\n+53374D   Flags               01 (1) 'Modification'\n+53374E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533752 CENTRAL HEADER #173   02014B50 (33639248)\n+533756 Created Zip Spec      14 (20) '2.0'\n+533757 Created OS            00 (0) 'MS-DOS'\n+533758 Extract Zip Spec      14 (20) '2.0'\n+533759 Extract OS            00 (0) 'MS-DOS'\n+53375A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53375C Compression Method    0000 (0) 'Stored'\n+53375E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533762 CRC                   E43D22D5 (3829211861)\n+533766 Compressed Size       0000147F (5247)\n+53376A Uncompressed Size     0000147F (5247)\n+53376E Filename Length       0084 (132)\n+533770 Extra Length          0009 (9)\n+533772 Comment Length        0000 (0)\n+533774 Disk Start            0000 (0)\n+533776 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533778 Ext File Attributes   00000000 (0)\n+53377C Local Header Offset   0004A3C9 (304073)\n+533780 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x533801: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x533780: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-533885 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533887   Length              0005 (5)\n-533889   Flags               01 (1) 'Modification'\n-53388A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53388E CENTRAL HEADER #174   02014B50 (33639248)\n-533892 Created Zip Spec      14 (20) '2.0'\n-533893 Created OS            00 (0) 'MS-DOS'\n-533894 Extract Zip Spec      14 (20) '2.0'\n-533895 Extract OS            00 (0) 'MS-DOS'\n-533896 General Purpose Flag  0000 (0)\n-533898 Compression Method    0000 (0) 'Stored'\n-53389A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53389E CRC                   00000000 (0)\n-5338A2 Compressed Size       00000000 (0)\n-5338A6 Uncompressed Size     00000000 (0)\n-5338AA Filename Length       0060 (96)\n-5338AC Extra Length          0009 (9)\n-5338AE Comment Length        0000 (0)\n-5338B0 Disk Start            0000 (0)\n-5338B2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5338B4 Ext File Attributes   00000000 (0)\n-5338B8 Local Header Offset   0004B96C (309612)\n-5338BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5338BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53391C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53391E   Length              0005 (5)\n-533920   Flags               01 (1) 'Modification'\n-533921   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533925 CENTRAL HEADER #175   02014B50 (33639248)\n-533929 Created Zip Spec      14 (20) '2.0'\n-53392A Created OS            00 (0) 'MS-DOS'\n-53392B Extract Zip Spec      14 (20) '2.0'\n-53392C Extract OS            00 (0) 'MS-DOS'\n-53392D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53392F Compression Method    0000 (0) 'Stored'\n-533931 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533935 CRC                   D765846F (3613754479)\n-533939 Compressed Size       00001060 (4192)\n-53393D Uncompressed Size     00001060 (4192)\n-533941 Filename Length       0076 (118)\n-533943 Extra Length          0009 (9)\n-533945 Comment Length        0000 (0)\n-533947 Disk Start            0000 (0)\n-533949 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53394B Ext File Attributes   00000000 (0)\n-53394F Local Header Offset   0004B9F3 (309747)\n-533953 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533953: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5339C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5339CB   Length              0005 (5)\n-5339CD   Flags               01 (1) 'Modification'\n-5339CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5339D2 CENTRAL HEADER #176   02014B50 (33639248)\n-5339D6 Created Zip Spec      14 (20) '2.0'\n-5339D7 Created OS            00 (0) 'MS-DOS'\n-5339D8 Extract Zip Spec      14 (20) '2.0'\n-5339D9 Extract OS            00 (0) 'MS-DOS'\n-5339DA General Purpose Flag  0000 (0)\n-5339DC Compression Method    0000 (0) 'Stored'\n-5339DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5339E2 CRC                   00000000 (0)\n-5339E6 Compressed Size       00000000 (0)\n-5339EA Uncompressed Size     00000000 (0)\n-5339EE Filename Length       0060 (96)\n-5339F0 Extra Length          0009 (9)\n-5339F2 Comment Length        0000 (0)\n-5339F4 Disk Start            0000 (0)\n-5339F6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5339F8 Ext File Attributes   00000000 (0)\n-5339FC Local Header Offset   0004CB00 (314112)\n-533A00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533A00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533A60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533A62   Length              0005 (5)\n-533A64   Flags               01 (1) 'Modification'\n-533A65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533A69 CENTRAL HEADER #177   02014B50 (33639248)\n-533A6D Created Zip Spec      14 (20) '2.0'\n-533A6E Created OS            00 (0) 'MS-DOS'\n-533A6F Extract Zip Spec      14 (20) '2.0'\n-533A70 Extract OS            00 (0) 'MS-DOS'\n-533A71 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-533A73 Compression Method    0000 (0) 'Stored'\n-533A75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533A79 CRC                   57E394F3 (1474532595)\n-533A7D Compressed Size       0000115C (4444)\n-533A81 Uncompressed Size     0000115C (4444)\n-533A85 Filename Length       0076 (118)\n-533A87 Extra Length          0009 (9)\n-533A89 Comment Length        0000 (0)\n-533A8B Disk Start            0000 (0)\n-533A8D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533A8F Ext File Attributes   00000000 (0)\n-533A93 Local Header Offset   0004CB87 (314247)\n-533A97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533A97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533B0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533B0F   Length              0005 (5)\n-533B11   Flags               01 (1) 'Modification'\n-533B12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533B16 CENTRAL HEADER #178   02014B50 (33639248)\n-533B1A Created Zip Spec      14 (20) '2.0'\n-533B1B Created OS            00 (0) 'MS-DOS'\n-533B1C Extract Zip Spec      14 (20) '2.0'\n-533B1D Extract OS            00 (0) 'MS-DOS'\n-533B1E General Purpose Flag  0000 (0)\n-533B20 Compression Method    0000 (0) 'Stored'\n-533B22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533B26 CRC                   00000000 (0)\n-533B2A Compressed Size       00000000 (0)\n-533B2E Uncompressed Size     00000000 (0)\n-533B32 Filename Length       0023 (35)\n-533B34 Extra Length          0009 (9)\n-533B36 Comment Length        0000 (0)\n-533B38 Disk Start            0000 (0)\n-533B3A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533B3C Ext File Attributes   00000000 (0)\n-533B40 Local Header Offset   0004DD90 (318864)\n-533B44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533B44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533B67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533B69   Length              0005 (5)\n-533B6B   Flags               01 (1) 'Modification'\n-533B6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533B70 CENTRAL HEADER #179   02014B50 (33639248)\n-533B74 Created Zip Spec      14 (20) '2.0'\n-533B75 Created OS            00 (0) 'MS-DOS'\n-533B76 Extract Zip Spec      14 (20) '2.0'\n-533B77 Extract OS            00 (0) 'MS-DOS'\n-533B78 General Purpose Flag  0000 (0)\n-533B7A Compression Method    0000 (0) 'Stored'\n-533B7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533B80 CRC                   00000000 (0)\n-533B84 Compressed Size       00000000 (0)\n-533B88 Uncompressed Size     00000000 (0)\n-533B8C Filename Length       002C (44)\n-533B8E Extra Length          0009 (9)\n-533B90 Comment Length        0000 (0)\n-533B92 Disk Start            0000 (0)\n-533B94 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533B96 Ext File Attributes   00000000 (0)\n-533B9A Local Header Offset   0004DDDA (318938)\n-533B9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533B9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533BCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533BCC   Length              0005 (5)\n-533BCE   Flags               01 (1) 'Modification'\n-533BCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533BD3 CENTRAL HEADER #180   02014B50 (33639248)\n-533BD7 Created Zip Spec      14 (20) '2.0'\n-533BD8 Created OS            00 (0) 'MS-DOS'\n-533BD9 Extract Zip Spec      14 (20) '2.0'\n-533BDA Extract OS            00 (0) 'MS-DOS'\n-533BDB General Purpose Flag  0000 (0)\n-533BDD Compression Method    0000 (0) 'Stored'\n-533BDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533BE3 CRC                   00000000 (0)\n-533BE7 Compressed Size       00000000 (0)\n-533BEB Uncompressed Size     00000000 (0)\n-533BEF Filename Length       005E (94)\n-533BF1 Extra Length          0009 (9)\n-533BF3 Comment Length        0000 (0)\n-533BF5 Disk Start            0000 (0)\n-533BF7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533BF9 Ext File Attributes   00000000 (0)\n-533BFD Local Header Offset   0004DE2D (319021)\n-533C01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533C01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533C5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533C61   Length              0005 (5)\n-533C63   Flags               01 (1) 'Modification'\n-533C64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533C68 CENTRAL HEADER #181   02014B50 (33639248)\n-533C6C Created Zip Spec      14 (20) '2.0'\n-533C6D Created OS            00 (0) 'MS-DOS'\n-533C6E Extract Zip Spec      14 (20) '2.0'\n-533C6F Extract OS            00 (0) 'MS-DOS'\n-533C70 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-533C72 Compression Method    0000 (0) 'Stored'\n-533C74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533C78 CRC                   990AFEE4 (2567634660)\n-533C7C Compressed Size       00000807 (2055)\n-533C80 Uncompressed Size     00000807 (2055)\n-533C84 Filename Length       0074 (116)\n-533C86 Extra Length          0009 (9)\n-533C88 Comment Length        0000 (0)\n-533C8A Disk Start            0000 (0)\n-533C8C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533C8E Ext File Attributes   00000000 (0)\n-533C92 Local Header Offset   0004DEB2 (319154)\n-533C96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533C96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533D0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533D0C   Length              0005 (5)\n-533D0E   Flags               01 (1) 'Modification'\n-533D0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533D13 CENTRAL HEADER #182   02014B50 (33639248)\n-533D17 Created Zip Spec      14 (20) '2.0'\n-533D18 Created OS            00 (0) 'MS-DOS'\n-533D19 Extract Zip Spec      14 (20) '2.0'\n-533D1A Extract OS            00 (0) 'MS-DOS'\n-533D1B General Purpose Flag  0000 (0)\n-533D1D Compression Method    0000 (0) 'Stored'\n-533D1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533D23 CRC                   00000000 (0)\n-533D27 Compressed Size       00000000 (0)\n-533D2B Uncompressed Size     00000000 (0)\n-533D2F Filename Length       0028 (40)\n-533D31 Extra Length          0009 (9)\n-533D33 Comment Length        0000 (0)\n-533D35 Disk Start            0000 (0)\n-533D37 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533D39 Ext File Attributes   00000000 (0)\n-533D3D Local Header Offset   0004E764 (321380)\n-533D41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533D41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533D69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533D6B   Length              0005 (5)\n-533D6D   Flags               01 (1) 'Modification'\n-533D6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533D72 CENTRAL HEADER #183   02014B50 (33639248)\n-533D76 Created Zip Spec      14 (20) '2.0'\n-533D77 Created OS            00 (0) 'MS-DOS'\n-533D78 Extract Zip Spec      14 (20) '2.0'\n-533D79 Extract OS            00 (0) 'MS-DOS'\n-533D7A General Purpose Flag  0000 (0)\n-533D7C Compression Method    0000 (0) 'Stored'\n-533D7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533D82 CRC                   00000000 (0)\n-533D86 Compressed Size       00000000 (0)\n-533D8A Uncompressed Size     00000000 (0)\n-533D8E Filename Length       0031 (49)\n-533D90 Extra Length          0009 (9)\n-533D92 Comment Length        0000 (0)\n-533D94 Disk Start            0000 (0)\n-533D96 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533D98 Ext File Attributes   00000000 (0)\n-533D9C Local Header Offset   0004E7B3 (321459)\n-533DA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533DA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533DD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533DD3   Length              0005 (5)\n-533DD5   Flags               01 (1) 'Modification'\n-533DD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533DDA CENTRAL HEADER #184   02014B50 (33639248)\n-533DDE Created Zip Spec      14 (20) '2.0'\n-533DDF Created OS            00 (0) 'MS-DOS'\n-533DE0 Extract Zip Spec      14 (20) '2.0'\n-533DE1 Extract OS            00 (0) 'MS-DOS'\n-533DE2 General Purpose Flag  0000 (0)\n-533DE4 Compression Method    0000 (0) 'Stored'\n-533DE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533DEA CRC                   00000000 (0)\n-533DEE Compressed Size       00000000 (0)\n-533DF2 Uncompressed Size     00000000 (0)\n-533DF6 Filename Length       0070 (112)\n-533DF8 Extra Length          0009 (9)\n-533DFA Comment Length        0000 (0)\n-533DFC Disk Start            0000 (0)\n-533DFE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533E00 Ext File Attributes   00000000 (0)\n-533E04 Local Header Offset   0004E80B (321547)\n-533E08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533E08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533E78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533E7A   Length              0005 (5)\n-533E7C   Flags               01 (1) 'Modification'\n-533E7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533E81 CENTRAL HEADER #185   02014B50 (33639248)\n-533E85 Created Zip Spec      14 (20) '2.0'\n-533E86 Created OS            00 (0) 'MS-DOS'\n-533E87 Extract Zip Spec      14 (20) '2.0'\n-533E88 Extract OS            00 (0) 'MS-DOS'\n-533E89 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-533E8B Compression Method    0000 (0) 'Stored'\n-533E8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533E91 CRC                   F6367964 (4130765156)\n-533E95 Compressed Size       00005103 (20739)\n-533E99 Uncompressed Size     00005103 (20739)\n-533E9D Filename Length       0086 (134)\n-533E9F Extra Length          0009 (9)\n-533EA1 Comment Length        0000 (0)\n-533EA3 Disk Start            0000 (0)\n-533EA5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533EA7 Ext File Attributes   00000000 (0)\n-533EAB Local Header Offset   0004E8A2 (321698)\n-533EAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+533804 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533806   Length              0005 (5)\n+533808   Flags               01 (1) 'Modification'\n+533809   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53380D CENTRAL HEADER #174   02014B50 (33639248)\n+533811 Created Zip Spec      14 (20) '2.0'\n+533812 Created OS            00 (0) 'MS-DOS'\n+533813 Extract Zip Spec      14 (20) '2.0'\n+533814 Extract OS            00 (0) 'MS-DOS'\n+533815 General Purpose Flag  0000 (0)\n+533817 Compression Method    0000 (0) 'Stored'\n+533819 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53381D CRC                   00000000 (0)\n+533821 Compressed Size       00000000 (0)\n+533825 Uncompressed Size     00000000 (0)\n+533829 Filename Length       0060 (96)\n+53382B Extra Length          0009 (9)\n+53382D Comment Length        0000 (0)\n+53382F Disk Start            0000 (0)\n+533831 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533833 Ext File Attributes   00000000 (0)\n+533837 Local Header Offset   0004B903 (309507)\n+53383B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53383B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53389B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53389D   Length              0005 (5)\n+53389F   Flags               01 (1) 'Modification'\n+5338A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5338A4 CENTRAL HEADER #175   02014B50 (33639248)\n+5338A8 Created Zip Spec      14 (20) '2.0'\n+5338A9 Created OS            00 (0) 'MS-DOS'\n+5338AA Extract Zip Spec      14 (20) '2.0'\n+5338AB Extract OS            00 (0) 'MS-DOS'\n+5338AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5338AE Compression Method    0000 (0) 'Stored'\n+5338B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5338B4 CRC                   D765846F (3613754479)\n+5338B8 Compressed Size       00001060 (4192)\n+5338BC Uncompressed Size     00001060 (4192)\n+5338C0 Filename Length       0076 (118)\n+5338C2 Extra Length          0009 (9)\n+5338C4 Comment Length        0000 (0)\n+5338C6 Disk Start            0000 (0)\n+5338C8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5338CA Ext File Attributes   00000000 (0)\n+5338CE Local Header Offset   0004B98A (309642)\n+5338D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5338D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533948 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53394A   Length              0005 (5)\n+53394C   Flags               01 (1) 'Modification'\n+53394D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533951 CENTRAL HEADER #176   02014B50 (33639248)\n+533955 Created Zip Spec      14 (20) '2.0'\n+533956 Created OS            00 (0) 'MS-DOS'\n+533957 Extract Zip Spec      14 (20) '2.0'\n+533958 Extract OS            00 (0) 'MS-DOS'\n+533959 General Purpose Flag  0000 (0)\n+53395B Compression Method    0000 (0) 'Stored'\n+53395D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533961 CRC                   00000000 (0)\n+533965 Compressed Size       00000000 (0)\n+533969 Uncompressed Size     00000000 (0)\n+53396D Filename Length       0060 (96)\n+53396F Extra Length          0009 (9)\n+533971 Comment Length        0000 (0)\n+533973 Disk Start            0000 (0)\n+533975 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533977 Ext File Attributes   00000000 (0)\n+53397B Local Header Offset   0004CA97 (314007)\n+53397F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53397F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5339DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5339E1   Length              0005 (5)\n+5339E3   Flags               01 (1) 'Modification'\n+5339E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5339E8 CENTRAL HEADER #177   02014B50 (33639248)\n+5339EC Created Zip Spec      14 (20) '2.0'\n+5339ED Created OS            00 (0) 'MS-DOS'\n+5339EE Extract Zip Spec      14 (20) '2.0'\n+5339EF Extract OS            00 (0) 'MS-DOS'\n+5339F0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5339F2 Compression Method    0000 (0) 'Stored'\n+5339F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5339F8 CRC                   57E394F3 (1474532595)\n+5339FC Compressed Size       0000115C (4444)\n+533A00 Uncompressed Size     0000115C (4444)\n+533A04 Filename Length       0076 (118)\n+533A06 Extra Length          0009 (9)\n+533A08 Comment Length        0000 (0)\n+533A0A Disk Start            0000 (0)\n+533A0C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533A0E Ext File Attributes   00000000 (0)\n+533A12 Local Header Offset   0004CB1E (314142)\n+533A16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533A16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533A8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533A8E   Length              0005 (5)\n+533A90   Flags               01 (1) 'Modification'\n+533A91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533A95 CENTRAL HEADER #178   02014B50 (33639248)\n+533A99 Created Zip Spec      14 (20) '2.0'\n+533A9A Created OS            00 (0) 'MS-DOS'\n+533A9B Extract Zip Spec      14 (20) '2.0'\n+533A9C Extract OS            00 (0) 'MS-DOS'\n+533A9D General Purpose Flag  0000 (0)\n+533A9F Compression Method    0000 (0) 'Stored'\n+533AA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533AA5 CRC                   00000000 (0)\n+533AA9 Compressed Size       00000000 (0)\n+533AAD Uncompressed Size     00000000 (0)\n+533AB1 Filename Length       0023 (35)\n+533AB3 Extra Length          0009 (9)\n+533AB5 Comment Length        0000 (0)\n+533AB7 Disk Start            0000 (0)\n+533AB9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533ABB Ext File Attributes   00000000 (0)\n+533ABF Local Header Offset   0004DD27 (318759)\n+533AC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533AC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533AE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533AE8   Length              0005 (5)\n+533AEA   Flags               01 (1) 'Modification'\n+533AEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533AEF CENTRAL HEADER #179   02014B50 (33639248)\n+533AF3 Created Zip Spec      14 (20) '2.0'\n+533AF4 Created OS            00 (0) 'MS-DOS'\n+533AF5 Extract Zip Spec      14 (20) '2.0'\n+533AF6 Extract OS            00 (0) 'MS-DOS'\n+533AF7 General Purpose Flag  0000 (0)\n+533AF9 Compression Method    0000 (0) 'Stored'\n+533AFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533AFF CRC                   00000000 (0)\n+533B03 Compressed Size       00000000 (0)\n+533B07 Uncompressed Size     00000000 (0)\n+533B0B Filename Length       002C (44)\n+533B0D Extra Length          0009 (9)\n+533B0F Comment Length        0000 (0)\n+533B11 Disk Start            0000 (0)\n+533B13 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533B15 Ext File Attributes   00000000 (0)\n+533B19 Local Header Offset   0004DD71 (318833)\n+533B1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533B1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533B49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533B4B   Length              0005 (5)\n+533B4D   Flags               01 (1) 'Modification'\n+533B4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533B52 CENTRAL HEADER #180   02014B50 (33639248)\n+533B56 Created Zip Spec      14 (20) '2.0'\n+533B57 Created OS            00 (0) 'MS-DOS'\n+533B58 Extract Zip Spec      14 (20) '2.0'\n+533B59 Extract OS            00 (0) 'MS-DOS'\n+533B5A General Purpose Flag  0000 (0)\n+533B5C Compression Method    0000 (0) 'Stored'\n+533B5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533B62 CRC                   00000000 (0)\n+533B66 Compressed Size       00000000 (0)\n+533B6A Uncompressed Size     00000000 (0)\n+533B6E Filename Length       005E (94)\n+533B70 Extra Length          0009 (9)\n+533B72 Comment Length        0000 (0)\n+533B74 Disk Start            0000 (0)\n+533B76 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533B78 Ext File Attributes   00000000 (0)\n+533B7C Local Header Offset   0004DDC4 (318916)\n+533B80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533B80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533BDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533BE0   Length              0005 (5)\n+533BE2   Flags               01 (1) 'Modification'\n+533BE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533BE7 CENTRAL HEADER #181   02014B50 (33639248)\n+533BEB Created Zip Spec      14 (20) '2.0'\n+533BEC Created OS            00 (0) 'MS-DOS'\n+533BED Extract Zip Spec      14 (20) '2.0'\n+533BEE Extract OS            00 (0) 'MS-DOS'\n+533BEF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+533BF1 Compression Method    0000 (0) 'Stored'\n+533BF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533BF7 CRC                   990AFEE4 (2567634660)\n+533BFB Compressed Size       00000807 (2055)\n+533BFF Uncompressed Size     00000807 (2055)\n+533C03 Filename Length       0074 (116)\n+533C05 Extra Length          0009 (9)\n+533C07 Comment Length        0000 (0)\n+533C09 Disk Start            0000 (0)\n+533C0B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533C0D Ext File Attributes   00000000 (0)\n+533C11 Local Header Offset   0004DE49 (319049)\n+533C15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533C15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533C89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533C8B   Length              0005 (5)\n+533C8D   Flags               01 (1) 'Modification'\n+533C8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533C92 CENTRAL HEADER #182   02014B50 (33639248)\n+533C96 Created Zip Spec      14 (20) '2.0'\n+533C97 Created OS            00 (0) 'MS-DOS'\n+533C98 Extract Zip Spec      14 (20) '2.0'\n+533C99 Extract OS            00 (0) 'MS-DOS'\n+533C9A General Purpose Flag  0000 (0)\n+533C9C Compression Method    0000 (0) 'Stored'\n+533C9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533CA2 CRC                   00000000 (0)\n+533CA6 Compressed Size       00000000 (0)\n+533CAA Uncompressed Size     00000000 (0)\n+533CAE Filename Length       0028 (40)\n+533CB0 Extra Length          0009 (9)\n+533CB2 Comment Length        0000 (0)\n+533CB4 Disk Start            0000 (0)\n+533CB6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533CB8 Ext File Attributes   00000000 (0)\n+533CBC Local Header Offset   0004E6FB (321275)\n+533CC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533CC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533CE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533CEA   Length              0005 (5)\n+533CEC   Flags               01 (1) 'Modification'\n+533CED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533CF1 CENTRAL HEADER #183   02014B50 (33639248)\n+533CF5 Created Zip Spec      14 (20) '2.0'\n+533CF6 Created OS            00 (0) 'MS-DOS'\n+533CF7 Extract Zip Spec      14 (20) '2.0'\n+533CF8 Extract OS            00 (0) 'MS-DOS'\n+533CF9 General Purpose Flag  0000 (0)\n+533CFB Compression Method    0000 (0) 'Stored'\n+533CFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533D01 CRC                   00000000 (0)\n+533D05 Compressed Size       00000000 (0)\n+533D09 Uncompressed Size     00000000 (0)\n+533D0D Filename Length       0031 (49)\n+533D0F Extra Length          0009 (9)\n+533D11 Comment Length        0000 (0)\n+533D13 Disk Start            0000 (0)\n+533D15 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533D17 Ext File Attributes   00000000 (0)\n+533D1B Local Header Offset   0004E74A (321354)\n+533D1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533D1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533D50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533D52   Length              0005 (5)\n+533D54   Flags               01 (1) 'Modification'\n+533D55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533D59 CENTRAL HEADER #184   02014B50 (33639248)\n+533D5D Created Zip Spec      14 (20) '2.0'\n+533D5E Created OS            00 (0) 'MS-DOS'\n+533D5F Extract Zip Spec      14 (20) '2.0'\n+533D60 Extract OS            00 (0) 'MS-DOS'\n+533D61 General Purpose Flag  0000 (0)\n+533D63 Compression Method    0000 (0) 'Stored'\n+533D65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533D69 CRC                   00000000 (0)\n+533D6D Compressed Size       00000000 (0)\n+533D71 Uncompressed Size     00000000 (0)\n+533D75 Filename Length       0070 (112)\n+533D77 Extra Length          0009 (9)\n+533D79 Comment Length        0000 (0)\n+533D7B Disk Start            0000 (0)\n+533D7D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533D7F Ext File Attributes   00000000 (0)\n+533D83 Local Header Offset   0004E7A2 (321442)\n+533D87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533D87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533DF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533DF9   Length              0005 (5)\n+533DFB   Flags               01 (1) 'Modification'\n+533DFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533E00 CENTRAL HEADER #185   02014B50 (33639248)\n+533E04 Created Zip Spec      14 (20) '2.0'\n+533E05 Created OS            00 (0) 'MS-DOS'\n+533E06 Extract Zip Spec      14 (20) '2.0'\n+533E07 Extract OS            00 (0) 'MS-DOS'\n+533E08 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+533E0A Compression Method    0000 (0) 'Stored'\n+533E0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533E10 CRC                   F6367964 (4130765156)\n+533E14 Compressed Size       00005103 (20739)\n+533E18 Uncompressed Size     00005103 (20739)\n+533E1C Filename Length       0086 (134)\n+533E1E Extra Length          0009 (9)\n+533E20 Comment Length        0000 (0)\n+533E22 Disk Start            0000 (0)\n+533E24 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533E26 Ext File Attributes   00000000 (0)\n+533E2A Local Header Offset   0004E839 (321593)\n+533E2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x533EAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x533E2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-533F35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533F37   Length              0005 (5)\n-533F39   Flags               01 (1) 'Modification'\n-533F3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533F3E CENTRAL HEADER #186   02014B50 (33639248)\n-533F42 Created Zip Spec      14 (20) '2.0'\n-533F43 Created OS            00 (0) 'MS-DOS'\n-533F44 Extract Zip Spec      14 (20) '2.0'\n-533F45 Extract OS            00 (0) 'MS-DOS'\n-533F46 General Purpose Flag  0000 (0)\n-533F48 Compression Method    0000 (0) 'Stored'\n-533F4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533F4E CRC                   00000000 (0)\n-533F52 Compressed Size       00000000 (0)\n-533F56 Uncompressed Size     00000000 (0)\n-533F5A Filename Length       006A (106)\n-533F5C Extra Length          0009 (9)\n-533F5E Comment Length        0000 (0)\n-533F60 Disk Start            0000 (0)\n-533F62 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-533F64 Ext File Attributes   00000000 (0)\n-533F68 Local Header Offset   00053A62 (342626)\n-533F6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533F6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533FD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533FD8   Length              0005 (5)\n-533FDA   Flags               01 (1) 'Modification'\n-533FDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533FDF CENTRAL HEADER #187   02014B50 (33639248)\n-533FE3 Created Zip Spec      14 (20) '2.0'\n-533FE4 Created OS            00 (0) 'MS-DOS'\n-533FE5 Extract Zip Spec      14 (20) '2.0'\n-533FE6 Extract OS            00 (0) 'MS-DOS'\n-533FE7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-533FE9 Compression Method    0000 (0) 'Stored'\n-533FEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533FEF CRC                   9EC902FD (2663973629)\n-533FF3 Compressed Size       00003DB9 (15801)\n-533FF7 Uncompressed Size     00003DB9 (15801)\n-533FFB Filename Length       0080 (128)\n-533FFD Extra Length          0009 (9)\n-533FFF Comment Length        0000 (0)\n-534001 Disk Start            0000 (0)\n-534003 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534005 Ext File Attributes   00000000 (0)\n-534009 Local Header Offset   00053AF3 (342771)\n-53400D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53400D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53408D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53408F   Length              0005 (5)\n-534091   Flags               01 (1) 'Modification'\n-534092   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534096 CENTRAL HEADER #188   02014B50 (33639248)\n-53409A Created Zip Spec      14 (20) '2.0'\n-53409B Created OS            00 (0) 'MS-DOS'\n-53409C Extract Zip Spec      14 (20) '2.0'\n-53409D Extract OS            00 (0) 'MS-DOS'\n-53409E General Purpose Flag  0000 (0)\n-5340A0 Compression Method    0000 (0) 'Stored'\n-5340A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5340A6 CRC                   00000000 (0)\n-5340AA Compressed Size       00000000 (0)\n-5340AE Uncompressed Size     00000000 (0)\n-5340B2 Filename Length       0070 (112)\n-5340B4 Extra Length          0009 (9)\n-5340B6 Comment Length        0000 (0)\n-5340B8 Disk Start            0000 (0)\n-5340BA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5340BC Ext File Attributes   00000000 (0)\n-5340C0 Local Header Offset   00057963 (358755)\n-5340C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5340C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534134 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534136   Length              0005 (5)\n-534138   Flags               01 (1) 'Modification'\n-534139   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53413D CENTRAL HEADER #189   02014B50 (33639248)\n-534141 Created Zip Spec      14 (20) '2.0'\n-534142 Created OS            00 (0) 'MS-DOS'\n-534143 Extract Zip Spec      14 (20) '2.0'\n-534144 Extract OS            00 (0) 'MS-DOS'\n-534145 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534147 Compression Method    0000 (0) 'Stored'\n-534149 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53414D CRC                   AD150348 (2903835464)\n-534151 Compressed Size       00009C3D (39997)\n-534155 Uncompressed Size     00009C3D (39997)\n-534159 Filename Length       0086 (134)\n-53415B Extra Length          0009 (9)\n-53415D Comment Length        0000 (0)\n-53415F Disk Start            0000 (0)\n-534161 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534163 Ext File Attributes   00000000 (0)\n-534167 Local Header Offset   000579FA (358906)\n-53416B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+533EB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533EB6   Length              0005 (5)\n+533EB8   Flags               01 (1) 'Modification'\n+533EB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533EBD CENTRAL HEADER #186   02014B50 (33639248)\n+533EC1 Created Zip Spec      14 (20) '2.0'\n+533EC2 Created OS            00 (0) 'MS-DOS'\n+533EC3 Extract Zip Spec      14 (20) '2.0'\n+533EC4 Extract OS            00 (0) 'MS-DOS'\n+533EC5 General Purpose Flag  0000 (0)\n+533EC7 Compression Method    0000 (0) 'Stored'\n+533EC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533ECD CRC                   00000000 (0)\n+533ED1 Compressed Size       00000000 (0)\n+533ED5 Uncompressed Size     00000000 (0)\n+533ED9 Filename Length       006A (106)\n+533EDB Extra Length          0009 (9)\n+533EDD Comment Length        0000 (0)\n+533EDF Disk Start            0000 (0)\n+533EE1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533EE3 Ext File Attributes   00000000 (0)\n+533EE7 Local Header Offset   000539F9 (342521)\n+533EEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533EEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+533F55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+533F57   Length              0005 (5)\n+533F59   Flags               01 (1) 'Modification'\n+533F5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+533F5E CENTRAL HEADER #187   02014B50 (33639248)\n+533F62 Created Zip Spec      14 (20) '2.0'\n+533F63 Created OS            00 (0) 'MS-DOS'\n+533F64 Extract Zip Spec      14 (20) '2.0'\n+533F65 Extract OS            00 (0) 'MS-DOS'\n+533F66 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+533F68 Compression Method    0000 (0) 'Stored'\n+533F6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+533F6E CRC                   9EC902FD (2663973629)\n+533F72 Compressed Size       00003DB9 (15801)\n+533F76 Uncompressed Size     00003DB9 (15801)\n+533F7A Filename Length       0080 (128)\n+533F7C Extra Length          0009 (9)\n+533F7E Comment Length        0000 (0)\n+533F80 Disk Start            0000 (0)\n+533F82 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+533F84 Ext File Attributes   00000000 (0)\n+533F88 Local Header Offset   00053A8A (342666)\n+533F8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x533F8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53400C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53400E   Length              0005 (5)\n+534010   Flags               01 (1) 'Modification'\n+534011   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534015 CENTRAL HEADER #188   02014B50 (33639248)\n+534019 Created Zip Spec      14 (20) '2.0'\n+53401A Created OS            00 (0) 'MS-DOS'\n+53401B Extract Zip Spec      14 (20) '2.0'\n+53401C Extract OS            00 (0) 'MS-DOS'\n+53401D General Purpose Flag  0000 (0)\n+53401F Compression Method    0000 (0) 'Stored'\n+534021 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534025 CRC                   00000000 (0)\n+534029 Compressed Size       00000000 (0)\n+53402D Uncompressed Size     00000000 (0)\n+534031 Filename Length       0070 (112)\n+534033 Extra Length          0009 (9)\n+534035 Comment Length        0000 (0)\n+534037 Disk Start            0000 (0)\n+534039 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53403B Ext File Attributes   00000000 (0)\n+53403F Local Header Offset   000578FA (358650)\n+534043 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534043: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5340B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5340B5   Length              0005 (5)\n+5340B7   Flags               01 (1) 'Modification'\n+5340B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5340BC CENTRAL HEADER #189   02014B50 (33639248)\n+5340C0 Created Zip Spec      14 (20) '2.0'\n+5340C1 Created OS            00 (0) 'MS-DOS'\n+5340C2 Extract Zip Spec      14 (20) '2.0'\n+5340C3 Extract OS            00 (0) 'MS-DOS'\n+5340C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5340C6 Compression Method    0000 (0) 'Stored'\n+5340C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5340CC CRC                   AD150348 (2903835464)\n+5340D0 Compressed Size       00009C3D (39997)\n+5340D4 Uncompressed Size     00009C3D (39997)\n+5340D8 Filename Length       0086 (134)\n+5340DA Extra Length          0009 (9)\n+5340DC Comment Length        0000 (0)\n+5340DE Disk Start            0000 (0)\n+5340E0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5340E2 Ext File Attributes   00000000 (0)\n+5340E6 Local Header Offset   00057991 (358801)\n+5340EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x53416B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5340EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5341F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5341F3   Length              0005 (5)\n-5341F5   Flags               01 (1) 'Modification'\n-5341F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5341FA CENTRAL HEADER #190   02014B50 (33639248)\n-5341FE Created Zip Spec      14 (20) '2.0'\n-5341FF Created OS            00 (0) 'MS-DOS'\n-534200 Extract Zip Spec      14 (20) '2.0'\n-534201 Extract OS            00 (0) 'MS-DOS'\n-534202 General Purpose Flag  0000 (0)\n-534204 Compression Method    0000 (0) 'Stored'\n-534206 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53420A CRC                   00000000 (0)\n-53420E Compressed Size       00000000 (0)\n-534212 Uncompressed Size     00000000 (0)\n-534216 Filename Length       006A (106)\n-534218 Extra Length          0009 (9)\n-53421A Comment Length        0000 (0)\n-53421C Disk Start            0000 (0)\n-53421E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534220 Ext File Attributes   00000000 (0)\n-534224 Local Header Offset   000616F4 (399092)\n-534228 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534228: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534292 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534294   Length              0005 (5)\n-534296   Flags               01 (1) 'Modification'\n-534297   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53429B CENTRAL HEADER #191   02014B50 (33639248)\n-53429F Created Zip Spec      14 (20) '2.0'\n-5342A0 Created OS            00 (0) 'MS-DOS'\n-5342A1 Extract Zip Spec      14 (20) '2.0'\n-5342A2 Extract OS            00 (0) 'MS-DOS'\n-5342A3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5342A5 Compression Method    0000 (0) 'Stored'\n-5342A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5342AB CRC                   8BF94713 (2348369683)\n-5342AF Compressed Size       00002C4C (11340)\n-5342B3 Uncompressed Size     00002C4C (11340)\n-5342B7 Filename Length       0080 (128)\n-5342B9 Extra Length          0009 (9)\n-5342BB Comment Length        0000 (0)\n-5342BD Disk Start            0000 (0)\n-5342BF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5342C1 Ext File Attributes   00000000 (0)\n-5342C5 Local Header Offset   00061785 (399237)\n-5342C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5342C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534349 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53434B   Length              0005 (5)\n-53434D   Flags               01 (1) 'Modification'\n-53434E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534352 CENTRAL HEADER #192   02014B50 (33639248)\n-534356 Created Zip Spec      14 (20) '2.0'\n-534357 Created OS            00 (0) 'MS-DOS'\n-534358 Extract Zip Spec      14 (20) '2.0'\n-534359 Extract OS            00 (0) 'MS-DOS'\n-53435A General Purpose Flag  0000 (0)\n-53435C Compression Method    0000 (0) 'Stored'\n-53435E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534362 CRC                   00000000 (0)\n-534366 Compressed Size       00000000 (0)\n-53436A Uncompressed Size     00000000 (0)\n-53436E Filename Length       002E (46)\n-534370 Extra Length          0009 (9)\n-534372 Comment Length        0000 (0)\n-534374 Disk Start            0000 (0)\n-534376 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534378 Ext File Attributes   00000000 (0)\n-53437C Local Header Offset   00064488 (410760)\n-534380 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534380: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5343AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5343B0   Length              0005 (5)\n-5343B2   Flags               01 (1) 'Modification'\n-5343B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5343B7 CENTRAL HEADER #193   02014B50 (33639248)\n-5343BB Created Zip Spec      14 (20) '2.0'\n-5343BC Created OS            00 (0) 'MS-DOS'\n-5343BD Extract Zip Spec      14 (20) '2.0'\n-5343BE Extract OS            00 (0) 'MS-DOS'\n-5343BF General Purpose Flag  0000 (0)\n-5343C1 Compression Method    0000 (0) 'Stored'\n-5343C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5343C7 CRC                   00000000 (0)\n-5343CB Compressed Size       00000000 (0)\n-5343CF Uncompressed Size     00000000 (0)\n-5343D3 Filename Length       0037 (55)\n-5343D5 Extra Length          0009 (9)\n-5343D7 Comment Length        0000 (0)\n-5343D9 Disk Start            0000 (0)\n-5343DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5343DD Ext File Attributes   00000000 (0)\n-5343E1 Local Header Offset   000644DD (410845)\n-5343E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5343E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53441C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53441E   Length              0005 (5)\n-534420   Flags               01 (1) 'Modification'\n-534421   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534425 CENTRAL HEADER #194   02014B50 (33639248)\n-534429 Created Zip Spec      14 (20) '2.0'\n-53442A Created OS            00 (0) 'MS-DOS'\n-53442B Extract Zip Spec      14 (20) '2.0'\n-53442C Extract OS            00 (0) 'MS-DOS'\n-53442D General Purpose Flag  0000 (0)\n-53442F Compression Method    0000 (0) 'Stored'\n-534431 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534435 CRC                   00000000 (0)\n-534439 Compressed Size       00000000 (0)\n-53443D Uncompressed Size     00000000 (0)\n-534441 Filename Length       0060 (96)\n-534443 Extra Length          0009 (9)\n-534445 Comment Length        0000 (0)\n-534447 Disk Start            0000 (0)\n-534449 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53444B Ext File Attributes   00000000 (0)\n-53444F Local Header Offset   0006453B (410939)\n-534453 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534453: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5344B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5344B5   Length              0005 (5)\n-5344B7   Flags               01 (1) 'Modification'\n-5344B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5344BC CENTRAL HEADER #195   02014B50 (33639248)\n-5344C0 Created Zip Spec      14 (20) '2.0'\n-5344C1 Created OS            00 (0) 'MS-DOS'\n-5344C2 Extract Zip Spec      14 (20) '2.0'\n-5344C3 Extract OS            00 (0) 'MS-DOS'\n-5344C4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5344C6 Compression Method    0000 (0) 'Stored'\n-5344C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5344CC CRC                   42E654D4 (1122391252)\n-5344D0 Compressed Size       00000EFA (3834)\n-5344D4 Uncompressed Size     00000EFA (3834)\n-5344D8 Filename Length       0076 (118)\n-5344DA Extra Length          0009 (9)\n-5344DC Comment Length        0000 (0)\n-5344DE Disk Start            0000 (0)\n-5344E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5344E2 Ext File Attributes   00000000 (0)\n-5344E6 Local Header Offset   000645C2 (411074)\n-5344EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5344EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534560 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534562   Length              0005 (5)\n-534564   Flags               01 (1) 'Modification'\n-534565   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534569 CENTRAL HEADER #196   02014B50 (33639248)\n-53456D Created Zip Spec      14 (20) '2.0'\n-53456E Created OS            00 (0) 'MS-DOS'\n-53456F Extract Zip Spec      14 (20) '2.0'\n-534570 Extract OS            00 (0) 'MS-DOS'\n-534571 General Purpose Flag  0000 (0)\n-534573 Compression Method    0000 (0) 'Stored'\n-534575 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534579 CRC                   00000000 (0)\n-53457D Compressed Size       00000000 (0)\n-534581 Uncompressed Size     00000000 (0)\n-534585 Filename Length       0066 (102)\n-534587 Extra Length          0009 (9)\n-534589 Comment Length        0000 (0)\n-53458B Disk Start            0000 (0)\n-53458D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53458F Ext File Attributes   00000000 (0)\n-534593 Local Header Offset   00065569 (415081)\n-534597 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534597: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5345FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5345FF   Length              0005 (5)\n-534601   Flags               01 (1) 'Modification'\n-534602   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534606 CENTRAL HEADER #197   02014B50 (33639248)\n-53460A Created Zip Spec      14 (20) '2.0'\n-53460B Created OS            00 (0) 'MS-DOS'\n-53460C Extract Zip Spec      14 (20) '2.0'\n-53460D Extract OS            00 (0) 'MS-DOS'\n-53460E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534610 Compression Method    0000 (0) 'Stored'\n-534612 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534616 CRC                   51B4F745 (1370814277)\n-53461A Compressed Size       000016D7 (5847)\n-53461E Uncompressed Size     000016D7 (5847)\n-534622 Filename Length       007C (124)\n-534624 Extra Length          0009 (9)\n-534626 Comment Length        0000 (0)\n-534628 Disk Start            0000 (0)\n-53462A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53462C Ext File Attributes   00000000 (0)\n-534630 Local Header Offset   000655F6 (415222)\n-534634 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534634: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5346B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5346B2   Length              0005 (5)\n-5346B4   Flags               01 (1) 'Modification'\n-5346B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5346B9 CENTRAL HEADER #198   02014B50 (33639248)\n-5346BD Created Zip Spec      14 (20) '2.0'\n-5346BE Created OS            00 (0) 'MS-DOS'\n-5346BF Extract Zip Spec      14 (20) '2.0'\n-5346C0 Extract OS            00 (0) 'MS-DOS'\n-5346C1 General Purpose Flag  0000 (0)\n-5346C3 Compression Method    0000 (0) 'Stored'\n-5346C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5346C9 CRC                   00000000 (0)\n-5346CD Compressed Size       00000000 (0)\n-5346D1 Uncompressed Size     00000000 (0)\n-5346D5 Filename Length       0026 (38)\n-5346D7 Extra Length          0009 (9)\n-5346D9 Comment Length        0000 (0)\n-5346DB Disk Start            0000 (0)\n-5346DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5346DF Ext File Attributes   00000000 (0)\n-5346E3 Local Header Offset   00066D80 (421248)\n-5346E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5346E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53470D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53470F   Length              0005 (5)\n-534711   Flags               01 (1) 'Modification'\n-534712   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534716 CENTRAL HEADER #199   02014B50 (33639248)\n-53471A Created Zip Spec      14 (20) '2.0'\n-53471B Created OS            00 (0) 'MS-DOS'\n-53471C Extract Zip Spec      14 (20) '2.0'\n-53471D Extract OS            00 (0) 'MS-DOS'\n-53471E General Purpose Flag  0000 (0)\n-534720 Compression Method    0000 (0) 'Stored'\n-534722 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534726 CRC                   00000000 (0)\n-53472A Compressed Size       00000000 (0)\n-53472E Uncompressed Size     00000000 (0)\n-534732 Filename Length       002F (47)\n-534734 Extra Length          0009 (9)\n-534736 Comment Length        0000 (0)\n-534738 Disk Start            0000 (0)\n-53473A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53473C Ext File Attributes   00000000 (0)\n-534740 Local Header Offset   00066DCD (421325)\n-534744 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534744: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534773 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534775   Length              0005 (5)\n-534777   Flags               01 (1) 'Modification'\n-534778   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53477C CENTRAL HEADER #200   02014B50 (33639248)\n-534780 Created Zip Spec      14 (20) '2.0'\n-534781 Created OS            00 (0) 'MS-DOS'\n-534782 Extract Zip Spec      14 (20) '2.0'\n-534783 Extract OS            00 (0) 'MS-DOS'\n-534784 General Purpose Flag  0000 (0)\n-534786 Compression Method    0000 (0) 'Stored'\n-534788 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53478C CRC                   00000000 (0)\n-534790 Compressed Size       00000000 (0)\n-534794 Uncompressed Size     00000000 (0)\n-534798 Filename Length       005E (94)\n-53479A Extra Length          0009 (9)\n-53479C Comment Length        0000 (0)\n-53479E Disk Start            0000 (0)\n-5347A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5347A2 Ext File Attributes   00000000 (0)\n-5347A6 Local Header Offset   00066E23 (421411)\n-5347AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5347AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534808 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53480A   Length              0005 (5)\n-53480C   Flags               01 (1) 'Modification'\n-53480D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534811 CENTRAL HEADER #201   02014B50 (33639248)\n-534815 Created Zip Spec      14 (20) '2.0'\n-534816 Created OS            00 (0) 'MS-DOS'\n-534817 Extract Zip Spec      14 (20) '2.0'\n-534818 Extract OS            00 (0) 'MS-DOS'\n-534819 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53481B Compression Method    0000 (0) 'Stored'\n-53481D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534821 CRC                   357DA477 (897426551)\n-534825 Compressed Size       000006C6 (1734)\n-534829 Uncompressed Size     000006C6 (1734)\n-53482D Filename Length       0074 (116)\n-53482F Extra Length          0009 (9)\n-534831 Comment Length        0000 (0)\n-534833 Disk Start            0000 (0)\n-534835 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534837 Ext File Attributes   00000000 (0)\n-53483B Local Header Offset   00066EA8 (421544)\n-53483F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53483F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5348B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5348B5   Length              0005 (5)\n-5348B7   Flags               01 (1) 'Modification'\n-5348B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5348BC CENTRAL HEADER #202   02014B50 (33639248)\n-5348C0 Created Zip Spec      14 (20) '2.0'\n-5348C1 Created OS            00 (0) 'MS-DOS'\n-5348C2 Extract Zip Spec      14 (20) '2.0'\n-5348C3 Extract OS            00 (0) 'MS-DOS'\n-5348C4 General Purpose Flag  0000 (0)\n-5348C6 Compression Method    0000 (0) 'Stored'\n-5348C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5348CC CRC                   00000000 (0)\n-5348D0 Compressed Size       00000000 (0)\n-5348D4 Uncompressed Size     00000000 (0)\n-5348D8 Filename Length       005B (91)\n-5348DA Extra Length          0009 (9)\n-5348DC Comment Length        0000 (0)\n-5348DE Disk Start            0000 (0)\n-5348E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5348E2 Ext File Attributes   00000000 (0)\n-5348E6 Local Header Offset   00067619 (423449)\n-5348EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5348EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534945 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534947   Length              0005 (5)\n-534949   Flags               01 (1) 'Modification'\n-53494A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53494E CENTRAL HEADER #203   02014B50 (33639248)\n-534952 Created Zip Spec      14 (20) '2.0'\n-534953 Created OS            00 (0) 'MS-DOS'\n-534954 Extract Zip Spec      14 (20) '2.0'\n-534955 Extract OS            00 (0) 'MS-DOS'\n-534956 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534958 Compression Method    0000 (0) 'Stored'\n-53495A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53495E CRC                   F9CAC97B (4190816635)\n-534962 Compressed Size       000009BC (2492)\n-534966 Uncompressed Size     000009BC (2492)\n-53496A Filename Length       0071 (113)\n-53496C Extra Length          0009 (9)\n-53496E Comment Length        0000 (0)\n-534970 Disk Start            0000 (0)\n-534972 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534974 Ext File Attributes   00000000 (0)\n-534978 Local Header Offset   0006769B (423579)\n-53497C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53497C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5349ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5349EF   Length              0005 (5)\n-5349F1   Flags               01 (1) 'Modification'\n-5349F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5349F6 CENTRAL HEADER #204   02014B50 (33639248)\n-5349FA Created Zip Spec      14 (20) '2.0'\n-5349FB Created OS            00 (0) 'MS-DOS'\n-5349FC Extract Zip Spec      14 (20) '2.0'\n-5349FD Extract OS            00 (0) 'MS-DOS'\n-5349FE General Purpose Flag  0000 (0)\n-534A00 Compression Method    0000 (0) 'Stored'\n-534A02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534A06 CRC                   00000000 (0)\n-534A0A Compressed Size       00000000 (0)\n-534A0E Uncompressed Size     00000000 (0)\n-534A12 Filename Length       0061 (97)\n-534A14 Extra Length          0009 (9)\n-534A16 Comment Length        0000 (0)\n-534A18 Disk Start            0000 (0)\n-534A1A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534A1C Ext File Attributes   00000000 (0)\n-534A20 Local Header Offset   000680FF (426239)\n-534A24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534A24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534A85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534A87   Length              0005 (5)\n-534A89   Flags               01 (1) 'Modification'\n-534A8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534A8E CENTRAL HEADER #205   02014B50 (33639248)\n-534A92 Created Zip Spec      14 (20) '2.0'\n-534A93 Created OS            00 (0) 'MS-DOS'\n-534A94 Extract Zip Spec      14 (20) '2.0'\n-534A95 Extract OS            00 (0) 'MS-DOS'\n-534A96 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534A98 Compression Method    0000 (0) 'Stored'\n-534A9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534A9E CRC                   9DEB8C8B (2649459851)\n-534AA2 Compressed Size       00000A07 (2567)\n-534AA6 Uncompressed Size     00000A07 (2567)\n-534AAA Filename Length       0077 (119)\n-534AAC Extra Length          0009 (9)\n-534AAE Comment Length        0000 (0)\n-534AB0 Disk Start            0000 (0)\n-534AB2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534AB4 Ext File Attributes   00000000 (0)\n-534AB8 Local Header Offset   00068187 (426375)\n-534ABC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534ABC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534B33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534B35   Length              0005 (5)\n-534B37   Flags               01 (1) 'Modification'\n-534B38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534B3C CENTRAL HEADER #206   02014B50 (33639248)\n-534B40 Created Zip Spec      14 (20) '2.0'\n-534B41 Created OS            00 (0) 'MS-DOS'\n-534B42 Extract Zip Spec      14 (20) '2.0'\n-534B43 Extract OS            00 (0) 'MS-DOS'\n-534B44 General Purpose Flag  0000 (0)\n-534B46 Compression Method    0000 (0) 'Stored'\n-534B48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534B4C CRC                   00000000 (0)\n-534B50 Compressed Size       00000000 (0)\n-534B54 Uncompressed Size     00000000 (0)\n-534B58 Filename Length       005B (91)\n-534B5A Extra Length          0009 (9)\n-534B5C Comment Length        0000 (0)\n-534B5E Disk Start            0000 (0)\n-534B60 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534B62 Ext File Attributes   00000000 (0)\n-534B66 Local Header Offset   00068C3C (429116)\n-534B6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534B6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534BC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534BC7   Length              0005 (5)\n-534BC9   Flags               01 (1) 'Modification'\n-534BCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534BCE CENTRAL HEADER #207   02014B50 (33639248)\n-534BD2 Created Zip Spec      14 (20) '2.0'\n-534BD3 Created OS            00 (0) 'MS-DOS'\n-534BD4 Extract Zip Spec      14 (20) '2.0'\n-534BD5 Extract OS            00 (0) 'MS-DOS'\n-534BD6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534BD8 Compression Method    0000 (0) 'Stored'\n-534BDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534BDE CRC                   85B17459 (2242999385)\n-534BE2 Compressed Size       00000DDE (3550)\n-534BE6 Uncompressed Size     00000DDE (3550)\n-534BEA Filename Length       0071 (113)\n-534BEC Extra Length          0009 (9)\n-534BEE Comment Length        0000 (0)\n-534BF0 Disk Start            0000 (0)\n-534BF2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534BF4 Ext File Attributes   00000000 (0)\n-534BF8 Local Header Offset   00068CBE (429246)\n-534BFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534BFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534C6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534C6F   Length              0005 (5)\n-534C71   Flags               01 (1) 'Modification'\n-534C72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534C76 CENTRAL HEADER #208   02014B50 (33639248)\n-534C7A Created Zip Spec      14 (20) '2.0'\n-534C7B Created OS            00 (0) 'MS-DOS'\n-534C7C Extract Zip Spec      14 (20) '2.0'\n-534C7D Extract OS            00 (0) 'MS-DOS'\n-534C7E General Purpose Flag  0000 (0)\n-534C80 Compression Method    0000 (0) 'Stored'\n-534C82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534C86 CRC                   00000000 (0)\n-534C8A Compressed Size       00000000 (0)\n-534C8E Uncompressed Size     00000000 (0)\n-534C92 Filename Length       0066 (102)\n-534C94 Extra Length          0009 (9)\n-534C96 Comment Length        0000 (0)\n-534C98 Disk Start            0000 (0)\n-534C9A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534C9C Ext File Attributes   00000000 (0)\n-534CA0 Local Header Offset   00069B44 (432964)\n-534CA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534CA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534D0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534D0C   Length              0005 (5)\n-534D0E   Flags               01 (1) 'Modification'\n-534D0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534D13 CENTRAL HEADER #209   02014B50 (33639248)\n-534D17 Created Zip Spec      14 (20) '2.0'\n-534D18 Created OS            00 (0) 'MS-DOS'\n-534D19 Extract Zip Spec      14 (20) '2.0'\n-534D1A Extract OS            00 (0) 'MS-DOS'\n-534D1B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534D1D Compression Method    0000 (0) 'Stored'\n-534D1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534D23 CRC                   9C229073 (2619510899)\n-534D27 Compressed Size       000005CF (1487)\n-534D2B Uncompressed Size     000005CF (1487)\n-534D2F Filename Length       007C (124)\n-534D31 Extra Length          0009 (9)\n-534D33 Comment Length        0000 (0)\n-534D35 Disk Start            0000 (0)\n-534D37 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534D39 Ext File Attributes   00000000 (0)\n-534D3D Local Header Offset   00069BD1 (433105)\n-534D41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534D41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534DBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534DBF   Length              0005 (5)\n-534DC1   Flags               01 (1) 'Modification'\n-534DC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534DC6 CENTRAL HEADER #210   02014B50 (33639248)\n-534DCA Created Zip Spec      14 (20) '2.0'\n-534DCB Created OS            00 (0) 'MS-DOS'\n-534DCC Extract Zip Spec      14 (20) '2.0'\n-534DCD Extract OS            00 (0) 'MS-DOS'\n-534DCE General Purpose Flag  0000 (0)\n-534DD0 Compression Method    0000 (0) 'Stored'\n-534DD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534DD6 CRC                   00000000 (0)\n-534DDA Compressed Size       00000000 (0)\n-534DDE Uncompressed Size     00000000 (0)\n-534DE2 Filename Length       0066 (102)\n-534DE4 Extra Length          0009 (9)\n-534DE6 Comment Length        0000 (0)\n-534DE8 Disk Start            0000 (0)\n-534DEA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534DEC Ext File Attributes   00000000 (0)\n-534DF0 Local Header Offset   0006A253 (434771)\n-534DF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534DF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534E5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534E5C   Length              0005 (5)\n-534E5E   Flags               01 (1) 'Modification'\n-534E5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534E63 CENTRAL HEADER #211   02014B50 (33639248)\n-534E67 Created Zip Spec      14 (20) '2.0'\n-534E68 Created OS            00 (0) 'MS-DOS'\n-534E69 Extract Zip Spec      14 (20) '2.0'\n-534E6A Extract OS            00 (0) 'MS-DOS'\n-534E6B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534E6D Compression Method    0000 (0) 'Stored'\n-534E6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534E73 CRC                   A57691CD (2776011213)\n-534E77 Compressed Size       000005C2 (1474)\n-534E7B Uncompressed Size     000005C2 (1474)\n-534E7F Filename Length       007C (124)\n-534E81 Extra Length          0009 (9)\n-534E83 Comment Length        0000 (0)\n-534E85 Disk Start            0000 (0)\n-534E87 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534E89 Ext File Attributes   00000000 (0)\n-534E8D Local Header Offset   0006A2E0 (434912)\n-534E91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534E91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534F0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534F0F   Length              0005 (5)\n-534F11   Flags               01 (1) 'Modification'\n-534F12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534F16 CENTRAL HEADER #212   02014B50 (33639248)\n-534F1A Created Zip Spec      14 (20) '2.0'\n-534F1B Created OS            00 (0) 'MS-DOS'\n-534F1C Extract Zip Spec      14 (20) '2.0'\n-534F1D Extract OS            00 (0) 'MS-DOS'\n-534F1E General Purpose Flag  0000 (0)\n-534F20 Compression Method    0000 (0) 'Stored'\n-534F22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534F26 CRC                   00000000 (0)\n-534F2A Compressed Size       00000000 (0)\n-534F2E Uncompressed Size     00000000 (0)\n-534F32 Filename Length       0065 (101)\n-534F34 Extra Length          0009 (9)\n-534F36 Comment Length        0000 (0)\n-534F38 Disk Start            0000 (0)\n-534F3A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534F3C Ext File Attributes   00000000 (0)\n-534F40 Local Header Offset   0006A955 (436565)\n-534F44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534F44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-534FA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-534FAB   Length              0005 (5)\n-534FAD   Flags               01 (1) 'Modification'\n-534FAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534FB2 CENTRAL HEADER #213   02014B50 (33639248)\n-534FB6 Created Zip Spec      14 (20) '2.0'\n-534FB7 Created OS            00 (0) 'MS-DOS'\n-534FB8 Extract Zip Spec      14 (20) '2.0'\n-534FB9 Extract OS            00 (0) 'MS-DOS'\n-534FBA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-534FBC Compression Method    0000 (0) 'Stored'\n-534FBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534FC2 CRC                   6CD31445 (1825772613)\n-534FC6 Compressed Size       0000073A (1850)\n-534FCA Uncompressed Size     0000073A (1850)\n-534FCE Filename Length       007B (123)\n-534FD0 Extra Length          0009 (9)\n-534FD2 Comment Length        0000 (0)\n-534FD4 Disk Start            0000 (0)\n-534FD6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-534FD8 Ext File Attributes   00000000 (0)\n-534FDC Local Header Offset   0006A9E1 (436705)\n-534FE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534FE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53505B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53505D   Length              0005 (5)\n-53505F   Flags               01 (1) 'Modification'\n-535060   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535064 CENTRAL HEADER #214   02014B50 (33639248)\n-535068 Created Zip Spec      14 (20) '2.0'\n-535069 Created OS            00 (0) 'MS-DOS'\n-53506A Extract Zip Spec      14 (20) '2.0'\n-53506B Extract OS            00 (0) 'MS-DOS'\n-53506C General Purpose Flag  0000 (0)\n-53506E Compression Method    0000 (0) 'Stored'\n-535070 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535074 CRC                   00000000 (0)\n-535078 Compressed Size       00000000 (0)\n-53507C Uncompressed Size     00000000 (0)\n-535080 Filename Length       0063 (99)\n-535082 Extra Length          0009 (9)\n-535084 Comment Length        0000 (0)\n-535086 Disk Start            0000 (0)\n-535088 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53508A Ext File Attributes   00000000 (0)\n-53508E Local Header Offset   0006B1CD (438733)\n-535092 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535092: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5350F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5350F7   Length              0005 (5)\n-5350F9   Flags               01 (1) 'Modification'\n-5350FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5350FE CENTRAL HEADER #215   02014B50 (33639248)\n-535102 Created Zip Spec      14 (20) '2.0'\n-535103 Created OS            00 (0) 'MS-DOS'\n-535104 Extract Zip Spec      14 (20) '2.0'\n-535105 Extract OS            00 (0) 'MS-DOS'\n-535106 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-535108 Compression Method    0000 (0) 'Stored'\n-53510A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53510E CRC                   C97DF8D6 (3380476118)\n-535112 Compressed Size       00000A92 (2706)\n-535116 Uncompressed Size     00000A92 (2706)\n-53511A Filename Length       0079 (121)\n-53511C Extra Length          0009 (9)\n-53511E Comment Length        0000 (0)\n-535120 Disk Start            0000 (0)\n-535122 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535124 Ext File Attributes   00000000 (0)\n-535128 Local Header Offset   0006B257 (438871)\n-53512C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53512C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5351A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5351A7   Length              0005 (5)\n-5351A9   Flags               01 (1) 'Modification'\n-5351AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5351AE CENTRAL HEADER #216   02014B50 (33639248)\n-5351B2 Created Zip Spec      14 (20) '2.0'\n-5351B3 Created OS            00 (0) 'MS-DOS'\n-5351B4 Extract Zip Spec      14 (20) '2.0'\n-5351B5 Extract OS            00 (0) 'MS-DOS'\n-5351B6 General Purpose Flag  0000 (0)\n-5351B8 Compression Method    0000 (0) 'Stored'\n-5351BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5351BE CRC                   00000000 (0)\n-5351C2 Compressed Size       00000000 (0)\n-5351C6 Uncompressed Size     00000000 (0)\n-5351CA Filename Length       0023 (35)\n-5351CC Extra Length          0009 (9)\n-5351CE Comment Length        0000 (0)\n-5351D0 Disk Start            0000 (0)\n-5351D2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5351D4 Ext File Attributes   00000000 (0)\n-5351D8 Local Header Offset   0006BD99 (441753)\n-5351DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5351DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5351FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535201   Length              0005 (5)\n-535203   Flags               01 (1) 'Modification'\n-535204   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535208 CENTRAL HEADER #217   02014B50 (33639248)\n-53520C Created Zip Spec      14 (20) '2.0'\n-53520D Created OS            00 (0) 'MS-DOS'\n-53520E Extract Zip Spec      14 (20) '2.0'\n-53520F Extract OS            00 (0) 'MS-DOS'\n-535210 General Purpose Flag  0000 (0)\n-535212 Compression Method    0000 (0) 'Stored'\n-535214 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535218 CRC                   00000000 (0)\n-53521C Compressed Size       00000000 (0)\n-535220 Uncompressed Size     00000000 (0)\n-535224 Filename Length       002C (44)\n-535226 Extra Length          0009 (9)\n-535228 Comment Length        0000 (0)\n-53522A Disk Start            0000 (0)\n-53522C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53522E Ext File Attributes   00000000 (0)\n-535232 Local Header Offset   0006BDE3 (441827)\n-535236 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535236: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535262 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535264   Length              0005 (5)\n-535266   Flags               01 (1) 'Modification'\n-535267   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53526B CENTRAL HEADER #218   02014B50 (33639248)\n-53526F Created Zip Spec      14 (20) '2.0'\n-535270 Created OS            00 (0) 'MS-DOS'\n-535271 Extract Zip Spec      14 (20) '2.0'\n-535272 Extract OS            00 (0) 'MS-DOS'\n-535273 General Purpose Flag  0000 (0)\n-535275 Compression Method    0000 (0) 'Stored'\n-535277 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53527B CRC                   00000000 (0)\n-53527F Compressed Size       00000000 (0)\n-535283 Uncompressed Size     00000000 (0)\n-535287 Filename Length       0058 (88)\n-535289 Extra Length          0009 (9)\n-53528B Comment Length        0000 (0)\n-53528D Disk Start            0000 (0)\n-53528F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535291 Ext File Attributes   00000000 (0)\n-535295 Local Header Offset   0006BE36 (441910)\n-535299 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535299: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5352F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5352F3   Length              0005 (5)\n-5352F5   Flags               01 (1) 'Modification'\n-5352F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5352FA CENTRAL HEADER #219   02014B50 (33639248)\n-5352FE Created Zip Spec      14 (20) '2.0'\n-5352FF Created OS            00 (0) 'MS-DOS'\n-535300 Extract Zip Spec      14 (20) '2.0'\n-535301 Extract OS            00 (0) 'MS-DOS'\n-535302 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-535304 Compression Method    0000 (0) 'Stored'\n-535306 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53530A CRC                   0B04A112 (184852754)\n-53530E Compressed Size       00000795 (1941)\n-535312 Uncompressed Size     00000795 (1941)\n-535316 Filename Length       006E (110)\n-535318 Extra Length          0009 (9)\n-53531A Comment Length        0000 (0)\n-53531C Disk Start            0000 (0)\n-53531E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535320 Ext File Attributes   00000000 (0)\n-535324 Local Header Offset   0006BEB5 (442037)\n-535328 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535328: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535396 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535398   Length              0005 (5)\n-53539A   Flags               01 (1) 'Modification'\n-53539B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53539F CENTRAL HEADER #220   02014B50 (33639248)\n-5353A3 Created Zip Spec      14 (20) '2.0'\n-5353A4 Created OS            00 (0) 'MS-DOS'\n-5353A5 Extract Zip Spec      14 (20) '2.0'\n-5353A6 Extract OS            00 (0) 'MS-DOS'\n-5353A7 General Purpose Flag  0000 (0)\n-5353A9 Compression Method    0000 (0) 'Stored'\n-5353AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5353AF CRC                   00000000 (0)\n-5353B3 Compressed Size       00000000 (0)\n-5353B7 Uncompressed Size     00000000 (0)\n-5353BB Filename Length       0031 (49)\n-5353BD Extra Length          0009 (9)\n-5353BF Comment Length        0000 (0)\n-5353C1 Disk Start            0000 (0)\n-5353C3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5353C5 Ext File Attributes   00000000 (0)\n-5353C9 Local Header Offset   0006C6EF (444143)\n-5353CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5353CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5353FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535400   Length              0005 (5)\n-535402   Flags               01 (1) 'Modification'\n-535403   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535407 CENTRAL HEADER #221   02014B50 (33639248)\n-53540B Created Zip Spec      14 (20) '2.0'\n-53540C Created OS            00 (0) 'MS-DOS'\n-53540D Extract Zip Spec      14 (20) '2.0'\n-53540E Extract OS            00 (0) 'MS-DOS'\n-53540F General Purpose Flag  0000 (0)\n-535411 Compression Method    0000 (0) 'Stored'\n-535413 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535417 CRC                   00000000 (0)\n-53541B Compressed Size       00000000 (0)\n-53541F Uncompressed Size     00000000 (0)\n-535423 Filename Length       003A (58)\n-535425 Extra Length          0009 (9)\n-535427 Comment Length        0000 (0)\n-535429 Disk Start            0000 (0)\n-53542B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53542D Ext File Attributes   00000000 (0)\n-535431 Local Header Offset   0006C747 (444231)\n-535435 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535435: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53546F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535471   Length              0005 (5)\n-535473   Flags               01 (1) 'Modification'\n-535474   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535478 CENTRAL HEADER #222   02014B50 (33639248)\n-53547C Created Zip Spec      14 (20) '2.0'\n-53547D Created OS            00 (0) 'MS-DOS'\n-53547E Extract Zip Spec      14 (20) '2.0'\n-53547F Extract OS            00 (0) 'MS-DOS'\n-535480 General Purpose Flag  0000 (0)\n-535482 Compression Method    0000 (0) 'Stored'\n-535484 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535488 CRC                   00000000 (0)\n-53548C Compressed Size       00000000 (0)\n-535490 Uncompressed Size     00000000 (0)\n-535494 Filename Length       006C (108)\n-535496 Extra Length          0009 (9)\n-535498 Comment Length        0000 (0)\n-53549A Disk Start            0000 (0)\n-53549C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53549E Ext File Attributes   00000000 (0)\n-5354A2 Local Header Offset   0006C7A8 (444328)\n-5354A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5354A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535512 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535514   Length              0005 (5)\n-535516   Flags               01 (1) 'Modification'\n-535517   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53551B CENTRAL HEADER #223   02014B50 (33639248)\n-53551F Created Zip Spec      14 (20) '2.0'\n-535520 Created OS            00 (0) 'MS-DOS'\n-535521 Extract Zip Spec      14 (20) '2.0'\n-535522 Extract OS            00 (0) 'MS-DOS'\n-535523 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-535525 Compression Method    0000 (0) 'Stored'\n-535527 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53552B CRC                   9A51A289 (2589041289)\n-53552F Compressed Size       000008AB (2219)\n-535533 Uncompressed Size     000008AB (2219)\n-535537 Filename Length       0082 (130)\n-535539 Extra Length          0009 (9)\n-53553B Comment Length        0000 (0)\n-53553D Disk Start            0000 (0)\n-53553F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535541 Ext File Attributes   00000000 (0)\n-535545 Local Header Offset   0006C83B (444475)\n-535549 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535549: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5355CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5355CD   Length              0005 (5)\n-5355CF   Flags               01 (1) 'Modification'\n-5355D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5355D4 CENTRAL HEADER #224   02014B50 (33639248)\n-5355D8 Created Zip Spec      14 (20) '2.0'\n-5355D9 Created OS            00 (0) 'MS-DOS'\n-5355DA Extract Zip Spec      14 (20) '2.0'\n-5355DB Extract OS            00 (0) 'MS-DOS'\n-5355DC General Purpose Flag  0000 (0)\n-5355DE Compression Method    0000 (0) 'Stored'\n-5355E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5355E4 CRC                   00000000 (0)\n-5355E8 Compressed Size       00000000 (0)\n-5355EC Uncompressed Size     00000000 (0)\n-5355F0 Filename Length       0022 (34)\n-5355F2 Extra Length          0009 (9)\n-5355F4 Comment Length        0000 (0)\n-5355F6 Disk Start            0000 (0)\n-5355F8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5355FA Ext File Attributes   00000000 (0)\n-5355FE Local Header Offset   0006D19F (446879)\n-535602 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535602: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535624 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535626   Length              0005 (5)\n-535628   Flags               01 (1) 'Modification'\n-535629   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53562D CENTRAL HEADER #225   02014B50 (33639248)\n-535631 Created Zip Spec      14 (20) '2.0'\n-535632 Created OS            00 (0) 'MS-DOS'\n-535633 Extract Zip Spec      14 (20) '2.0'\n-535634 Extract OS            00 (0) 'MS-DOS'\n-535635 General Purpose Flag  0000 (0)\n-535637 Compression Method    0000 (0) 'Stored'\n-535639 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53563D CRC                   00000000 (0)\n-535641 Compressed Size       00000000 (0)\n-535645 Uncompressed Size     00000000 (0)\n-535649 Filename Length       002B (43)\n-53564B Extra Length          0009 (9)\n-53564D Comment Length        0000 (0)\n-53564F Disk Start            0000 (0)\n-535651 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535653 Ext File Attributes   00000000 (0)\n-535657 Local Header Offset   0006D1E8 (446952)\n-53565B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53565B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535686 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535688   Length              0005 (5)\n-53568A   Flags               01 (1) 'Modification'\n-53568B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53568F CENTRAL HEADER #226   02014B50 (33639248)\n-535693 Created Zip Spec      14 (20) '2.0'\n-535694 Created OS            00 (0) 'MS-DOS'\n-535695 Extract Zip Spec      14 (20) '2.0'\n-535696 Extract OS            00 (0) 'MS-DOS'\n-535697 General Purpose Flag  0000 (0)\n-535699 Compression Method    0000 (0) 'Stored'\n-53569B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53569F CRC                   00000000 (0)\n-5356A3 Compressed Size       00000000 (0)\n-5356A7 Uncompressed Size     00000000 (0)\n-5356AB Filename Length       004D (77)\n-5356AD Extra Length          0009 (9)\n-5356AF Comment Length        0000 (0)\n-5356B1 Disk Start            0000 (0)\n-5356B3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5356B5 Ext File Attributes   00000000 (0)\n-5356B9 Local Header Offset   0006D23A (447034)\n-5356BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5356BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53570A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53570C   Length              0005 (5)\n-53570E   Flags               01 (1) 'Modification'\n-53570F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535713 CENTRAL HEADER #227   02014B50 (33639248)\n-535717 Created Zip Spec      14 (20) '2.0'\n-535718 Created OS            00 (0) 'MS-DOS'\n-535719 Extract Zip Spec      14 (20) '2.0'\n-53571A Extract OS            00 (0) 'MS-DOS'\n-53571B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53571D Compression Method    0000 (0) 'Stored'\n-53571F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535723 CRC                   BEAE3D9C (3199090076)\n-535727 Compressed Size       0000396F (14703)\n-53572B Uncompressed Size     0000396F (14703)\n-53572F Filename Length       0063 (99)\n-535731 Extra Length          0009 (9)\n-535733 Comment Length        0000 (0)\n-535735 Disk Start            0000 (0)\n-535737 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535739 Ext File Attributes   00000000 (0)\n-53573D Local Header Offset   0006D2AE (447150)\n-535741 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535741: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5357A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5357A6   Length              0005 (5)\n-5357A8   Flags               01 (1) 'Modification'\n-5357A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5357AD CENTRAL HEADER #228   02014B50 (33639248)\n-5357B1 Created Zip Spec      14 (20) '2.0'\n-5357B2 Created OS            00 (0) 'MS-DOS'\n-5357B3 Extract Zip Spec      14 (20) '2.0'\n-5357B4 Extract OS            00 (0) 'MS-DOS'\n-5357B5 General Purpose Flag  0000 (0)\n-5357B7 Compression Method    0000 (0) 'Stored'\n-5357B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5357BD CRC                   00000000 (0)\n-5357C1 Compressed Size       00000000 (0)\n-5357C5 Uncompressed Size     00000000 (0)\n-5357C9 Filename Length       0030 (48)\n-5357CB Extra Length          0009 (9)\n-5357CD Comment Length        0000 (0)\n-5357CF Disk Start            0000 (0)\n-5357D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5357D3 Ext File Attributes   00000000 (0)\n-5357D7 Local Header Offset   00070CB7 (462007)\n-5357DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5357DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53580B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53580D   Length              0005 (5)\n-53580F   Flags               01 (1) 'Modification'\n-535810   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535814 CENTRAL HEADER #229   02014B50 (33639248)\n-535818 Created Zip Spec      14 (20) '2.0'\n-535819 Created OS            00 (0) 'MS-DOS'\n-53581A Extract Zip Spec      14 (20) '2.0'\n-53581B Extract OS            00 (0) 'MS-DOS'\n-53581C General Purpose Flag  0000 (0)\n-53581E Compression Method    0000 (0) 'Stored'\n-535820 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535824 CRC                   00000000 (0)\n-535828 Compressed Size       00000000 (0)\n-53582C Uncompressed Size     00000000 (0)\n-535830 Filename Length       0039 (57)\n-535832 Extra Length          0009 (9)\n-535834 Comment Length        0000 (0)\n-535836 Disk Start            0000 (0)\n-535838 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53583A Ext File Attributes   00000000 (0)\n-53583E Local Header Offset   00070D0E (462094)\n-535842 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535842: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53587B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53587D   Length              0005 (5)\n-53587F   Flags               01 (1) 'Modification'\n-535880   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535884 CENTRAL HEADER #230   02014B50 (33639248)\n-535888 Created Zip Spec      14 (20) '2.0'\n-535889 Created OS            00 (0) 'MS-DOS'\n-53588A Extract Zip Spec      14 (20) '2.0'\n-53588B Extract OS            00 (0) 'MS-DOS'\n-53588C General Purpose Flag  0000 (0)\n-53588E Compression Method    0000 (0) 'Stored'\n-535890 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535894 CRC                   00000000 (0)\n-535898 Compressed Size       00000000 (0)\n-53589C Uncompressed Size     00000000 (0)\n-5358A0 Filename Length       006A (106)\n-5358A2 Extra Length          0009 (9)\n-5358A4 Comment Length        0000 (0)\n-5358A6 Disk Start            0000 (0)\n-5358A8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5358AA Ext File Attributes   00000000 (0)\n-5358AE Local Header Offset   00070D6E (462190)\n-5358B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5358B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53591C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53591E   Length              0005 (5)\n-535920   Flags               01 (1) 'Modification'\n-535921   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535925 CENTRAL HEADER #231   02014B50 (33639248)\n-535929 Created Zip Spec      14 (20) '2.0'\n-53592A Created OS            00 (0) 'MS-DOS'\n-53592B Extract Zip Spec      14 (20) '2.0'\n-53592C Extract OS            00 (0) 'MS-DOS'\n-53592D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53592F Compression Method    0000 (0) 'Stored'\n-535931 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535935 CRC                   29D620BA (701898938)\n-535939 Compressed Size       00002421 (9249)\n-53593D Uncompressed Size     00002421 (9249)\n-535941 Filename Length       0080 (128)\n-535943 Extra Length          0009 (9)\n-535945 Comment Length        0000 (0)\n-535947 Disk Start            0000 (0)\n-535949 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53594B Ext File Attributes   00000000 (0)\n-53594F Local Header Offset   00070DFF (462335)\n-535953 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535953: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5359D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5359D5   Length              0005 (5)\n-5359D7   Flags               01 (1) 'Modification'\n-5359D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5359DC CENTRAL HEADER #232   02014B50 (33639248)\n-5359E0 Created Zip Spec      14 (20) '2.0'\n-5359E1 Created OS            00 (0) 'MS-DOS'\n-5359E2 Extract Zip Spec      14 (20) '2.0'\n-5359E3 Extract OS            00 (0) 'MS-DOS'\n-5359E4 General Purpose Flag  0000 (0)\n-5359E6 Compression Method    0000 (0) 'Stored'\n-5359E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5359EC CRC                   00000000 (0)\n-5359F0 Compressed Size       00000000 (0)\n-5359F4 Uncompressed Size     00000000 (0)\n-5359F8 Filename Length       003C (60)\n-5359FA Extra Length          0009 (9)\n-5359FC Comment Length        0000 (0)\n-5359FE Disk Start            0000 (0)\n-535A00 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535A02 Ext File Attributes   00000000 (0)\n-535A06 Local Header Offset   000732D7 (471767)\n-535A0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535A0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535A46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535A48   Length              0005 (5)\n-535A4A   Flags               01 (1) 'Modification'\n-535A4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535A4F CENTRAL HEADER #233   02014B50 (33639248)\n-535A53 Created Zip Spec      14 (20) '2.0'\n-535A54 Created OS            00 (0) 'MS-DOS'\n-535A55 Extract Zip Spec      14 (20) '2.0'\n-535A56 Extract OS            00 (0) 'MS-DOS'\n-535A57 General Purpose Flag  0000 (0)\n-535A59 Compression Method    0000 (0) 'Stored'\n-535A5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535A5F CRC                   00000000 (0)\n-535A63 Compressed Size       00000000 (0)\n-535A67 Uncompressed Size     00000000 (0)\n-535A6B Filename Length       0045 (69)\n-535A6D Extra Length          0009 (9)\n-535A6F Comment Length        0000 (0)\n-535A71 Disk Start            0000 (0)\n-535A73 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535A75 Ext File Attributes   00000000 (0)\n-535A79 Local Header Offset   0007333A (471866)\n-535A7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535A7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535AC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535AC4   Length              0005 (5)\n-535AC6   Flags               01 (1) 'Modification'\n-535AC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535ACB CENTRAL HEADER #234   02014B50 (33639248)\n-535ACF Created Zip Spec      14 (20) '2.0'\n-535AD0 Created OS            00 (0) 'MS-DOS'\n-535AD1 Extract Zip Spec      14 (20) '2.0'\n-535AD2 Extract OS            00 (0) 'MS-DOS'\n-535AD3 General Purpose Flag  0000 (0)\n-535AD5 Compression Method    0000 (0) 'Stored'\n-535AD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535ADB CRC                   00000000 (0)\n-535ADF Compressed Size       00000000 (0)\n-535AE3 Uncompressed Size     00000000 (0)\n-535AE7 Filename Length       0063 (99)\n-535AE9 Extra Length          0009 (9)\n-535AEB Comment Length        0000 (0)\n-535AED Disk Start            0000 (0)\n-535AEF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535AF1 Ext File Attributes   00000000 (0)\n-535AF5 Local Header Offset   000733A6 (471974)\n-535AF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535AF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535B5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535B5E   Length              0005 (5)\n-535B60   Flags               01 (1) 'Modification'\n-535B61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535B65 CENTRAL HEADER #235   02014B50 (33639248)\n-535B69 Created Zip Spec      14 (20) '2.0'\n-535B6A Created OS            00 (0) 'MS-DOS'\n-535B6B Extract Zip Spec      14 (20) '2.0'\n-535B6C Extract OS            00 (0) 'MS-DOS'\n-535B6D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-535B6F Compression Method    0000 (0) 'Stored'\n-535B71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535B75 CRC                   9ED7BE90 (2664939152)\n-535B79 Compressed Size       000036E7 (14055)\n-535B7D Uncompressed Size     000036E7 (14055)\n-535B81 Filename Length       0079 (121)\n-535B83 Extra Length          0009 (9)\n-535B85 Comment Length        0000 (0)\n-535B87 Disk Start            0000 (0)\n-535B89 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535B8B Ext File Attributes   00000000 (0)\n-535B8F Local Header Offset   00073430 (472112)\n-535B93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535B93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535C0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535C0E   Length              0005 (5)\n-535C10   Flags               01 (1) 'Modification'\n-535C11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535C15 CENTRAL HEADER #236   02014B50 (33639248)\n-535C19 Created Zip Spec      14 (20) '2.0'\n-535C1A Created OS            00 (0) 'MS-DOS'\n-535C1B Extract Zip Spec      14 (20) '2.0'\n-535C1C Extract OS            00 (0) 'MS-DOS'\n-535C1D General Purpose Flag  0000 (0)\n-535C1F Compression Method    0000 (0) 'Stored'\n-535C21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535C25 CRC                   00000000 (0)\n-535C29 Compressed Size       00000000 (0)\n-535C2D Uncompressed Size     00000000 (0)\n-535C31 Filename Length       0063 (99)\n-535C33 Extra Length          0009 (9)\n-535C35 Comment Length        0000 (0)\n-535C37 Disk Start            0000 (0)\n-535C39 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535C3B Ext File Attributes   00000000 (0)\n-535C3F Local Header Offset   00076BC7 (486343)\n-535C43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535C43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535CA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535CA8   Length              0005 (5)\n-535CAA   Flags               01 (1) 'Modification'\n-535CAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535CAF CENTRAL HEADER #237   02014B50 (33639248)\n-535CB3 Created Zip Spec      14 (20) '2.0'\n-535CB4 Created OS            00 (0) 'MS-DOS'\n-535CB5 Extract Zip Spec      14 (20) '2.0'\n-535CB6 Extract OS            00 (0) 'MS-DOS'\n-535CB7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-535CB9 Compression Method    0000 (0) 'Stored'\n-535CBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535CBF CRC                   B51FDD91 (3038764433)\n-535CC3 Compressed Size       00004792 (18322)\n-535CC7 Uncompressed Size     00004792 (18322)\n-535CCB Filename Length       0079 (121)\n-535CCD Extra Length          0009 (9)\n-535CCF Comment Length        0000 (0)\n-535CD1 Disk Start            0000 (0)\n-535CD3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535CD5 Ext File Attributes   00000000 (0)\n-535CD9 Local Header Offset   00076C51 (486481)\n-535CDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535CDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535D56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535D58   Length              0005 (5)\n-535D5A   Flags               01 (1) 'Modification'\n-535D5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535D5F CENTRAL HEADER #238   02014B50 (33639248)\n-535D63 Created Zip Spec      14 (20) '2.0'\n-535D64 Created OS            00 (0) 'MS-DOS'\n-535D65 Extract Zip Spec      14 (20) '2.0'\n-535D66 Extract OS            00 (0) 'MS-DOS'\n-535D67 General Purpose Flag  0000 (0)\n-535D69 Compression Method    0000 (0) 'Stored'\n-535D6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535D6F CRC                   00000000 (0)\n-535D73 Compressed Size       00000000 (0)\n-535D77 Uncompressed Size     00000000 (0)\n-535D7B Filename Length       0065 (101)\n-535D7D Extra Length          0009 (9)\n-535D7F Comment Length        0000 (0)\n-535D81 Disk Start            0000 (0)\n-535D83 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535D85 Ext File Attributes   00000000 (0)\n-535D89 Local Header Offset   0007B493 (504979)\n-535D8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535D8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535DF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535DF4   Length              0005 (5)\n-535DF6   Flags               01 (1) 'Modification'\n-535DF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535DFB CENTRAL HEADER #239   02014B50 (33639248)\n-535DFF Created Zip Spec      14 (20) '2.0'\n-535E00 Created OS            00 (0) 'MS-DOS'\n-535E01 Extract Zip Spec      14 (20) '2.0'\n-535E02 Extract OS            00 (0) 'MS-DOS'\n-535E03 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-535E05 Compression Method    0000 (0) 'Stored'\n-535E07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535E0B CRC                   27CFA48B (667919499)\n-535E0F Compressed Size       00005DDC (24028)\n-535E13 Uncompressed Size     00005DDC (24028)\n-535E17 Filename Length       007B (123)\n-535E19 Extra Length          0009 (9)\n-535E1B Comment Length        0000 (0)\n-535E1D Disk Start            0000 (0)\n-535E1F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535E21 Ext File Attributes   00000000 (0)\n-535E25 Local Header Offset   0007B51F (505119)\n-535E29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535E29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535EA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535EA6   Length              0005 (5)\n-535EA8   Flags               01 (1) 'Modification'\n-535EA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535EAD CENTRAL HEADER #240   02014B50 (33639248)\n-535EB1 Created Zip Spec      14 (20) '2.0'\n-535EB2 Created OS            00 (0) 'MS-DOS'\n-535EB3 Extract Zip Spec      14 (20) '2.0'\n-535EB4 Extract OS            00 (0) 'MS-DOS'\n-535EB5 General Purpose Flag  0000 (0)\n-535EB7 Compression Method    0000 (0) 'Stored'\n-535EB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535EBD CRC                   00000000 (0)\n-535EC1 Compressed Size       00000000 (0)\n-535EC5 Uncompressed Size     00000000 (0)\n-535EC9 Filename Length       0069 (105)\n-535ECB Extra Length          0009 (9)\n-535ECD Comment Length        0000 (0)\n-535ECF Disk Start            0000 (0)\n-535ED1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535ED3 Ext File Attributes   00000000 (0)\n-535ED7 Local Header Offset   000813AD (529325)\n-535EDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535EDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535F44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535F46   Length              0005 (5)\n-535F48   Flags               01 (1) 'Modification'\n-535F49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535F4D CENTRAL HEADER #241   02014B50 (33639248)\n-535F51 Created Zip Spec      14 (20) '2.0'\n-535F52 Created OS            00 (0) 'MS-DOS'\n-535F53 Extract Zip Spec      14 (20) '2.0'\n-535F54 Extract OS            00 (0) 'MS-DOS'\n-535F55 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-535F57 Compression Method    0000 (0) 'Stored'\n-535F59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535F5D CRC                   620AB78F (1644869519)\n-535F61 Compressed Size       00003B3A (15162)\n-535F65 Uncompressed Size     00003B3A (15162)\n-535F69 Filename Length       007F (127)\n-535F6B Extra Length          0009 (9)\n-535F6D Comment Length        0000 (0)\n-535F6F Disk Start            0000 (0)\n-535F71 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-535F73 Ext File Attributes   00000000 (0)\n-535F77 Local Header Offset   0008143D (529469)\n-535F7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535F7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535FFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535FFC   Length              0005 (5)\n-535FFE   Flags               01 (1) 'Modification'\n-535FFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536003 CENTRAL HEADER #242   02014B50 (33639248)\n-536007 Created Zip Spec      14 (20) '2.0'\n-536008 Created OS            00 (0) 'MS-DOS'\n-536009 Extract Zip Spec      14 (20) '2.0'\n-53600A Extract OS            00 (0) 'MS-DOS'\n-53600B General Purpose Flag  0000 (0)\n-53600D Compression Method    0000 (0) 'Stored'\n-53600F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536013 CRC                   00000000 (0)\n-536017 Compressed Size       00000000 (0)\n-53601B Uncompressed Size     00000000 (0)\n-53601F Filename Length       0069 (105)\n-536021 Extra Length          0009 (9)\n-536023 Comment Length        0000 (0)\n-536025 Disk Start            0000 (0)\n-536027 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536029 Ext File Attributes   00000000 (0)\n-53602D Local Header Offset   0008502D (544813)\n-536031 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536031: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53609A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53609C   Length              0005 (5)\n-53609E   Flags               01 (1) 'Modification'\n-53609F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5360A3 CENTRAL HEADER #243   02014B50 (33639248)\n-5360A7 Created Zip Spec      14 (20) '2.0'\n-5360A8 Created OS            00 (0) 'MS-DOS'\n-5360A9 Extract Zip Spec      14 (20) '2.0'\n-5360AA Extract OS            00 (0) 'MS-DOS'\n-5360AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5360AD Compression Method    0000 (0) 'Stored'\n-5360AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5360B3 CRC                   937A07E6 (2474248166)\n-5360B7 Compressed Size       00004869 (18537)\n-5360BB Uncompressed Size     00004869 (18537)\n-5360BF Filename Length       007F (127)\n-5360C1 Extra Length          0009 (9)\n-5360C3 Comment Length        0000 (0)\n-5360C5 Disk Start            0000 (0)\n-5360C7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5360C9 Ext File Attributes   00000000 (0)\n-5360CD Local Header Offset   000850BD (544957)\n-5360D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5360D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536150 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536152   Length              0005 (5)\n-536154   Flags               01 (1) 'Modification'\n-536155   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536159 CENTRAL HEADER #244   02014B50 (33639248)\n-53615D Created Zip Spec      14 (20) '2.0'\n-53615E Created OS            00 (0) 'MS-DOS'\n-53615F Extract Zip Spec      14 (20) '2.0'\n-536160 Extract OS            00 (0) 'MS-DOS'\n-536161 General Purpose Flag  0000 (0)\n-536163 Compression Method    0000 (0) 'Stored'\n-536165 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536169 CRC                   00000000 (0)\n-53616D Compressed Size       00000000 (0)\n-536171 Uncompressed Size     00000000 (0)\n-536175 Filename Length       006D (109)\n-536177 Extra Length          0009 (9)\n-536179 Comment Length        0000 (0)\n-53617B Disk Start            0000 (0)\n-53617D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53617F Ext File Attributes   00000000 (0)\n-536183 Local Header Offset   000899DC (563676)\n-536187 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536187: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5361F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5361F6   Length              0005 (5)\n-5361F8   Flags               01 (1) 'Modification'\n-5361F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5361FD CENTRAL HEADER #245   02014B50 (33639248)\n-536201 Created Zip Spec      14 (20) '2.0'\n-536202 Created OS            00 (0) 'MS-DOS'\n-536203 Extract Zip Spec      14 (20) '2.0'\n-536204 Extract OS            00 (0) 'MS-DOS'\n-536205 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536207 Compression Method    0000 (0) 'Stored'\n-536209 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53620D CRC                   53DFF1D7 (1407185367)\n-536211 Compressed Size       00000ADF (2783)\n-536215 Uncompressed Size     00000ADF (2783)\n-536219 Filename Length       0083 (131)\n-53621B Extra Length          0009 (9)\n-53621D Comment Length        0000 (0)\n-53621F Disk Start            0000 (0)\n-536221 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536223 Ext File Attributes   00000000 (0)\n-536227 Local Header Offset   00089A70 (563824)\n-53622B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53622B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5362AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5362B0   Length              0005 (5)\n-5362B2   Flags               01 (1) 'Modification'\n-5362B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5362B7 CENTRAL HEADER #246   02014B50 (33639248)\n-5362BB Created Zip Spec      14 (20) '2.0'\n-5362BC Created OS            00 (0) 'MS-DOS'\n-5362BD Extract Zip Spec      14 (20) '2.0'\n-5362BE Extract OS            00 (0) 'MS-DOS'\n-5362BF General Purpose Flag  0000 (0)\n-5362C1 Compression Method    0000 (0) 'Stored'\n-5362C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5362C7 CRC                   00000000 (0)\n-5362CB Compressed Size       00000000 (0)\n-5362CF Uncompressed Size     00000000 (0)\n-5362D3 Filename Length       0069 (105)\n-5362D5 Extra Length          0009 (9)\n-5362D7 Comment Length        0000 (0)\n-5362D9 Disk Start            0000 (0)\n-5362DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5362DD Ext File Attributes   00000000 (0)\n-5362E1 Local Header Offset   0008A609 (566793)\n-5362E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5362E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53634E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536350   Length              0005 (5)\n-536352   Flags               01 (1) 'Modification'\n-536353   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536357 CENTRAL HEADER #247   02014B50 (33639248)\n-53635B Created Zip Spec      14 (20) '2.0'\n-53635C Created OS            00 (0) 'MS-DOS'\n-53635D Extract Zip Spec      14 (20) '2.0'\n-53635E Extract OS            00 (0) 'MS-DOS'\n-53635F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536361 Compression Method    0000 (0) 'Stored'\n-536363 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536367 CRC                   6D3A5445 (1832539205)\n-53636B Compressed Size       00000939 (2361)\n-53636F Uncompressed Size     00000939 (2361)\n-536373 Filename Length       007F (127)\n-536375 Extra Length          0009 (9)\n-536377 Comment Length        0000 (0)\n-536379 Disk Start            0000 (0)\n-53637B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53637D Ext File Attributes   00000000 (0)\n-536381 Local Header Offset   0008A699 (566937)\n-536385 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536385: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536404 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536406   Length              0005 (5)\n-536408   Flags               01 (1) 'Modification'\n-536409   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53640D CENTRAL HEADER #248   02014B50 (33639248)\n-536411 Created Zip Spec      14 (20) '2.0'\n-536412 Created OS            00 (0) 'MS-DOS'\n-536413 Extract Zip Spec      14 (20) '2.0'\n-536414 Extract OS            00 (0) 'MS-DOS'\n-536415 General Purpose Flag  0000 (0)\n-536417 Compression Method    0000 (0) 'Stored'\n-536419 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53641D CRC                   00000000 (0)\n-536421 Compressed Size       00000000 (0)\n-536425 Uncompressed Size     00000000 (0)\n-536429 Filename Length       0078 (120)\n-53642B Extra Length          0009 (9)\n-53642D Comment Length        0000 (0)\n-53642F Disk Start            0000 (0)\n-536431 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536433 Ext File Attributes   00000000 (0)\n-536437 Local Header Offset   0008B088 (569480)\n-53643B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53643B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5364B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5364B5   Length              0005 (5)\n-5364B7   Flags               01 (1) 'Modification'\n-5364B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5364BC CENTRAL HEADER #249   02014B50 (33639248)\n-5364C0 Created Zip Spec      14 (20) '2.0'\n-5364C1 Created OS            00 (0) 'MS-DOS'\n-5364C2 Extract Zip Spec      14 (20) '2.0'\n-5364C3 Extract OS            00 (0) 'MS-DOS'\n-5364C4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5364C6 Compression Method    0000 (0) 'Stored'\n-5364C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5364CC CRC                   5C6B1924 (1550522660)\n-5364D0 Compressed Size       00000DDD (3549)\n-5364D4 Uncompressed Size     00000DDD (3549)\n-5364D8 Filename Length       008E (142)\n-5364DA Extra Length          0009 (9)\n-5364DC Comment Length        0000 (0)\n-5364DE Disk Start            0000 (0)\n-5364E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5364E2 Ext File Attributes   00000000 (0)\n-5364E6 Local Header Offset   0008B127 (569639)\n-5364EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+534170 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534172   Length              0005 (5)\n+534174   Flags               01 (1) 'Modification'\n+534175   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534179 CENTRAL HEADER #190   02014B50 (33639248)\n+53417D Created Zip Spec      14 (20) '2.0'\n+53417E Created OS            00 (0) 'MS-DOS'\n+53417F Extract Zip Spec      14 (20) '2.0'\n+534180 Extract OS            00 (0) 'MS-DOS'\n+534181 General Purpose Flag  0000 (0)\n+534183 Compression Method    0000 (0) 'Stored'\n+534185 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534189 CRC                   00000000 (0)\n+53418D Compressed Size       00000000 (0)\n+534191 Uncompressed Size     00000000 (0)\n+534195 Filename Length       006A (106)\n+534197 Extra Length          0009 (9)\n+534199 Comment Length        0000 (0)\n+53419B Disk Start            0000 (0)\n+53419D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53419F Ext File Attributes   00000000 (0)\n+5341A3 Local Header Offset   0006168B (398987)\n+5341A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5341A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534211 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534213   Length              0005 (5)\n+534215   Flags               01 (1) 'Modification'\n+534216   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53421A CENTRAL HEADER #191   02014B50 (33639248)\n+53421E Created Zip Spec      14 (20) '2.0'\n+53421F Created OS            00 (0) 'MS-DOS'\n+534220 Extract Zip Spec      14 (20) '2.0'\n+534221 Extract OS            00 (0) 'MS-DOS'\n+534222 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+534224 Compression Method    0000 (0) 'Stored'\n+534226 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53422A CRC                   8BF94713 (2348369683)\n+53422E Compressed Size       00002C4C (11340)\n+534232 Uncompressed Size     00002C4C (11340)\n+534236 Filename Length       0080 (128)\n+534238 Extra Length          0009 (9)\n+53423A Comment Length        0000 (0)\n+53423C Disk Start            0000 (0)\n+53423E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534240 Ext File Attributes   00000000 (0)\n+534244 Local Header Offset   0006171C (399132)\n+534248 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534248: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5342C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5342CA   Length              0005 (5)\n+5342CC   Flags               01 (1) 'Modification'\n+5342CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5342D1 CENTRAL HEADER #192   02014B50 (33639248)\n+5342D5 Created Zip Spec      14 (20) '2.0'\n+5342D6 Created OS            00 (0) 'MS-DOS'\n+5342D7 Extract Zip Spec      14 (20) '2.0'\n+5342D8 Extract OS            00 (0) 'MS-DOS'\n+5342D9 General Purpose Flag  0000 (0)\n+5342DB Compression Method    0000 (0) 'Stored'\n+5342DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5342E1 CRC                   00000000 (0)\n+5342E5 Compressed Size       00000000 (0)\n+5342E9 Uncompressed Size     00000000 (0)\n+5342ED Filename Length       002E (46)\n+5342EF Extra Length          0009 (9)\n+5342F1 Comment Length        0000 (0)\n+5342F3 Disk Start            0000 (0)\n+5342F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5342F7 Ext File Attributes   00000000 (0)\n+5342FB Local Header Offset   0006441F (410655)\n+5342FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5342FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53432D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53432F   Length              0005 (5)\n+534331   Flags               01 (1) 'Modification'\n+534332   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534336 CENTRAL HEADER #193   02014B50 (33639248)\n+53433A Created Zip Spec      14 (20) '2.0'\n+53433B Created OS            00 (0) 'MS-DOS'\n+53433C Extract Zip Spec      14 (20) '2.0'\n+53433D Extract OS            00 (0) 'MS-DOS'\n+53433E General Purpose Flag  0000 (0)\n+534340 Compression Method    0000 (0) 'Stored'\n+534342 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534346 CRC                   00000000 (0)\n+53434A Compressed Size       00000000 (0)\n+53434E Uncompressed Size     00000000 (0)\n+534352 Filename Length       0037 (55)\n+534354 Extra Length          0009 (9)\n+534356 Comment Length        0000 (0)\n+534358 Disk Start            0000 (0)\n+53435A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53435C Ext File Attributes   00000000 (0)\n+534360 Local Header Offset   00064474 (410740)\n+534364 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534364: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53439B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53439D   Length              0005 (5)\n+53439F   Flags               01 (1) 'Modification'\n+5343A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5343A4 CENTRAL HEADER #194   02014B50 (33639248)\n+5343A8 Created Zip Spec      14 (20) '2.0'\n+5343A9 Created OS            00 (0) 'MS-DOS'\n+5343AA Extract Zip Spec      14 (20) '2.0'\n+5343AB Extract OS            00 (0) 'MS-DOS'\n+5343AC General Purpose Flag  0000 (0)\n+5343AE Compression Method    0000 (0) 'Stored'\n+5343B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5343B4 CRC                   00000000 (0)\n+5343B8 Compressed Size       00000000 (0)\n+5343BC Uncompressed Size     00000000 (0)\n+5343C0 Filename Length       0060 (96)\n+5343C2 Extra Length          0009 (9)\n+5343C4 Comment Length        0000 (0)\n+5343C6 Disk Start            0000 (0)\n+5343C8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5343CA Ext File Attributes   00000000 (0)\n+5343CE Local Header Offset   000644D2 (410834)\n+5343D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5343D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534432 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534434   Length              0005 (5)\n+534436   Flags               01 (1) 'Modification'\n+534437   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53443B CENTRAL HEADER #195   02014B50 (33639248)\n+53443F Created Zip Spec      14 (20) '2.0'\n+534440 Created OS            00 (0) 'MS-DOS'\n+534441 Extract Zip Spec      14 (20) '2.0'\n+534442 Extract OS            00 (0) 'MS-DOS'\n+534443 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+534445 Compression Method    0000 (0) 'Stored'\n+534447 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53444B CRC                   42E654D4 (1122391252)\n+53444F Compressed Size       00000EFA (3834)\n+534453 Uncompressed Size     00000EFA (3834)\n+534457 Filename Length       0076 (118)\n+534459 Extra Length          0009 (9)\n+53445B Comment Length        0000 (0)\n+53445D Disk Start            0000 (0)\n+53445F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534461 Ext File Attributes   00000000 (0)\n+534465 Local Header Offset   00064559 (410969)\n+534469 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534469: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5344DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5344E1   Length              0005 (5)\n+5344E3   Flags               01 (1) 'Modification'\n+5344E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5344E8 CENTRAL HEADER #196   02014B50 (33639248)\n+5344EC Created Zip Spec      14 (20) '2.0'\n+5344ED Created OS            00 (0) 'MS-DOS'\n+5344EE Extract Zip Spec      14 (20) '2.0'\n+5344EF Extract OS            00 (0) 'MS-DOS'\n+5344F0 General Purpose Flag  0000 (0)\n+5344F2 Compression Method    0000 (0) 'Stored'\n+5344F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5344F8 CRC                   00000000 (0)\n+5344FC Compressed Size       00000000 (0)\n+534500 Uncompressed Size     00000000 (0)\n+534504 Filename Length       0066 (102)\n+534506 Extra Length          0009 (9)\n+534508 Comment Length        0000 (0)\n+53450A Disk Start            0000 (0)\n+53450C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53450E Ext File Attributes   00000000 (0)\n+534512 Local Header Offset   00065500 (414976)\n+534516 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534516: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53457C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53457E   Length              0005 (5)\n+534580   Flags               01 (1) 'Modification'\n+534581   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534585 CENTRAL HEADER #197   02014B50 (33639248)\n+534589 Created Zip Spec      14 (20) '2.0'\n+53458A Created OS            00 (0) 'MS-DOS'\n+53458B Extract Zip Spec      14 (20) '2.0'\n+53458C Extract OS            00 (0) 'MS-DOS'\n+53458D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53458F Compression Method    0000 (0) 'Stored'\n+534591 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534595 CRC                   51B4F745 (1370814277)\n+534599 Compressed Size       000016D7 (5847)\n+53459D Uncompressed Size     000016D7 (5847)\n+5345A1 Filename Length       007C (124)\n+5345A3 Extra Length          0009 (9)\n+5345A5 Comment Length        0000 (0)\n+5345A7 Disk Start            0000 (0)\n+5345A9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5345AB Ext File Attributes   00000000 (0)\n+5345AF Local Header Offset   0006558D (415117)\n+5345B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5345B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53462F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534631   Length              0005 (5)\n+534633   Flags               01 (1) 'Modification'\n+534634   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534638 CENTRAL HEADER #198   02014B50 (33639248)\n+53463C Created Zip Spec      14 (20) '2.0'\n+53463D Created OS            00 (0) 'MS-DOS'\n+53463E Extract Zip Spec      14 (20) '2.0'\n+53463F Extract OS            00 (0) 'MS-DOS'\n+534640 General Purpose Flag  0000 (0)\n+534642 Compression Method    0000 (0) 'Stored'\n+534644 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534648 CRC                   00000000 (0)\n+53464C Compressed Size       00000000 (0)\n+534650 Uncompressed Size     00000000 (0)\n+534654 Filename Length       0026 (38)\n+534656 Extra Length          0009 (9)\n+534658 Comment Length        0000 (0)\n+53465A Disk Start            0000 (0)\n+53465C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53465E Ext File Attributes   00000000 (0)\n+534662 Local Header Offset   00066D17 (421143)\n+534666 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534666: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53468C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53468E   Length              0005 (5)\n+534690   Flags               01 (1) 'Modification'\n+534691   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534695 CENTRAL HEADER #199   02014B50 (33639248)\n+534699 Created Zip Spec      14 (20) '2.0'\n+53469A Created OS            00 (0) 'MS-DOS'\n+53469B Extract Zip Spec      14 (20) '2.0'\n+53469C Extract OS            00 (0) 'MS-DOS'\n+53469D General Purpose Flag  0000 (0)\n+53469F Compression Method    0000 (0) 'Stored'\n+5346A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5346A5 CRC                   00000000 (0)\n+5346A9 Compressed Size       00000000 (0)\n+5346AD Uncompressed Size     00000000 (0)\n+5346B1 Filename Length       002F (47)\n+5346B3 Extra Length          0009 (9)\n+5346B5 Comment Length        0000 (0)\n+5346B7 Disk Start            0000 (0)\n+5346B9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5346BB Ext File Attributes   00000000 (0)\n+5346BF Local Header Offset   00066D64 (421220)\n+5346C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5346C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5346F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5346F4   Length              0005 (5)\n+5346F6   Flags               01 (1) 'Modification'\n+5346F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5346FB CENTRAL HEADER #200   02014B50 (33639248)\n+5346FF Created Zip Spec      14 (20) '2.0'\n+534700 Created OS            00 (0) 'MS-DOS'\n+534701 Extract Zip Spec      14 (20) '2.0'\n+534702 Extract OS            00 (0) 'MS-DOS'\n+534703 General Purpose Flag  0000 (0)\n+534705 Compression Method    0000 (0) 'Stored'\n+534707 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53470B CRC                   00000000 (0)\n+53470F Compressed Size       00000000 (0)\n+534713 Uncompressed Size     00000000 (0)\n+534717 Filename Length       005E (94)\n+534719 Extra Length          0009 (9)\n+53471B Comment Length        0000 (0)\n+53471D Disk Start            0000 (0)\n+53471F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534721 Ext File Attributes   00000000 (0)\n+534725 Local Header Offset   00066DBA (421306)\n+534729 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534729: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534787 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534789   Length              0005 (5)\n+53478B   Flags               01 (1) 'Modification'\n+53478C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534790 CENTRAL HEADER #201   02014B50 (33639248)\n+534794 Created Zip Spec      14 (20) '2.0'\n+534795 Created OS            00 (0) 'MS-DOS'\n+534796 Extract Zip Spec      14 (20) '2.0'\n+534797 Extract OS            00 (0) 'MS-DOS'\n+534798 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53479A Compression Method    0000 (0) 'Stored'\n+53479C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5347A0 CRC                   357DA477 (897426551)\n+5347A4 Compressed Size       000006C6 (1734)\n+5347A8 Uncompressed Size     000006C6 (1734)\n+5347AC Filename Length       0074 (116)\n+5347AE Extra Length          0009 (9)\n+5347B0 Comment Length        0000 (0)\n+5347B2 Disk Start            0000 (0)\n+5347B4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5347B6 Ext File Attributes   00000000 (0)\n+5347BA Local Header Offset   00066E3F (421439)\n+5347BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5347BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534834   Length              0005 (5)\n+534836   Flags               01 (1) 'Modification'\n+534837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53483B CENTRAL HEADER #202   02014B50 (33639248)\n+53483F Created Zip Spec      14 (20) '2.0'\n+534840 Created OS            00 (0) 'MS-DOS'\n+534841 Extract Zip Spec      14 (20) '2.0'\n+534842 Extract OS            00 (0) 'MS-DOS'\n+534843 General Purpose Flag  0000 (0)\n+534845 Compression Method    0000 (0) 'Stored'\n+534847 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53484B CRC                   00000000 (0)\n+53484F Compressed Size       00000000 (0)\n+534853 Uncompressed Size     00000000 (0)\n+534857 Filename Length       005B (91)\n+534859 Extra Length          0009 (9)\n+53485B Comment Length        0000 (0)\n+53485D Disk Start            0000 (0)\n+53485F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534861 Ext File Attributes   00000000 (0)\n+534865 Local Header Offset   000675B0 (423344)\n+534869 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534869: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5348C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5348C6   Length              0005 (5)\n+5348C8   Flags               01 (1) 'Modification'\n+5348C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5348CD CENTRAL HEADER #203   02014B50 (33639248)\n+5348D1 Created Zip Spec      14 (20) '2.0'\n+5348D2 Created OS            00 (0) 'MS-DOS'\n+5348D3 Extract Zip Spec      14 (20) '2.0'\n+5348D4 Extract OS            00 (0) 'MS-DOS'\n+5348D5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5348D7 Compression Method    0000 (0) 'Stored'\n+5348D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5348DD CRC                   F9CAC97B (4190816635)\n+5348E1 Compressed Size       000009BC (2492)\n+5348E5 Uncompressed Size     000009BC (2492)\n+5348E9 Filename Length       0071 (113)\n+5348EB Extra Length          0009 (9)\n+5348ED Comment Length        0000 (0)\n+5348EF Disk Start            0000 (0)\n+5348F1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5348F3 Ext File Attributes   00000000 (0)\n+5348F7 Local Header Offset   00067632 (423474)\n+5348FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5348FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53496C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53496E   Length              0005 (5)\n+534970   Flags               01 (1) 'Modification'\n+534971   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534975 CENTRAL HEADER #204   02014B50 (33639248)\n+534979 Created Zip Spec      14 (20) '2.0'\n+53497A Created OS            00 (0) 'MS-DOS'\n+53497B Extract Zip Spec      14 (20) '2.0'\n+53497C Extract OS            00 (0) 'MS-DOS'\n+53497D General Purpose Flag  0000 (0)\n+53497F Compression Method    0000 (0) 'Stored'\n+534981 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534985 CRC                   00000000 (0)\n+534989 Compressed Size       00000000 (0)\n+53498D Uncompressed Size     00000000 (0)\n+534991 Filename Length       0061 (97)\n+534993 Extra Length          0009 (9)\n+534995 Comment Length        0000 (0)\n+534997 Disk Start            0000 (0)\n+534999 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53499B Ext File Attributes   00000000 (0)\n+53499F Local Header Offset   00068096 (426134)\n+5349A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5349A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534A04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534A06   Length              0005 (5)\n+534A08   Flags               01 (1) 'Modification'\n+534A09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534A0D CENTRAL HEADER #205   02014B50 (33639248)\n+534A11 Created Zip Spec      14 (20) '2.0'\n+534A12 Created OS            00 (0) 'MS-DOS'\n+534A13 Extract Zip Spec      14 (20) '2.0'\n+534A14 Extract OS            00 (0) 'MS-DOS'\n+534A15 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+534A17 Compression Method    0000 (0) 'Stored'\n+534A19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534A1D CRC                   9DEB8C8B (2649459851)\n+534A21 Compressed Size       00000A07 (2567)\n+534A25 Uncompressed Size     00000A07 (2567)\n+534A29 Filename Length       0077 (119)\n+534A2B Extra Length          0009 (9)\n+534A2D Comment Length        0000 (0)\n+534A2F Disk Start            0000 (0)\n+534A31 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534A33 Ext File Attributes   00000000 (0)\n+534A37 Local Header Offset   0006811E (426270)\n+534A3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534A3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534AB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534AB4   Length              0005 (5)\n+534AB6   Flags               01 (1) 'Modification'\n+534AB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534ABB CENTRAL HEADER #206   02014B50 (33639248)\n+534ABF Created Zip Spec      14 (20) '2.0'\n+534AC0 Created OS            00 (0) 'MS-DOS'\n+534AC1 Extract Zip Spec      14 (20) '2.0'\n+534AC2 Extract OS            00 (0) 'MS-DOS'\n+534AC3 General Purpose Flag  0000 (0)\n+534AC5 Compression Method    0000 (0) 'Stored'\n+534AC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534ACB CRC                   00000000 (0)\n+534ACF Compressed Size       00000000 (0)\n+534AD3 Uncompressed Size     00000000 (0)\n+534AD7 Filename Length       005B (91)\n+534AD9 Extra Length          0009 (9)\n+534ADB Comment Length        0000 (0)\n+534ADD Disk Start            0000 (0)\n+534ADF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534AE1 Ext File Attributes   00000000 (0)\n+534AE5 Local Header Offset   00068BD3 (429011)\n+534AE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534AE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534B44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534B46   Length              0005 (5)\n+534B48   Flags               01 (1) 'Modification'\n+534B49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534B4D CENTRAL HEADER #207   02014B50 (33639248)\n+534B51 Created Zip Spec      14 (20) '2.0'\n+534B52 Created OS            00 (0) 'MS-DOS'\n+534B53 Extract Zip Spec      14 (20) '2.0'\n+534B54 Extract OS            00 (0) 'MS-DOS'\n+534B55 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+534B57 Compression Method    0000 (0) 'Stored'\n+534B59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534B5D CRC                   85B17459 (2242999385)\n+534B61 Compressed Size       00000DDE (3550)\n+534B65 Uncompressed Size     00000DDE (3550)\n+534B69 Filename Length       0071 (113)\n+534B6B Extra Length          0009 (9)\n+534B6D Comment Length        0000 (0)\n+534B6F Disk Start            0000 (0)\n+534B71 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534B73 Ext File Attributes   00000000 (0)\n+534B77 Local Header Offset   00068C55 (429141)\n+534B7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534B7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534BEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534BEE   Length              0005 (5)\n+534BF0   Flags               01 (1) 'Modification'\n+534BF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534BF5 CENTRAL HEADER #208   02014B50 (33639248)\n+534BF9 Created Zip Spec      14 (20) '2.0'\n+534BFA Created OS            00 (0) 'MS-DOS'\n+534BFB Extract Zip Spec      14 (20) '2.0'\n+534BFC Extract OS            00 (0) 'MS-DOS'\n+534BFD General Purpose Flag  0000 (0)\n+534BFF Compression Method    0000 (0) 'Stored'\n+534C01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534C05 CRC                   00000000 (0)\n+534C09 Compressed Size       00000000 (0)\n+534C0D Uncompressed Size     00000000 (0)\n+534C11 Filename Length       0066 (102)\n+534C13 Extra Length          0009 (9)\n+534C15 Comment Length        0000 (0)\n+534C17 Disk Start            0000 (0)\n+534C19 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534C1B Ext File Attributes   00000000 (0)\n+534C1F Local Header Offset   00069ADB (432859)\n+534C23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534C23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534C89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534C8B   Length              0005 (5)\n+534C8D   Flags               01 (1) 'Modification'\n+534C8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534C92 CENTRAL HEADER #209   02014B50 (33639248)\n+534C96 Created Zip Spec      14 (20) '2.0'\n+534C97 Created OS            00 (0) 'MS-DOS'\n+534C98 Extract Zip Spec      14 (20) '2.0'\n+534C99 Extract OS            00 (0) 'MS-DOS'\n+534C9A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+534C9C Compression Method    0000 (0) 'Stored'\n+534C9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534CA2 CRC                   9C229073 (2619510899)\n+534CA6 Compressed Size       000005CF (1487)\n+534CAA Uncompressed Size     000005CF (1487)\n+534CAE Filename Length       007C (124)\n+534CB0 Extra Length          0009 (9)\n+534CB2 Comment Length        0000 (0)\n+534CB4 Disk Start            0000 (0)\n+534CB6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534CB8 Ext File Attributes   00000000 (0)\n+534CBC Local Header Offset   00069B68 (433000)\n+534CC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534CC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534D3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534D3E   Length              0005 (5)\n+534D40   Flags               01 (1) 'Modification'\n+534D41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534D45 CENTRAL HEADER #210   02014B50 (33639248)\n+534D49 Created Zip Spec      14 (20) '2.0'\n+534D4A Created OS            00 (0) 'MS-DOS'\n+534D4B Extract Zip Spec      14 (20) '2.0'\n+534D4C Extract OS            00 (0) 'MS-DOS'\n+534D4D General Purpose Flag  0000 (0)\n+534D4F Compression Method    0000 (0) 'Stored'\n+534D51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534D55 CRC                   00000000 (0)\n+534D59 Compressed Size       00000000 (0)\n+534D5D Uncompressed Size     00000000 (0)\n+534D61 Filename Length       0066 (102)\n+534D63 Extra Length          0009 (9)\n+534D65 Comment Length        0000 (0)\n+534D67 Disk Start            0000 (0)\n+534D69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534D6B Ext File Attributes   00000000 (0)\n+534D6F Local Header Offset   0006A1EA (434666)\n+534D73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534D73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534DD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534DDB   Length              0005 (5)\n+534DDD   Flags               01 (1) 'Modification'\n+534DDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534DE2 CENTRAL HEADER #211   02014B50 (33639248)\n+534DE6 Created Zip Spec      14 (20) '2.0'\n+534DE7 Created OS            00 (0) 'MS-DOS'\n+534DE8 Extract Zip Spec      14 (20) '2.0'\n+534DE9 Extract OS            00 (0) 'MS-DOS'\n+534DEA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+534DEC Compression Method    0000 (0) 'Stored'\n+534DEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534DF2 CRC                   A57691CD (2776011213)\n+534DF6 Compressed Size       000005C2 (1474)\n+534DFA Uncompressed Size     000005C2 (1474)\n+534DFE Filename Length       007C (124)\n+534E00 Extra Length          0009 (9)\n+534E02 Comment Length        0000 (0)\n+534E04 Disk Start            0000 (0)\n+534E06 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534E08 Ext File Attributes   00000000 (0)\n+534E0C Local Header Offset   0006A277 (434807)\n+534E10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534E10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534E8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534E8E   Length              0005 (5)\n+534E90   Flags               01 (1) 'Modification'\n+534E91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534E95 CENTRAL HEADER #212   02014B50 (33639248)\n+534E99 Created Zip Spec      14 (20) '2.0'\n+534E9A Created OS            00 (0) 'MS-DOS'\n+534E9B Extract Zip Spec      14 (20) '2.0'\n+534E9C Extract OS            00 (0) 'MS-DOS'\n+534E9D General Purpose Flag  0000 (0)\n+534E9F Compression Method    0000 (0) 'Stored'\n+534EA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534EA5 CRC                   00000000 (0)\n+534EA9 Compressed Size       00000000 (0)\n+534EAD Uncompressed Size     00000000 (0)\n+534EB1 Filename Length       0065 (101)\n+534EB3 Extra Length          0009 (9)\n+534EB5 Comment Length        0000 (0)\n+534EB7 Disk Start            0000 (0)\n+534EB9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534EBB Ext File Attributes   00000000 (0)\n+534EBF Local Header Offset   0006A8EC (436460)\n+534EC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534EC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534F28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534F2A   Length              0005 (5)\n+534F2C   Flags               01 (1) 'Modification'\n+534F2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534F31 CENTRAL HEADER #213   02014B50 (33639248)\n+534F35 Created Zip Spec      14 (20) '2.0'\n+534F36 Created OS            00 (0) 'MS-DOS'\n+534F37 Extract Zip Spec      14 (20) '2.0'\n+534F38 Extract OS            00 (0) 'MS-DOS'\n+534F39 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+534F3B Compression Method    0000 (0) 'Stored'\n+534F3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534F41 CRC                   6CD31445 (1825772613)\n+534F45 Compressed Size       0000073A (1850)\n+534F49 Uncompressed Size     0000073A (1850)\n+534F4D Filename Length       007B (123)\n+534F4F Extra Length          0009 (9)\n+534F51 Comment Length        0000 (0)\n+534F53 Disk Start            0000 (0)\n+534F55 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+534F57 Ext File Attributes   00000000 (0)\n+534F5B Local Header Offset   0006A978 (436600)\n+534F5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x534F5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+534FDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+534FDC   Length              0005 (5)\n+534FDE   Flags               01 (1) 'Modification'\n+534FDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+534FE3 CENTRAL HEADER #214   02014B50 (33639248)\n+534FE7 Created Zip Spec      14 (20) '2.0'\n+534FE8 Created OS            00 (0) 'MS-DOS'\n+534FE9 Extract Zip Spec      14 (20) '2.0'\n+534FEA Extract OS            00 (0) 'MS-DOS'\n+534FEB General Purpose Flag  0000 (0)\n+534FED Compression Method    0000 (0) 'Stored'\n+534FEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+534FF3 CRC                   00000000 (0)\n+534FF7 Compressed Size       00000000 (0)\n+534FFB Uncompressed Size     00000000 (0)\n+534FFF Filename Length       0063 (99)\n+535001 Extra Length          0009 (9)\n+535003 Comment Length        0000 (0)\n+535005 Disk Start            0000 (0)\n+535007 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535009 Ext File Attributes   00000000 (0)\n+53500D Local Header Offset   0006B164 (438628)\n+535011 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535011: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535074 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535076   Length              0005 (5)\n+535078   Flags               01 (1) 'Modification'\n+535079   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53507D CENTRAL HEADER #215   02014B50 (33639248)\n+535081 Created Zip Spec      14 (20) '2.0'\n+535082 Created OS            00 (0) 'MS-DOS'\n+535083 Extract Zip Spec      14 (20) '2.0'\n+535084 Extract OS            00 (0) 'MS-DOS'\n+535085 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+535087 Compression Method    0000 (0) 'Stored'\n+535089 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53508D CRC                   C97DF8D6 (3380476118)\n+535091 Compressed Size       00000A92 (2706)\n+535095 Uncompressed Size     00000A92 (2706)\n+535099 Filename Length       0079 (121)\n+53509B Extra Length          0009 (9)\n+53509D Comment Length        0000 (0)\n+53509F Disk Start            0000 (0)\n+5350A1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5350A3 Ext File Attributes   00000000 (0)\n+5350A7 Local Header Offset   0006B1EE (438766)\n+5350AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5350AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535124 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535126   Length              0005 (5)\n+535128   Flags               01 (1) 'Modification'\n+535129   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53512D CENTRAL HEADER #216   02014B50 (33639248)\n+535131 Created Zip Spec      14 (20) '2.0'\n+535132 Created OS            00 (0) 'MS-DOS'\n+535133 Extract Zip Spec      14 (20) '2.0'\n+535134 Extract OS            00 (0) 'MS-DOS'\n+535135 General Purpose Flag  0000 (0)\n+535137 Compression Method    0000 (0) 'Stored'\n+535139 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53513D CRC                   00000000 (0)\n+535141 Compressed Size       00000000 (0)\n+535145 Uncompressed Size     00000000 (0)\n+535149 Filename Length       0023 (35)\n+53514B Extra Length          0009 (9)\n+53514D Comment Length        0000 (0)\n+53514F Disk Start            0000 (0)\n+535151 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535153 Ext File Attributes   00000000 (0)\n+535157 Local Header Offset   0006BD30 (441648)\n+53515B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53515B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53517E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535180   Length              0005 (5)\n+535182   Flags               01 (1) 'Modification'\n+535183   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535187 CENTRAL HEADER #217   02014B50 (33639248)\n+53518B Created Zip Spec      14 (20) '2.0'\n+53518C Created OS            00 (0) 'MS-DOS'\n+53518D Extract Zip Spec      14 (20) '2.0'\n+53518E Extract OS            00 (0) 'MS-DOS'\n+53518F General Purpose Flag  0000 (0)\n+535191 Compression Method    0000 (0) 'Stored'\n+535193 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535197 CRC                   00000000 (0)\n+53519B Compressed Size       00000000 (0)\n+53519F Uncompressed Size     00000000 (0)\n+5351A3 Filename Length       002C (44)\n+5351A5 Extra Length          0009 (9)\n+5351A7 Comment Length        0000 (0)\n+5351A9 Disk Start            0000 (0)\n+5351AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5351AD Ext File Attributes   00000000 (0)\n+5351B1 Local Header Offset   0006BD7A (441722)\n+5351B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5351B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5351E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5351E3   Length              0005 (5)\n+5351E5   Flags               01 (1) 'Modification'\n+5351E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5351EA CENTRAL HEADER #218   02014B50 (33639248)\n+5351EE Created Zip Spec      14 (20) '2.0'\n+5351EF Created OS            00 (0) 'MS-DOS'\n+5351F0 Extract Zip Spec      14 (20) '2.0'\n+5351F1 Extract OS            00 (0) 'MS-DOS'\n+5351F2 General Purpose Flag  0000 (0)\n+5351F4 Compression Method    0000 (0) 'Stored'\n+5351F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5351FA CRC                   00000000 (0)\n+5351FE Compressed Size       00000000 (0)\n+535202 Uncompressed Size     00000000 (0)\n+535206 Filename Length       0058 (88)\n+535208 Extra Length          0009 (9)\n+53520A Comment Length        0000 (0)\n+53520C Disk Start            0000 (0)\n+53520E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535210 Ext File Attributes   00000000 (0)\n+535214 Local Header Offset   0006BDCD (441805)\n+535218 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535218: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535270 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535272   Length              0005 (5)\n+535274   Flags               01 (1) 'Modification'\n+535275   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535279 CENTRAL HEADER #219   02014B50 (33639248)\n+53527D Created Zip Spec      14 (20) '2.0'\n+53527E Created OS            00 (0) 'MS-DOS'\n+53527F Extract Zip Spec      14 (20) '2.0'\n+535280 Extract OS            00 (0) 'MS-DOS'\n+535281 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+535283 Compression Method    0000 (0) 'Stored'\n+535285 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535289 CRC                   0B04A112 (184852754)\n+53528D Compressed Size       00000795 (1941)\n+535291 Uncompressed Size     00000795 (1941)\n+535295 Filename Length       006E (110)\n+535297 Extra Length          0009 (9)\n+535299 Comment Length        0000 (0)\n+53529B Disk Start            0000 (0)\n+53529D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53529F Ext File Attributes   00000000 (0)\n+5352A3 Local Header Offset   0006BE4C (441932)\n+5352A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5352A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535315 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535317   Length              0005 (5)\n+535319   Flags               01 (1) 'Modification'\n+53531A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53531E CENTRAL HEADER #220   02014B50 (33639248)\n+535322 Created Zip Spec      14 (20) '2.0'\n+535323 Created OS            00 (0) 'MS-DOS'\n+535324 Extract Zip Spec      14 (20) '2.0'\n+535325 Extract OS            00 (0) 'MS-DOS'\n+535326 General Purpose Flag  0000 (0)\n+535328 Compression Method    0000 (0) 'Stored'\n+53532A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53532E CRC                   00000000 (0)\n+535332 Compressed Size       00000000 (0)\n+535336 Uncompressed Size     00000000 (0)\n+53533A Filename Length       0031 (49)\n+53533C Extra Length          0009 (9)\n+53533E Comment Length        0000 (0)\n+535340 Disk Start            0000 (0)\n+535342 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535344 Ext File Attributes   00000000 (0)\n+535348 Local Header Offset   0006C686 (444038)\n+53534C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53534C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53537D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53537F   Length              0005 (5)\n+535381   Flags               01 (1) 'Modification'\n+535382   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535386 CENTRAL HEADER #221   02014B50 (33639248)\n+53538A Created Zip Spec      14 (20) '2.0'\n+53538B Created OS            00 (0) 'MS-DOS'\n+53538C Extract Zip Spec      14 (20) '2.0'\n+53538D Extract OS            00 (0) 'MS-DOS'\n+53538E General Purpose Flag  0000 (0)\n+535390 Compression Method    0000 (0) 'Stored'\n+535392 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535396 CRC                   00000000 (0)\n+53539A Compressed Size       00000000 (0)\n+53539E Uncompressed Size     00000000 (0)\n+5353A2 Filename Length       003A (58)\n+5353A4 Extra Length          0009 (9)\n+5353A6 Comment Length        0000 (0)\n+5353A8 Disk Start            0000 (0)\n+5353AA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5353AC Ext File Attributes   00000000 (0)\n+5353B0 Local Header Offset   0006C6DE (444126)\n+5353B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5353B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5353EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5353F0   Length              0005 (5)\n+5353F2   Flags               01 (1) 'Modification'\n+5353F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5353F7 CENTRAL HEADER #222   02014B50 (33639248)\n+5353FB Created Zip Spec      14 (20) '2.0'\n+5353FC Created OS            00 (0) 'MS-DOS'\n+5353FD Extract Zip Spec      14 (20) '2.0'\n+5353FE Extract OS            00 (0) 'MS-DOS'\n+5353FF General Purpose Flag  0000 (0)\n+535401 Compression Method    0000 (0) 'Stored'\n+535403 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535407 CRC                   00000000 (0)\n+53540B Compressed Size       00000000 (0)\n+53540F Uncompressed Size     00000000 (0)\n+535413 Filename Length       006C (108)\n+535415 Extra Length          0009 (9)\n+535417 Comment Length        0000 (0)\n+535419 Disk Start            0000 (0)\n+53541B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53541D Ext File Attributes   00000000 (0)\n+535421 Local Header Offset   0006C73F (444223)\n+535425 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535425: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535491 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535493   Length              0005 (5)\n+535495   Flags               01 (1) 'Modification'\n+535496   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53549A CENTRAL HEADER #223   02014B50 (33639248)\n+53549E Created Zip Spec      14 (20) '2.0'\n+53549F Created OS            00 (0) 'MS-DOS'\n+5354A0 Extract Zip Spec      14 (20) '2.0'\n+5354A1 Extract OS            00 (0) 'MS-DOS'\n+5354A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5354A4 Compression Method    0000 (0) 'Stored'\n+5354A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5354AA CRC                   9A51A289 (2589041289)\n+5354AE Compressed Size       000008AB (2219)\n+5354B2 Uncompressed Size     000008AB (2219)\n+5354B6 Filename Length       0082 (130)\n+5354B8 Extra Length          0009 (9)\n+5354BA Comment Length        0000 (0)\n+5354BC Disk Start            0000 (0)\n+5354BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5354C0 Ext File Attributes   00000000 (0)\n+5354C4 Local Header Offset   0006C7D2 (444370)\n+5354C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5354C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53554A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53554C   Length              0005 (5)\n+53554E   Flags               01 (1) 'Modification'\n+53554F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535553 CENTRAL HEADER #224   02014B50 (33639248)\n+535557 Created Zip Spec      14 (20) '2.0'\n+535558 Created OS            00 (0) 'MS-DOS'\n+535559 Extract Zip Spec      14 (20) '2.0'\n+53555A Extract OS            00 (0) 'MS-DOS'\n+53555B General Purpose Flag  0000 (0)\n+53555D Compression Method    0000 (0) 'Stored'\n+53555F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535563 CRC                   00000000 (0)\n+535567 Compressed Size       00000000 (0)\n+53556B Uncompressed Size     00000000 (0)\n+53556F Filename Length       0022 (34)\n+535571 Extra Length          0009 (9)\n+535573 Comment Length        0000 (0)\n+535575 Disk Start            0000 (0)\n+535577 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535579 Ext File Attributes   00000000 (0)\n+53557D Local Header Offset   0006D136 (446774)\n+535581 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535581: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5355A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5355A5   Length              0005 (5)\n+5355A7   Flags               01 (1) 'Modification'\n+5355A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5355AC CENTRAL HEADER #225   02014B50 (33639248)\n+5355B0 Created Zip Spec      14 (20) '2.0'\n+5355B1 Created OS            00 (0) 'MS-DOS'\n+5355B2 Extract Zip Spec      14 (20) '2.0'\n+5355B3 Extract OS            00 (0) 'MS-DOS'\n+5355B4 General Purpose Flag  0000 (0)\n+5355B6 Compression Method    0000 (0) 'Stored'\n+5355B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5355BC CRC                   00000000 (0)\n+5355C0 Compressed Size       00000000 (0)\n+5355C4 Uncompressed Size     00000000 (0)\n+5355C8 Filename Length       002B (43)\n+5355CA Extra Length          0009 (9)\n+5355CC Comment Length        0000 (0)\n+5355CE Disk Start            0000 (0)\n+5355D0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5355D2 Ext File Attributes   00000000 (0)\n+5355D6 Local Header Offset   0006D17F (446847)\n+5355DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5355DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535605 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535607   Length              0005 (5)\n+535609   Flags               01 (1) 'Modification'\n+53560A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53560E CENTRAL HEADER #226   02014B50 (33639248)\n+535612 Created Zip Spec      14 (20) '2.0'\n+535613 Created OS            00 (0) 'MS-DOS'\n+535614 Extract Zip Spec      14 (20) '2.0'\n+535615 Extract OS            00 (0) 'MS-DOS'\n+535616 General Purpose Flag  0000 (0)\n+535618 Compression Method    0000 (0) 'Stored'\n+53561A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53561E CRC                   00000000 (0)\n+535622 Compressed Size       00000000 (0)\n+535626 Uncompressed Size     00000000 (0)\n+53562A Filename Length       004D (77)\n+53562C Extra Length          0009 (9)\n+53562E Comment Length        0000 (0)\n+535630 Disk Start            0000 (0)\n+535632 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535634 Ext File Attributes   00000000 (0)\n+535638 Local Header Offset   0006D1D1 (446929)\n+53563C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53563C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535689 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53568B   Length              0005 (5)\n+53568D   Flags               01 (1) 'Modification'\n+53568E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535692 CENTRAL HEADER #227   02014B50 (33639248)\n+535696 Created Zip Spec      14 (20) '2.0'\n+535697 Created OS            00 (0) 'MS-DOS'\n+535698 Extract Zip Spec      14 (20) '2.0'\n+535699 Extract OS            00 (0) 'MS-DOS'\n+53569A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53569C Compression Method    0000 (0) 'Stored'\n+53569E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5356A2 CRC                   BEAE3D9C (3199090076)\n+5356A6 Compressed Size       0000396F (14703)\n+5356AA Uncompressed Size     0000396F (14703)\n+5356AE Filename Length       0063 (99)\n+5356B0 Extra Length          0009 (9)\n+5356B2 Comment Length        0000 (0)\n+5356B4 Disk Start            0000 (0)\n+5356B6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5356B8 Ext File Attributes   00000000 (0)\n+5356BC Local Header Offset   0006D245 (447045)\n+5356C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5356C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535723 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535725   Length              0005 (5)\n+535727   Flags               01 (1) 'Modification'\n+535728   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53572C CENTRAL HEADER #228   02014B50 (33639248)\n+535730 Created Zip Spec      14 (20) '2.0'\n+535731 Created OS            00 (0) 'MS-DOS'\n+535732 Extract Zip Spec      14 (20) '2.0'\n+535733 Extract OS            00 (0) 'MS-DOS'\n+535734 General Purpose Flag  0000 (0)\n+535736 Compression Method    0000 (0) 'Stored'\n+535738 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53573C CRC                   00000000 (0)\n+535740 Compressed Size       00000000 (0)\n+535744 Uncompressed Size     00000000 (0)\n+535748 Filename Length       0030 (48)\n+53574A Extra Length          0009 (9)\n+53574C Comment Length        0000 (0)\n+53574E Disk Start            0000 (0)\n+535750 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535752 Ext File Attributes   00000000 (0)\n+535756 Local Header Offset   00070C4E (461902)\n+53575A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53575A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53578A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53578C   Length              0005 (5)\n+53578E   Flags               01 (1) 'Modification'\n+53578F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535793 CENTRAL HEADER #229   02014B50 (33639248)\n+535797 Created Zip Spec      14 (20) '2.0'\n+535798 Created OS            00 (0) 'MS-DOS'\n+535799 Extract Zip Spec      14 (20) '2.0'\n+53579A Extract OS            00 (0) 'MS-DOS'\n+53579B General Purpose Flag  0000 (0)\n+53579D Compression Method    0000 (0) 'Stored'\n+53579F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5357A3 CRC                   00000000 (0)\n+5357A7 Compressed Size       00000000 (0)\n+5357AB Uncompressed Size     00000000 (0)\n+5357AF Filename Length       0039 (57)\n+5357B1 Extra Length          0009 (9)\n+5357B3 Comment Length        0000 (0)\n+5357B5 Disk Start            0000 (0)\n+5357B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5357B9 Ext File Attributes   00000000 (0)\n+5357BD Local Header Offset   00070CA5 (461989)\n+5357C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5357C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5357FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5357FC   Length              0005 (5)\n+5357FE   Flags               01 (1) 'Modification'\n+5357FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535803 CENTRAL HEADER #230   02014B50 (33639248)\n+535807 Created Zip Spec      14 (20) '2.0'\n+535808 Created OS            00 (0) 'MS-DOS'\n+535809 Extract Zip Spec      14 (20) '2.0'\n+53580A Extract OS            00 (0) 'MS-DOS'\n+53580B General Purpose Flag  0000 (0)\n+53580D Compression Method    0000 (0) 'Stored'\n+53580F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535813 CRC                   00000000 (0)\n+535817 Compressed Size       00000000 (0)\n+53581B Uncompressed Size     00000000 (0)\n+53581F Filename Length       006A (106)\n+535821 Extra Length          0009 (9)\n+535823 Comment Length        0000 (0)\n+535825 Disk Start            0000 (0)\n+535827 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535829 Ext File Attributes   00000000 (0)\n+53582D Local Header Offset   00070D05 (462085)\n+535831 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535831: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53589B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53589D   Length              0005 (5)\n+53589F   Flags               01 (1) 'Modification'\n+5358A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5358A4 CENTRAL HEADER #231   02014B50 (33639248)\n+5358A8 Created Zip Spec      14 (20) '2.0'\n+5358A9 Created OS            00 (0) 'MS-DOS'\n+5358AA Extract Zip Spec      14 (20) '2.0'\n+5358AB Extract OS            00 (0) 'MS-DOS'\n+5358AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5358AE Compression Method    0000 (0) 'Stored'\n+5358B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5358B4 CRC                   29D620BA (701898938)\n+5358B8 Compressed Size       00002421 (9249)\n+5358BC Uncompressed Size     00002421 (9249)\n+5358C0 Filename Length       0080 (128)\n+5358C2 Extra Length          0009 (9)\n+5358C4 Comment Length        0000 (0)\n+5358C6 Disk Start            0000 (0)\n+5358C8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5358CA Ext File Attributes   00000000 (0)\n+5358CE Local Header Offset   00070D96 (462230)\n+5358D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5358D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535952 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535954   Length              0005 (5)\n+535956   Flags               01 (1) 'Modification'\n+535957   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53595B CENTRAL HEADER #232   02014B50 (33639248)\n+53595F Created Zip Spec      14 (20) '2.0'\n+535960 Created OS            00 (0) 'MS-DOS'\n+535961 Extract Zip Spec      14 (20) '2.0'\n+535962 Extract OS            00 (0) 'MS-DOS'\n+535963 General Purpose Flag  0000 (0)\n+535965 Compression Method    0000 (0) 'Stored'\n+535967 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53596B CRC                   00000000 (0)\n+53596F Compressed Size       00000000 (0)\n+535973 Uncompressed Size     00000000 (0)\n+535977 Filename Length       003C (60)\n+535979 Extra Length          0009 (9)\n+53597B Comment Length        0000 (0)\n+53597D Disk Start            0000 (0)\n+53597F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535981 Ext File Attributes   00000000 (0)\n+535985 Local Header Offset   0007326E (471662)\n+535989 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535989: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5359C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5359C7   Length              0005 (5)\n+5359C9   Flags               01 (1) 'Modification'\n+5359CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5359CE CENTRAL HEADER #233   02014B50 (33639248)\n+5359D2 Created Zip Spec      14 (20) '2.0'\n+5359D3 Created OS            00 (0) 'MS-DOS'\n+5359D4 Extract Zip Spec      14 (20) '2.0'\n+5359D5 Extract OS            00 (0) 'MS-DOS'\n+5359D6 General Purpose Flag  0000 (0)\n+5359D8 Compression Method    0000 (0) 'Stored'\n+5359DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5359DE CRC                   00000000 (0)\n+5359E2 Compressed Size       00000000 (0)\n+5359E6 Uncompressed Size     00000000 (0)\n+5359EA Filename Length       0045 (69)\n+5359EC Extra Length          0009 (9)\n+5359EE Comment Length        0000 (0)\n+5359F0 Disk Start            0000 (0)\n+5359F2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5359F4 Ext File Attributes   00000000 (0)\n+5359F8 Local Header Offset   000732D1 (471761)\n+5359FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5359FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535A41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535A43   Length              0005 (5)\n+535A45   Flags               01 (1) 'Modification'\n+535A46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535A4A CENTRAL HEADER #234   02014B50 (33639248)\n+535A4E Created Zip Spec      14 (20) '2.0'\n+535A4F Created OS            00 (0) 'MS-DOS'\n+535A50 Extract Zip Spec      14 (20) '2.0'\n+535A51 Extract OS            00 (0) 'MS-DOS'\n+535A52 General Purpose Flag  0000 (0)\n+535A54 Compression Method    0000 (0) 'Stored'\n+535A56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535A5A CRC                   00000000 (0)\n+535A5E Compressed Size       00000000 (0)\n+535A62 Uncompressed Size     00000000 (0)\n+535A66 Filename Length       0063 (99)\n+535A68 Extra Length          0009 (9)\n+535A6A Comment Length        0000 (0)\n+535A6C Disk Start            0000 (0)\n+535A6E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535A70 Ext File Attributes   00000000 (0)\n+535A74 Local Header Offset   0007333D (471869)\n+535A78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535A78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535ADB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535ADD   Length              0005 (5)\n+535ADF   Flags               01 (1) 'Modification'\n+535AE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535AE4 CENTRAL HEADER #235   02014B50 (33639248)\n+535AE8 Created Zip Spec      14 (20) '2.0'\n+535AE9 Created OS            00 (0) 'MS-DOS'\n+535AEA Extract Zip Spec      14 (20) '2.0'\n+535AEB Extract OS            00 (0) 'MS-DOS'\n+535AEC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+535AEE Compression Method    0000 (0) 'Stored'\n+535AF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535AF4 CRC                   9ED7BE90 (2664939152)\n+535AF8 Compressed Size       000036E7 (14055)\n+535AFC Uncompressed Size     000036E7 (14055)\n+535B00 Filename Length       0079 (121)\n+535B02 Extra Length          0009 (9)\n+535B04 Comment Length        0000 (0)\n+535B06 Disk Start            0000 (0)\n+535B08 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535B0A Ext File Attributes   00000000 (0)\n+535B0E Local Header Offset   000733C7 (472007)\n+535B12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535B12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535B8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535B8D   Length              0005 (5)\n+535B8F   Flags               01 (1) 'Modification'\n+535B90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535B94 CENTRAL HEADER #236   02014B50 (33639248)\n+535B98 Created Zip Spec      14 (20) '2.0'\n+535B99 Created OS            00 (0) 'MS-DOS'\n+535B9A Extract Zip Spec      14 (20) '2.0'\n+535B9B Extract OS            00 (0) 'MS-DOS'\n+535B9C General Purpose Flag  0000 (0)\n+535B9E Compression Method    0000 (0) 'Stored'\n+535BA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535BA4 CRC                   00000000 (0)\n+535BA8 Compressed Size       00000000 (0)\n+535BAC Uncompressed Size     00000000 (0)\n+535BB0 Filename Length       0063 (99)\n+535BB2 Extra Length          0009 (9)\n+535BB4 Comment Length        0000 (0)\n+535BB6 Disk Start            0000 (0)\n+535BB8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535BBA Ext File Attributes   00000000 (0)\n+535BBE Local Header Offset   00076B5E (486238)\n+535BC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535BC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535C25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535C27   Length              0005 (5)\n+535C29   Flags               01 (1) 'Modification'\n+535C2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535C2E CENTRAL HEADER #237   02014B50 (33639248)\n+535C32 Created Zip Spec      14 (20) '2.0'\n+535C33 Created OS            00 (0) 'MS-DOS'\n+535C34 Extract Zip Spec      14 (20) '2.0'\n+535C35 Extract OS            00 (0) 'MS-DOS'\n+535C36 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+535C38 Compression Method    0000 (0) 'Stored'\n+535C3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535C3E CRC                   B51FDD91 (3038764433)\n+535C42 Compressed Size       00004792 (18322)\n+535C46 Uncompressed Size     00004792 (18322)\n+535C4A Filename Length       0079 (121)\n+535C4C Extra Length          0009 (9)\n+535C4E Comment Length        0000 (0)\n+535C50 Disk Start            0000 (0)\n+535C52 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535C54 Ext File Attributes   00000000 (0)\n+535C58 Local Header Offset   00076BE8 (486376)\n+535C5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535C5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535CD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535CD7   Length              0005 (5)\n+535CD9   Flags               01 (1) 'Modification'\n+535CDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535CDE CENTRAL HEADER #238   02014B50 (33639248)\n+535CE2 Created Zip Spec      14 (20) '2.0'\n+535CE3 Created OS            00 (0) 'MS-DOS'\n+535CE4 Extract Zip Spec      14 (20) '2.0'\n+535CE5 Extract OS            00 (0) 'MS-DOS'\n+535CE6 General Purpose Flag  0000 (0)\n+535CE8 Compression Method    0000 (0) 'Stored'\n+535CEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535CEE CRC                   00000000 (0)\n+535CF2 Compressed Size       00000000 (0)\n+535CF6 Uncompressed Size     00000000 (0)\n+535CFA Filename Length       0065 (101)\n+535CFC Extra Length          0009 (9)\n+535CFE Comment Length        0000 (0)\n+535D00 Disk Start            0000 (0)\n+535D02 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535D04 Ext File Attributes   00000000 (0)\n+535D08 Local Header Offset   0007B42A (504874)\n+535D0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535D0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535D71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535D73   Length              0005 (5)\n+535D75   Flags               01 (1) 'Modification'\n+535D76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535D7A CENTRAL HEADER #239   02014B50 (33639248)\n+535D7E Created Zip Spec      14 (20) '2.0'\n+535D7F Created OS            00 (0) 'MS-DOS'\n+535D80 Extract Zip Spec      14 (20) '2.0'\n+535D81 Extract OS            00 (0) 'MS-DOS'\n+535D82 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+535D84 Compression Method    0000 (0) 'Stored'\n+535D86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535D8A CRC                   27CFA48B (667919499)\n+535D8E Compressed Size       00005DDC (24028)\n+535D92 Uncompressed Size     00005DDC (24028)\n+535D96 Filename Length       007B (123)\n+535D98 Extra Length          0009 (9)\n+535D9A Comment Length        0000 (0)\n+535D9C Disk Start            0000 (0)\n+535D9E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535DA0 Ext File Attributes   00000000 (0)\n+535DA4 Local Header Offset   0007B4B6 (505014)\n+535DA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535DA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535E23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535E25   Length              0005 (5)\n+535E27   Flags               01 (1) 'Modification'\n+535E28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535E2C CENTRAL HEADER #240   02014B50 (33639248)\n+535E30 Created Zip Spec      14 (20) '2.0'\n+535E31 Created OS            00 (0) 'MS-DOS'\n+535E32 Extract Zip Spec      14 (20) '2.0'\n+535E33 Extract OS            00 (0) 'MS-DOS'\n+535E34 General Purpose Flag  0000 (0)\n+535E36 Compression Method    0000 (0) 'Stored'\n+535E38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535E3C CRC                   00000000 (0)\n+535E40 Compressed Size       00000000 (0)\n+535E44 Uncompressed Size     00000000 (0)\n+535E48 Filename Length       0069 (105)\n+535E4A Extra Length          0009 (9)\n+535E4C Comment Length        0000 (0)\n+535E4E Disk Start            0000 (0)\n+535E50 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535E52 Ext File Attributes   00000000 (0)\n+535E56 Local Header Offset   00081344 (529220)\n+535E5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535E5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535EC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535EC5   Length              0005 (5)\n+535EC7   Flags               01 (1) 'Modification'\n+535EC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535ECC CENTRAL HEADER #241   02014B50 (33639248)\n+535ED0 Created Zip Spec      14 (20) '2.0'\n+535ED1 Created OS            00 (0) 'MS-DOS'\n+535ED2 Extract Zip Spec      14 (20) '2.0'\n+535ED3 Extract OS            00 (0) 'MS-DOS'\n+535ED4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+535ED6 Compression Method    0000 (0) 'Stored'\n+535ED8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535EDC CRC                   620AB78F (1644869519)\n+535EE0 Compressed Size       00003B3A (15162)\n+535EE4 Uncompressed Size     00003B3A (15162)\n+535EE8 Filename Length       007F (127)\n+535EEA Extra Length          0009 (9)\n+535EEC Comment Length        0000 (0)\n+535EEE Disk Start            0000 (0)\n+535EF0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535EF2 Ext File Attributes   00000000 (0)\n+535EF6 Local Header Offset   000813D4 (529364)\n+535EFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535EFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+535F79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+535F7B   Length              0005 (5)\n+535F7D   Flags               01 (1) 'Modification'\n+535F7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+535F82 CENTRAL HEADER #242   02014B50 (33639248)\n+535F86 Created Zip Spec      14 (20) '2.0'\n+535F87 Created OS            00 (0) 'MS-DOS'\n+535F88 Extract Zip Spec      14 (20) '2.0'\n+535F89 Extract OS            00 (0) 'MS-DOS'\n+535F8A General Purpose Flag  0000 (0)\n+535F8C Compression Method    0000 (0) 'Stored'\n+535F8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+535F92 CRC                   00000000 (0)\n+535F96 Compressed Size       00000000 (0)\n+535F9A Uncompressed Size     00000000 (0)\n+535F9E Filename Length       0069 (105)\n+535FA0 Extra Length          0009 (9)\n+535FA2 Comment Length        0000 (0)\n+535FA4 Disk Start            0000 (0)\n+535FA6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+535FA8 Ext File Attributes   00000000 (0)\n+535FAC Local Header Offset   00084FC4 (544708)\n+535FB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x535FB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536019 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53601B   Length              0005 (5)\n+53601D   Flags               01 (1) 'Modification'\n+53601E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536022 CENTRAL HEADER #243   02014B50 (33639248)\n+536026 Created Zip Spec      14 (20) '2.0'\n+536027 Created OS            00 (0) 'MS-DOS'\n+536028 Extract Zip Spec      14 (20) '2.0'\n+536029 Extract OS            00 (0) 'MS-DOS'\n+53602A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53602C Compression Method    0000 (0) 'Stored'\n+53602E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536032 CRC                   937A07E6 (2474248166)\n+536036 Compressed Size       00004869 (18537)\n+53603A Uncompressed Size     00004869 (18537)\n+53603E Filename Length       007F (127)\n+536040 Extra Length          0009 (9)\n+536042 Comment Length        0000 (0)\n+536044 Disk Start            0000 (0)\n+536046 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536048 Ext File Attributes   00000000 (0)\n+53604C Local Header Offset   00085054 (544852)\n+536050 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536050: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5360CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5360D1   Length              0005 (5)\n+5360D3   Flags               01 (1) 'Modification'\n+5360D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5360D8 CENTRAL HEADER #244   02014B50 (33639248)\n+5360DC Created Zip Spec      14 (20) '2.0'\n+5360DD Created OS            00 (0) 'MS-DOS'\n+5360DE Extract Zip Spec      14 (20) '2.0'\n+5360DF Extract OS            00 (0) 'MS-DOS'\n+5360E0 General Purpose Flag  0000 (0)\n+5360E2 Compression Method    0000 (0) 'Stored'\n+5360E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5360E8 CRC                   00000000 (0)\n+5360EC Compressed Size       00000000 (0)\n+5360F0 Uncompressed Size     00000000 (0)\n+5360F4 Filename Length       006D (109)\n+5360F6 Extra Length          0009 (9)\n+5360F8 Comment Length        0000 (0)\n+5360FA Disk Start            0000 (0)\n+5360FC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5360FE Ext File Attributes   00000000 (0)\n+536102 Local Header Offset   00089973 (563571)\n+536106 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536106: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536173 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536175   Length              0005 (5)\n+536177   Flags               01 (1) 'Modification'\n+536178   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53617C CENTRAL HEADER #245   02014B50 (33639248)\n+536180 Created Zip Spec      14 (20) '2.0'\n+536181 Created OS            00 (0) 'MS-DOS'\n+536182 Extract Zip Spec      14 (20) '2.0'\n+536183 Extract OS            00 (0) 'MS-DOS'\n+536184 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+536186 Compression Method    0000 (0) 'Stored'\n+536188 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53618C CRC                   53DFF1D7 (1407185367)\n+536190 Compressed Size       00000ADF (2783)\n+536194 Uncompressed Size     00000ADF (2783)\n+536198 Filename Length       0083 (131)\n+53619A Extra Length          0009 (9)\n+53619C Comment Length        0000 (0)\n+53619E Disk Start            0000 (0)\n+5361A0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5361A2 Ext File Attributes   00000000 (0)\n+5361A6 Local Header Offset   00089A07 (563719)\n+5361AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5361AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53622D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53622F   Length              0005 (5)\n+536231   Flags               01 (1) 'Modification'\n+536232   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536236 CENTRAL HEADER #246   02014B50 (33639248)\n+53623A Created Zip Spec      14 (20) '2.0'\n+53623B Created OS            00 (0) 'MS-DOS'\n+53623C Extract Zip Spec      14 (20) '2.0'\n+53623D Extract OS            00 (0) 'MS-DOS'\n+53623E General Purpose Flag  0000 (0)\n+536240 Compression Method    0000 (0) 'Stored'\n+536242 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536246 CRC                   00000000 (0)\n+53624A Compressed Size       00000000 (0)\n+53624E Uncompressed Size     00000000 (0)\n+536252 Filename Length       0069 (105)\n+536254 Extra Length          0009 (9)\n+536256 Comment Length        0000 (0)\n+536258 Disk Start            0000 (0)\n+53625A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53625C Ext File Attributes   00000000 (0)\n+536260 Local Header Offset   0008A5A0 (566688)\n+536264 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536264: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5362CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5362CF   Length              0005 (5)\n+5362D1   Flags               01 (1) 'Modification'\n+5362D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5362D6 CENTRAL HEADER #247   02014B50 (33639248)\n+5362DA Created Zip Spec      14 (20) '2.0'\n+5362DB Created OS            00 (0) 'MS-DOS'\n+5362DC Extract Zip Spec      14 (20) '2.0'\n+5362DD Extract OS            00 (0) 'MS-DOS'\n+5362DE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5362E0 Compression Method    0000 (0) 'Stored'\n+5362E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5362E6 CRC                   6D3A5445 (1832539205)\n+5362EA Compressed Size       00000939 (2361)\n+5362EE Uncompressed Size     00000939 (2361)\n+5362F2 Filename Length       007F (127)\n+5362F4 Extra Length          0009 (9)\n+5362F6 Comment Length        0000 (0)\n+5362F8 Disk Start            0000 (0)\n+5362FA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5362FC Ext File Attributes   00000000 (0)\n+536300 Local Header Offset   0008A630 (566832)\n+536304 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536304: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536383 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536385   Length              0005 (5)\n+536387   Flags               01 (1) 'Modification'\n+536388   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53638C CENTRAL HEADER #248   02014B50 (33639248)\n+536390 Created Zip Spec      14 (20) '2.0'\n+536391 Created OS            00 (0) 'MS-DOS'\n+536392 Extract Zip Spec      14 (20) '2.0'\n+536393 Extract OS            00 (0) 'MS-DOS'\n+536394 General Purpose Flag  0000 (0)\n+536396 Compression Method    0000 (0) 'Stored'\n+536398 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53639C CRC                   00000000 (0)\n+5363A0 Compressed Size       00000000 (0)\n+5363A4 Uncompressed Size     00000000 (0)\n+5363A8 Filename Length       0078 (120)\n+5363AA Extra Length          0009 (9)\n+5363AC Comment Length        0000 (0)\n+5363AE Disk Start            0000 (0)\n+5363B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5363B2 Ext File Attributes   00000000 (0)\n+5363B6 Local Header Offset   0008B01F (569375)\n+5363BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5363BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536432 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536434   Length              0005 (5)\n+536436   Flags               01 (1) 'Modification'\n+536437   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53643B CENTRAL HEADER #249   02014B50 (33639248)\n+53643F Created Zip Spec      14 (20) '2.0'\n+536440 Created OS            00 (0) 'MS-DOS'\n+536441 Extract Zip Spec      14 (20) '2.0'\n+536442 Extract OS            00 (0) 'MS-DOS'\n+536443 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+536445 Compression Method    0000 (0) 'Stored'\n+536447 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53644B CRC                   5C6B1924 (1550522660)\n+53644F Compressed Size       00000DDD (3549)\n+536453 Uncompressed Size     00000DDD (3549)\n+536457 Filename Length       008E (142)\n+536459 Extra Length          0009 (9)\n+53645B Comment Length        0000 (0)\n+53645D Disk Start            0000 (0)\n+53645F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536461 Ext File Attributes   00000000 (0)\n+536465 Local Header Offset   0008B0BE (569534)\n+536469 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x5364EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x536469: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-536578 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53657A   Length              0005 (5)\n-53657C   Flags               01 (1) 'Modification'\n-53657D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536581 CENTRAL HEADER #250   02014B50 (33639248)\n-536585 Created Zip Spec      14 (20) '2.0'\n-536586 Created OS            00 (0) 'MS-DOS'\n-536587 Extract Zip Spec      14 (20) '2.0'\n-536588 Extract OS            00 (0) 'MS-DOS'\n-536589 General Purpose Flag  0000 (0)\n-53658B Compression Method    0000 (0) 'Stored'\n-53658D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536591 CRC                   00000000 (0)\n-536595 Compressed Size       00000000 (0)\n-536599 Uncompressed Size     00000000 (0)\n-53659D Filename Length       0063 (99)\n-53659F Extra Length          0009 (9)\n-5365A1 Comment Length        0000 (0)\n-5365A3 Disk Start            0000 (0)\n-5365A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5365A7 Ext File Attributes   00000000 (0)\n-5365AB Local Header Offset   0008BFC9 (573385)\n-5365AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5365AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536612 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536614   Length              0005 (5)\n-536616   Flags               01 (1) 'Modification'\n-536617   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53661B CENTRAL HEADER #251   02014B50 (33639248)\n-53661F Created Zip Spec      14 (20) '2.0'\n-536620 Created OS            00 (0) 'MS-DOS'\n-536621 Extract Zip Spec      14 (20) '2.0'\n-536622 Extract OS            00 (0) 'MS-DOS'\n-536623 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536625 Compression Method    0000 (0) 'Stored'\n-536627 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53662B CRC                   C7DF88BB (3353315515)\n-53662F Compressed Size       00009335 (37685)\n-536633 Uncompressed Size     00009335 (37685)\n-536637 Filename Length       0079 (121)\n-536639 Extra Length          0009 (9)\n-53663B Comment Length        0000 (0)\n-53663D Disk Start            0000 (0)\n-53663F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536641 Ext File Attributes   00000000 (0)\n-536645 Local Header Offset   0008C053 (573523)\n-536649 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536649: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5366C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5366C4   Length              0005 (5)\n-5366C6   Flags               01 (1) 'Modification'\n-5366C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5366CB CENTRAL HEADER #252   02014B50 (33639248)\n-5366CF Created Zip Spec      14 (20) '2.0'\n-5366D0 Created OS            00 (0) 'MS-DOS'\n-5366D1 Extract Zip Spec      14 (20) '2.0'\n-5366D2 Extract OS            00 (0) 'MS-DOS'\n-5366D3 General Purpose Flag  0000 (0)\n-5366D5 Compression Method    0000 (0) 'Stored'\n-5366D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5366DB CRC                   00000000 (0)\n-5366DF Compressed Size       00000000 (0)\n-5366E3 Uncompressed Size     00000000 (0)\n-5366E7 Filename Length       006C (108)\n-5366E9 Extra Length          0009 (9)\n-5366EB Comment Length        0000 (0)\n-5366ED Disk Start            0000 (0)\n-5366EF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5366F1 Ext File Attributes   00000000 (0)\n-5366F5 Local Header Offset   00095438 (611384)\n-5366F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5366F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536765 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536767   Length              0005 (5)\n-536769   Flags               01 (1) 'Modification'\n-53676A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53676E CENTRAL HEADER #253   02014B50 (33639248)\n-536772 Created Zip Spec      14 (20) '2.0'\n-536773 Created OS            00 (0) 'MS-DOS'\n-536774 Extract Zip Spec      14 (20) '2.0'\n-536775 Extract OS            00 (0) 'MS-DOS'\n-536776 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536778 Compression Method    0000 (0) 'Stored'\n-53677A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53677E CRC                   217BBE0B (561757707)\n-536782 Compressed Size       00001BB1 (7089)\n-536786 Uncompressed Size     00001BB1 (7089)\n-53678A Filename Length       0082 (130)\n-53678C Extra Length          0009 (9)\n-53678E Comment Length        0000 (0)\n-536790 Disk Start            0000 (0)\n-536792 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536794 Ext File Attributes   00000000 (0)\n-536798 Local Header Offset   000954CB (611531)\n-53679C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53679C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53681E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536820   Length              0005 (5)\n-536822   Flags               01 (1) 'Modification'\n-536823   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536827 CENTRAL HEADER #254   02014B50 (33639248)\n-53682B Created Zip Spec      14 (20) '2.0'\n-53682C Created OS            00 (0) 'MS-DOS'\n-53682D Extract Zip Spec      14 (20) '2.0'\n-53682E Extract OS            00 (0) 'MS-DOS'\n-53682F General Purpose Flag  0000 (0)\n-536831 Compression Method    0000 (0) 'Stored'\n-536833 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536837 CRC                   00000000 (0)\n-53683B Compressed Size       00000000 (0)\n-53683F Uncompressed Size     00000000 (0)\n-536843 Filename Length       0069 (105)\n-536845 Extra Length          0009 (9)\n-536847 Comment Length        0000 (0)\n-536849 Disk Start            0000 (0)\n-53684B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53684D Ext File Attributes   00000000 (0)\n-536851 Local Header Offset   00097135 (618805)\n-536855 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536855: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5368BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5368C0   Length              0005 (5)\n-5368C2   Flags               01 (1) 'Modification'\n-5368C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5368C7 CENTRAL HEADER #255   02014B50 (33639248)\n-5368CB Created Zip Spec      14 (20) '2.0'\n-5368CC Created OS            00 (0) 'MS-DOS'\n-5368CD Extract Zip Spec      14 (20) '2.0'\n-5368CE Extract OS            00 (0) 'MS-DOS'\n-5368CF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5368D1 Compression Method    0000 (0) 'Stored'\n-5368D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5368D7 CRC                   CF72F6D0 (3480418000)\n-5368DB Compressed Size       00004A6A (19050)\n-5368DF Uncompressed Size     00004A6A (19050)\n-5368E3 Filename Length       007F (127)\n-5368E5 Extra Length          0009 (9)\n-5368E7 Comment Length        0000 (0)\n-5368E9 Disk Start            0000 (0)\n-5368EB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5368ED Ext File Attributes   00000000 (0)\n-5368F1 Local Header Offset   000971C5 (618949)\n-5368F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5368F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536974 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536976   Length              0005 (5)\n-536978   Flags               01 (1) 'Modification'\n-536979   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53697D CENTRAL HEADER #256   02014B50 (33639248)\n-536981 Created Zip Spec      14 (20) '2.0'\n-536982 Created OS            00 (0) 'MS-DOS'\n-536983 Extract Zip Spec      14 (20) '2.0'\n-536984 Extract OS            00 (0) 'MS-DOS'\n-536985 General Purpose Flag  0000 (0)\n-536987 Compression Method    0000 (0) 'Stored'\n-536989 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53698D CRC                   00000000 (0)\n-536991 Compressed Size       00000000 (0)\n-536995 Uncompressed Size     00000000 (0)\n-536999 Filename Length       0029 (41)\n-53699B Extra Length          0009 (9)\n-53699D Comment Length        0000 (0)\n-53699F Disk Start            0000 (0)\n-5369A1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5369A3 Ext File Attributes   00000000 (0)\n-5369A7 Local Header Offset   0009BCE5 (638181)\n-5369AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5369AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5369D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5369D6   Length              0005 (5)\n-5369D8   Flags               01 (1) 'Modification'\n-5369D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5369DD CENTRAL HEADER #257   02014B50 (33639248)\n-5369E1 Created Zip Spec      14 (20) '2.0'\n-5369E2 Created OS            00 (0) 'MS-DOS'\n-5369E3 Extract Zip Spec      14 (20) '2.0'\n-5369E4 Extract OS            00 (0) 'MS-DOS'\n-5369E5 General Purpose Flag  0000 (0)\n-5369E7 Compression Method    0000 (0) 'Stored'\n-5369E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5369ED CRC                   00000000 (0)\n-5369F1 Compressed Size       00000000 (0)\n-5369F5 Uncompressed Size     00000000 (0)\n-5369F9 Filename Length       0032 (50)\n-5369FB Extra Length          0009 (9)\n-5369FD Comment Length        0000 (0)\n-5369FF Disk Start            0000 (0)\n-536A01 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536A03 Ext File Attributes   00000000 (0)\n-536A07 Local Header Offset   0009BD35 (638261)\n-536A0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536A0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536A3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536A3F   Length              0005 (5)\n-536A41   Flags               01 (1) 'Modification'\n-536A42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536A46 CENTRAL HEADER #258   02014B50 (33639248)\n-536A4A Created Zip Spec      14 (20) '2.0'\n-536A4B Created OS            00 (0) 'MS-DOS'\n-536A4C Extract Zip Spec      14 (20) '2.0'\n-536A4D Extract OS            00 (0) 'MS-DOS'\n-536A4E General Purpose Flag  0000 (0)\n-536A50 Compression Method    0000 (0) 'Stored'\n-536A52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536A56 CRC                   00000000 (0)\n-536A5A Compressed Size       00000000 (0)\n-536A5E Uncompressed Size     00000000 (0)\n-536A62 Filename Length       006C (108)\n-536A64 Extra Length          0009 (9)\n-536A66 Comment Length        0000 (0)\n-536A68 Disk Start            0000 (0)\n-536A6A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536A6C Ext File Attributes   00000000 (0)\n-536A70 Local Header Offset   0009BD8E (638350)\n-536A74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536A74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536AE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536AE2   Length              0005 (5)\n-536AE4   Flags               01 (1) 'Modification'\n-536AE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536AE9 CENTRAL HEADER #259   02014B50 (33639248)\n-536AED Created Zip Spec      14 (20) '2.0'\n-536AEE Created OS            00 (0) 'MS-DOS'\n-536AEF Extract Zip Spec      14 (20) '2.0'\n-536AF0 Extract OS            00 (0) 'MS-DOS'\n-536AF1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536AF3 Compression Method    0000 (0) 'Stored'\n-536AF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536AF9 CRC                   DCEFA272 (3706692210)\n-536AFD Compressed Size       000009D3 (2515)\n-536B01 Uncompressed Size     000009D3 (2515)\n-536B05 Filename Length       0082 (130)\n-536B07 Extra Length          0009 (9)\n-536B09 Comment Length        0000 (0)\n-536B0B Disk Start            0000 (0)\n-536B0D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536B0F Ext File Attributes   00000000 (0)\n-536B13 Local Header Offset   0009BE21 (638497)\n-536B17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536B17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536B99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536B9B   Length              0005 (5)\n-536B9D   Flags               01 (1) 'Modification'\n-536B9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536BA2 CENTRAL HEADER #260   02014B50 (33639248)\n-536BA6 Created Zip Spec      14 (20) '2.0'\n-536BA7 Created OS            00 (0) 'MS-DOS'\n-536BA8 Extract Zip Spec      14 (20) '2.0'\n-536BA9 Extract OS            00 (0) 'MS-DOS'\n-536BAA General Purpose Flag  0000 (0)\n-536BAC Compression Method    0000 (0) 'Stored'\n-536BAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536BB2 CRC                   00000000 (0)\n-536BB6 Compressed Size       00000000 (0)\n-536BBA Uncompressed Size     00000000 (0)\n-536BBE Filename Length       006E (110)\n-536BC0 Extra Length          0009 (9)\n-536BC2 Comment Length        0000 (0)\n-536BC4 Disk Start            0000 (0)\n-536BC6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536BC8 Ext File Attributes   00000000 (0)\n-536BCC Local Header Offset   0009C8AD (641197)\n-536BD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536BD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536C3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536C40   Length              0005 (5)\n-536C42   Flags               01 (1) 'Modification'\n-536C43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536C47 CENTRAL HEADER #261   02014B50 (33639248)\n-536C4B Created Zip Spec      14 (20) '2.0'\n-536C4C Created OS            00 (0) 'MS-DOS'\n-536C4D Extract Zip Spec      14 (20) '2.0'\n-536C4E Extract OS            00 (0) 'MS-DOS'\n-536C4F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536C51 Compression Method    0000 (0) 'Stored'\n-536C53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536C57 CRC                   26E963FE (652829694)\n-536C5B Compressed Size       00001276 (4726)\n-536C5F Uncompressed Size     00001276 (4726)\n-536C63 Filename Length       0084 (132)\n-536C65 Extra Length          0009 (9)\n-536C67 Comment Length        0000 (0)\n-536C69 Disk Start            0000 (0)\n-536C6B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536C6D Ext File Attributes   00000000 (0)\n-536C71 Local Header Offset   0009C942 (641346)\n-536C75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5364F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5364F9   Length              0005 (5)\n+5364FB   Flags               01 (1) 'Modification'\n+5364FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536500 CENTRAL HEADER #250   02014B50 (33639248)\n+536504 Created Zip Spec      14 (20) '2.0'\n+536505 Created OS            00 (0) 'MS-DOS'\n+536506 Extract Zip Spec      14 (20) '2.0'\n+536507 Extract OS            00 (0) 'MS-DOS'\n+536508 General Purpose Flag  0000 (0)\n+53650A Compression Method    0000 (0) 'Stored'\n+53650C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536510 CRC                   00000000 (0)\n+536514 Compressed Size       00000000 (0)\n+536518 Uncompressed Size     00000000 (0)\n+53651C Filename Length       0063 (99)\n+53651E Extra Length          0009 (9)\n+536520 Comment Length        0000 (0)\n+536522 Disk Start            0000 (0)\n+536524 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536526 Ext File Attributes   00000000 (0)\n+53652A Local Header Offset   0008BF60 (573280)\n+53652E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53652E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536591 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536593   Length              0005 (5)\n+536595   Flags               01 (1) 'Modification'\n+536596   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53659A CENTRAL HEADER #251   02014B50 (33639248)\n+53659E Created Zip Spec      14 (20) '2.0'\n+53659F Created OS            00 (0) 'MS-DOS'\n+5365A0 Extract Zip Spec      14 (20) '2.0'\n+5365A1 Extract OS            00 (0) 'MS-DOS'\n+5365A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5365A4 Compression Method    0000 (0) 'Stored'\n+5365A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5365AA CRC                   C7DF88BB (3353315515)\n+5365AE Compressed Size       00009335 (37685)\n+5365B2 Uncompressed Size     00009335 (37685)\n+5365B6 Filename Length       0079 (121)\n+5365B8 Extra Length          0009 (9)\n+5365BA Comment Length        0000 (0)\n+5365BC Disk Start            0000 (0)\n+5365BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5365C0 Ext File Attributes   00000000 (0)\n+5365C4 Local Header Offset   0008BFEA (573418)\n+5365C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5365C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536641 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536643   Length              0005 (5)\n+536645   Flags               01 (1) 'Modification'\n+536646   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53664A CENTRAL HEADER #252   02014B50 (33639248)\n+53664E Created Zip Spec      14 (20) '2.0'\n+53664F Created OS            00 (0) 'MS-DOS'\n+536650 Extract Zip Spec      14 (20) '2.0'\n+536651 Extract OS            00 (0) 'MS-DOS'\n+536652 General Purpose Flag  0000 (0)\n+536654 Compression Method    0000 (0) 'Stored'\n+536656 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53665A CRC                   00000000 (0)\n+53665E Compressed Size       00000000 (0)\n+536662 Uncompressed Size     00000000 (0)\n+536666 Filename Length       006C (108)\n+536668 Extra Length          0009 (9)\n+53666A Comment Length        0000 (0)\n+53666C Disk Start            0000 (0)\n+53666E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536670 Ext File Attributes   00000000 (0)\n+536674 Local Header Offset   000953CF (611279)\n+536678 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536678: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5366E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5366E6   Length              0005 (5)\n+5366E8   Flags               01 (1) 'Modification'\n+5366E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5366ED CENTRAL HEADER #253   02014B50 (33639248)\n+5366F1 Created Zip Spec      14 (20) '2.0'\n+5366F2 Created OS            00 (0) 'MS-DOS'\n+5366F3 Extract Zip Spec      14 (20) '2.0'\n+5366F4 Extract OS            00 (0) 'MS-DOS'\n+5366F5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5366F7 Compression Method    0000 (0) 'Stored'\n+5366F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5366FD CRC                   217BBE0B (561757707)\n+536701 Compressed Size       00001BB1 (7089)\n+536705 Uncompressed Size     00001BB1 (7089)\n+536709 Filename Length       0082 (130)\n+53670B Extra Length          0009 (9)\n+53670D Comment Length        0000 (0)\n+53670F Disk Start            0000 (0)\n+536711 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536713 Ext File Attributes   00000000 (0)\n+536717 Local Header Offset   00095462 (611426)\n+53671B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53671B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53679D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53679F   Length              0005 (5)\n+5367A1   Flags               01 (1) 'Modification'\n+5367A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5367A6 CENTRAL HEADER #254   02014B50 (33639248)\n+5367AA Created Zip Spec      14 (20) '2.0'\n+5367AB Created OS            00 (0) 'MS-DOS'\n+5367AC Extract Zip Spec      14 (20) '2.0'\n+5367AD Extract OS            00 (0) 'MS-DOS'\n+5367AE General Purpose Flag  0000 (0)\n+5367B0 Compression Method    0000 (0) 'Stored'\n+5367B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5367B6 CRC                   00000000 (0)\n+5367BA Compressed Size       00000000 (0)\n+5367BE Uncompressed Size     00000000 (0)\n+5367C2 Filename Length       0069 (105)\n+5367C4 Extra Length          0009 (9)\n+5367C6 Comment Length        0000 (0)\n+5367C8 Disk Start            0000 (0)\n+5367CA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5367CC Ext File Attributes   00000000 (0)\n+5367D0 Local Header Offset   000970CC (618700)\n+5367D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5367D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53683D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53683F   Length              0005 (5)\n+536841   Flags               01 (1) 'Modification'\n+536842   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536846 CENTRAL HEADER #255   02014B50 (33639248)\n+53684A Created Zip Spec      14 (20) '2.0'\n+53684B Created OS            00 (0) 'MS-DOS'\n+53684C Extract Zip Spec      14 (20) '2.0'\n+53684D Extract OS            00 (0) 'MS-DOS'\n+53684E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+536850 Compression Method    0000 (0) 'Stored'\n+536852 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536856 CRC                   CF72F6D0 (3480418000)\n+53685A Compressed Size       00004A6A (19050)\n+53685E Uncompressed Size     00004A6A (19050)\n+536862 Filename Length       007F (127)\n+536864 Extra Length          0009 (9)\n+536866 Comment Length        0000 (0)\n+536868 Disk Start            0000 (0)\n+53686A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53686C Ext File Attributes   00000000 (0)\n+536870 Local Header Offset   0009715C (618844)\n+536874 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536874: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5368F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5368F5   Length              0005 (5)\n+5368F7   Flags               01 (1) 'Modification'\n+5368F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5368FC CENTRAL HEADER #256   02014B50 (33639248)\n+536900 Created Zip Spec      14 (20) '2.0'\n+536901 Created OS            00 (0) 'MS-DOS'\n+536902 Extract Zip Spec      14 (20) '2.0'\n+536903 Extract OS            00 (0) 'MS-DOS'\n+536904 General Purpose Flag  0000 (0)\n+536906 Compression Method    0000 (0) 'Stored'\n+536908 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53690C CRC                   00000000 (0)\n+536910 Compressed Size       00000000 (0)\n+536914 Uncompressed Size     00000000 (0)\n+536918 Filename Length       0029 (41)\n+53691A Extra Length          0009 (9)\n+53691C Comment Length        0000 (0)\n+53691E Disk Start            0000 (0)\n+536920 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536922 Ext File Attributes   00000000 (0)\n+536926 Local Header Offset   0009BC7C (638076)\n+53692A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53692A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536953 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536955   Length              0005 (5)\n+536957   Flags               01 (1) 'Modification'\n+536958   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53695C CENTRAL HEADER #257   02014B50 (33639248)\n+536960 Created Zip Spec      14 (20) '2.0'\n+536961 Created OS            00 (0) 'MS-DOS'\n+536962 Extract Zip Spec      14 (20) '2.0'\n+536963 Extract OS            00 (0) 'MS-DOS'\n+536964 General Purpose Flag  0000 (0)\n+536966 Compression Method    0000 (0) 'Stored'\n+536968 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53696C CRC                   00000000 (0)\n+536970 Compressed Size       00000000 (0)\n+536974 Uncompressed Size     00000000 (0)\n+536978 Filename Length       0032 (50)\n+53697A Extra Length          0009 (9)\n+53697C Comment Length        0000 (0)\n+53697E Disk Start            0000 (0)\n+536980 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536982 Ext File Attributes   00000000 (0)\n+536986 Local Header Offset   0009BCCC (638156)\n+53698A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53698A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5369BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5369BE   Length              0005 (5)\n+5369C0   Flags               01 (1) 'Modification'\n+5369C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5369C5 CENTRAL HEADER #258   02014B50 (33639248)\n+5369C9 Created Zip Spec      14 (20) '2.0'\n+5369CA Created OS            00 (0) 'MS-DOS'\n+5369CB Extract Zip Spec      14 (20) '2.0'\n+5369CC Extract OS            00 (0) 'MS-DOS'\n+5369CD General Purpose Flag  0000 (0)\n+5369CF Compression Method    0000 (0) 'Stored'\n+5369D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5369D5 CRC                   00000000 (0)\n+5369D9 Compressed Size       00000000 (0)\n+5369DD Uncompressed Size     00000000 (0)\n+5369E1 Filename Length       006C (108)\n+5369E3 Extra Length          0009 (9)\n+5369E5 Comment Length        0000 (0)\n+5369E7 Disk Start            0000 (0)\n+5369E9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5369EB Ext File Attributes   00000000 (0)\n+5369EF Local Header Offset   0009BD25 (638245)\n+5369F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5369F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536A5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536A61   Length              0005 (5)\n+536A63   Flags               01 (1) 'Modification'\n+536A64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536A68 CENTRAL HEADER #259   02014B50 (33639248)\n+536A6C Created Zip Spec      14 (20) '2.0'\n+536A6D Created OS            00 (0) 'MS-DOS'\n+536A6E Extract Zip Spec      14 (20) '2.0'\n+536A6F Extract OS            00 (0) 'MS-DOS'\n+536A70 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+536A72 Compression Method    0000 (0) 'Stored'\n+536A74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536A78 CRC                   DCEFA272 (3706692210)\n+536A7C Compressed Size       000009D3 (2515)\n+536A80 Uncompressed Size     000009D3 (2515)\n+536A84 Filename Length       0082 (130)\n+536A86 Extra Length          0009 (9)\n+536A88 Comment Length        0000 (0)\n+536A8A Disk Start            0000 (0)\n+536A8C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536A8E Ext File Attributes   00000000 (0)\n+536A92 Local Header Offset   0009BDB8 (638392)\n+536A96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536A96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536B18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536B1A   Length              0005 (5)\n+536B1C   Flags               01 (1) 'Modification'\n+536B1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536B21 CENTRAL HEADER #260   02014B50 (33639248)\n+536B25 Created Zip Spec      14 (20) '2.0'\n+536B26 Created OS            00 (0) 'MS-DOS'\n+536B27 Extract Zip Spec      14 (20) '2.0'\n+536B28 Extract OS            00 (0) 'MS-DOS'\n+536B29 General Purpose Flag  0000 (0)\n+536B2B Compression Method    0000 (0) 'Stored'\n+536B2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536B31 CRC                   00000000 (0)\n+536B35 Compressed Size       00000000 (0)\n+536B39 Uncompressed Size     00000000 (0)\n+536B3D Filename Length       006E (110)\n+536B3F Extra Length          0009 (9)\n+536B41 Comment Length        0000 (0)\n+536B43 Disk Start            0000 (0)\n+536B45 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536B47 Ext File Attributes   00000000 (0)\n+536B4B Local Header Offset   0009C844 (641092)\n+536B4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536B4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536BBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536BBF   Length              0005 (5)\n+536BC1   Flags               01 (1) 'Modification'\n+536BC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536BC6 CENTRAL HEADER #261   02014B50 (33639248)\n+536BCA Created Zip Spec      14 (20) '2.0'\n+536BCB Created OS            00 (0) 'MS-DOS'\n+536BCC Extract Zip Spec      14 (20) '2.0'\n+536BCD Extract OS            00 (0) 'MS-DOS'\n+536BCE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+536BD0 Compression Method    0000 (0) 'Stored'\n+536BD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536BD6 CRC                   26E963FE (652829694)\n+536BDA Compressed Size       00001276 (4726)\n+536BDE Uncompressed Size     00001276 (4726)\n+536BE2 Filename Length       0084 (132)\n+536BE4 Extra Length          0009 (9)\n+536BE6 Comment Length        0000 (0)\n+536BE8 Disk Start            0000 (0)\n+536BEA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536BEC Ext File Attributes   00000000 (0)\n+536BF0 Local Header Offset   0009C8D9 (641241)\n+536BF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x536C75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x536BF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-536CF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536CFB   Length              0005 (5)\n-536CFD   Flags               01 (1) 'Modification'\n-536CFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536D02 CENTRAL HEADER #262   02014B50 (33639248)\n-536D06 Created Zip Spec      14 (20) '2.0'\n-536D07 Created OS            00 (0) 'MS-DOS'\n-536D08 Extract Zip Spec      14 (20) '2.0'\n-536D09 Extract OS            00 (0) 'MS-DOS'\n-536D0A General Purpose Flag  0000 (0)\n-536D0C Compression Method    0000 (0) 'Stored'\n-536D0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536D12 CRC                   00000000 (0)\n-536D16 Compressed Size       00000000 (0)\n-536D1A Uncompressed Size     00000000 (0)\n-536D1E Filename Length       0028 (40)\n-536D20 Extra Length          0009 (9)\n-536D22 Comment Length        0000 (0)\n-536D24 Disk Start            0000 (0)\n-536D26 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536D28 Ext File Attributes   00000000 (0)\n-536D2C Local Header Offset   0009DC73 (646259)\n-536D30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536D30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536D58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536D5A   Length              0005 (5)\n-536D5C   Flags               01 (1) 'Modification'\n-536D5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536D61 CENTRAL HEADER #263   02014B50 (33639248)\n-536D65 Created Zip Spec      14 (20) '2.0'\n-536D66 Created OS            00 (0) 'MS-DOS'\n-536D67 Extract Zip Spec      14 (20) '2.0'\n-536D68 Extract OS            00 (0) 'MS-DOS'\n-536D69 General Purpose Flag  0000 (0)\n-536D6B Compression Method    0000 (0) 'Stored'\n-536D6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536D71 CRC                   00000000 (0)\n-536D75 Compressed Size       00000000 (0)\n-536D79 Uncompressed Size     00000000 (0)\n-536D7D Filename Length       0031 (49)\n-536D7F Extra Length          0009 (9)\n-536D81 Comment Length        0000 (0)\n-536D83 Disk Start            0000 (0)\n-536D85 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536D87 Ext File Attributes   00000000 (0)\n-536D8B Local Header Offset   0009DCC2 (646338)\n-536D8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536D8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536DC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536DC2   Length              0005 (5)\n-536DC4   Flags               01 (1) 'Modification'\n-536DC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536DC9 CENTRAL HEADER #264   02014B50 (33639248)\n-536DCD Created Zip Spec      14 (20) '2.0'\n-536DCE Created OS            00 (0) 'MS-DOS'\n-536DCF Extract Zip Spec      14 (20) '2.0'\n-536DD0 Extract OS            00 (0) 'MS-DOS'\n-536DD1 General Purpose Flag  0000 (0)\n-536DD3 Compression Method    0000 (0) 'Stored'\n-536DD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536DD9 CRC                   00000000 (0)\n-536DDD Compressed Size       00000000 (0)\n-536DE1 Uncompressed Size     00000000 (0)\n-536DE5 Filename Length       0061 (97)\n-536DE7 Extra Length          0009 (9)\n-536DE9 Comment Length        0000 (0)\n-536DEB Disk Start            0000 (0)\n-536DED Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536DEF Ext File Attributes   00000000 (0)\n-536DF3 Local Header Offset   0009DD1A (646426)\n-536DF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536DF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536E58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536E5A   Length              0005 (5)\n-536E5C   Flags               01 (1) 'Modification'\n-536E5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536E61 CENTRAL HEADER #265   02014B50 (33639248)\n-536E65 Created Zip Spec      14 (20) '2.0'\n-536E66 Created OS            00 (0) 'MS-DOS'\n-536E67 Extract Zip Spec      14 (20) '2.0'\n-536E68 Extract OS            00 (0) 'MS-DOS'\n-536E69 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536E6B Compression Method    0000 (0) 'Stored'\n-536E6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536E71 CRC                   9B32EF54 (2603806548)\n-536E75 Compressed Size       000054C4 (21700)\n-536E79 Uncompressed Size     000054C4 (21700)\n-536E7D Filename Length       0077 (119)\n-536E7F Extra Length          0009 (9)\n-536E81 Comment Length        0000 (0)\n-536E83 Disk Start            0000 (0)\n-536E85 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536E87 Ext File Attributes   00000000 (0)\n-536E8B Local Header Offset   0009DDA2 (646562)\n-536E8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536E8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536F06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536F08   Length              0005 (5)\n-536F0A   Flags               01 (1) 'Modification'\n-536F0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536F0F CENTRAL HEADER #266   02014B50 (33639248)\n-536F13 Created Zip Spec      14 (20) '2.0'\n-536F14 Created OS            00 (0) 'MS-DOS'\n-536F15 Extract Zip Spec      14 (20) '2.0'\n-536F16 Extract OS            00 (0) 'MS-DOS'\n-536F17 General Purpose Flag  0000 (0)\n-536F19 Compression Method    0000 (0) 'Stored'\n-536F1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536F1F CRC                   00000000 (0)\n-536F23 Compressed Size       00000000 (0)\n-536F27 Uncompressed Size     00000000 (0)\n-536F2B Filename Length       0068 (104)\n-536F2D Extra Length          0009 (9)\n-536F2F Comment Length        0000 (0)\n-536F31 Disk Start            0000 (0)\n-536F33 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536F35 Ext File Attributes   00000000 (0)\n-536F39 Local Header Offset   000A3314 (668436)\n-536F3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536F3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536FA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536FA7   Length              0005 (5)\n-536FA9   Flags               01 (1) 'Modification'\n-536FAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536FAE CENTRAL HEADER #267   02014B50 (33639248)\n-536FB2 Created Zip Spec      14 (20) '2.0'\n-536FB3 Created OS            00 (0) 'MS-DOS'\n-536FB4 Extract Zip Spec      14 (20) '2.0'\n-536FB5 Extract OS            00 (0) 'MS-DOS'\n-536FB6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-536FB8 Compression Method    0000 (0) 'Stored'\n-536FBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536FBE CRC                   4975042F (1232405551)\n-536FC2 Compressed Size       00001B21 (6945)\n-536FC6 Uncompressed Size     00001B21 (6945)\n-536FCA Filename Length       007E (126)\n-536FCC Extra Length          0009 (9)\n-536FCE Comment Length        0000 (0)\n-536FD0 Disk Start            0000 (0)\n-536FD2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-536FD4 Ext File Attributes   00000000 (0)\n-536FD8 Local Header Offset   000A33A3 (668579)\n-536FDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536FDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53705A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53705C   Length              0005 (5)\n-53705E   Flags               01 (1) 'Modification'\n-53705F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537063 CENTRAL HEADER #268   02014B50 (33639248)\n-537067 Created Zip Spec      14 (20) '2.0'\n-537068 Created OS            00 (0) 'MS-DOS'\n-537069 Extract Zip Spec      14 (20) '2.0'\n-53706A Extract OS            00 (0) 'MS-DOS'\n-53706B General Purpose Flag  0000 (0)\n-53706D Compression Method    0000 (0) 'Stored'\n-53706F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537073 CRC                   00000000 (0)\n-537077 Compressed Size       00000000 (0)\n-53707B Uncompressed Size     00000000 (0)\n-53707F Filename Length       006B (107)\n-537081 Extra Length          0009 (9)\n-537083 Comment Length        0000 (0)\n-537085 Disk Start            0000 (0)\n-537087 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537089 Ext File Attributes   00000000 (0)\n-53708D Local Header Offset   000A4F79 (675705)\n-537091 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537091: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5370FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5370FE   Length              0005 (5)\n-537100   Flags               01 (1) 'Modification'\n-537101   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537105 CENTRAL HEADER #269   02014B50 (33639248)\n-537109 Created Zip Spec      14 (20) '2.0'\n-53710A Created OS            00 (0) 'MS-DOS'\n-53710B Extract Zip Spec      14 (20) '2.0'\n-53710C Extract OS            00 (0) 'MS-DOS'\n-53710D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53710F Compression Method    0000 (0) 'Stored'\n-537111 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537115 CRC                   27E12F4C (669069132)\n-537119 Compressed Size       000014EA (5354)\n-53711D Uncompressed Size     000014EA (5354)\n-537121 Filename Length       0081 (129)\n-537123 Extra Length          0009 (9)\n-537125 Comment Length        0000 (0)\n-537127 Disk Start            0000 (0)\n-537129 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53712B Ext File Attributes   00000000 (0)\n-53712F Local Header Offset   000A500B (675851)\n-537133 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537133: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5371B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5371B6   Length              0005 (5)\n-5371B8   Flags               01 (1) 'Modification'\n-5371B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5371BD CENTRAL HEADER #270   02014B50 (33639248)\n-5371C1 Created Zip Spec      14 (20) '2.0'\n-5371C2 Created OS            00 (0) 'MS-DOS'\n-5371C3 Extract Zip Spec      14 (20) '2.0'\n-5371C4 Extract OS            00 (0) 'MS-DOS'\n-5371C5 General Purpose Flag  0000 (0)\n-5371C7 Compression Method    0000 (0) 'Stored'\n-5371C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5371CD CRC                   00000000 (0)\n-5371D1 Compressed Size       00000000 (0)\n-5371D5 Uncompressed Size     00000000 (0)\n-5371D9 Filename Length       006B (107)\n-5371DB Extra Length          0009 (9)\n-5371DD Comment Length        0000 (0)\n-5371DF Disk Start            0000 (0)\n-5371E1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5371E3 Ext File Attributes   00000000 (0)\n-5371E7 Local Header Offset   000A65AD (681389)\n-5371EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5371EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537256 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537258   Length              0005 (5)\n-53725A   Flags               01 (1) 'Modification'\n-53725B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53725F CENTRAL HEADER #271   02014B50 (33639248)\n-537263 Created Zip Spec      14 (20) '2.0'\n-537264 Created OS            00 (0) 'MS-DOS'\n-537265 Extract Zip Spec      14 (20) '2.0'\n-537266 Extract OS            00 (0) 'MS-DOS'\n-537267 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-537269 Compression Method    0000 (0) 'Stored'\n-53726B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53726F CRC                   3E8950DE (1049186526)\n-537273 Compressed Size       000036E0 (14048)\n-537277 Uncompressed Size     000036E0 (14048)\n-53727B Filename Length       0081 (129)\n-53727D Extra Length          0009 (9)\n-53727F Comment Length        0000 (0)\n-537281 Disk Start            0000 (0)\n-537283 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537285 Ext File Attributes   00000000 (0)\n-537289 Local Header Offset   000A663F (681535)\n-53728D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53728D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53730E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537310   Length              0005 (5)\n-537312   Flags               01 (1) 'Modification'\n-537313   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537317 CENTRAL HEADER #272   02014B50 (33639248)\n-53731B Created Zip Spec      14 (20) '2.0'\n-53731C Created OS            00 (0) 'MS-DOS'\n-53731D Extract Zip Spec      14 (20) '2.0'\n-53731E Extract OS            00 (0) 'MS-DOS'\n-53731F General Purpose Flag  0000 (0)\n-537321 Compression Method    0000 (0) 'Stored'\n-537323 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537327 CRC                   00000000 (0)\n-53732B Compressed Size       00000000 (0)\n-53732F Uncompressed Size     00000000 (0)\n-537333 Filename Length       006A (106)\n-537335 Extra Length          0009 (9)\n-537337 Comment Length        0000 (0)\n-537339 Disk Start            0000 (0)\n-53733B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53733D Ext File Attributes   00000000 (0)\n-537341 Local Header Offset   000A9DD7 (695767)\n-537345 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537345: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5373AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5373B1   Length              0005 (5)\n-5373B3   Flags               01 (1) 'Modification'\n-5373B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5373B8 CENTRAL HEADER #273   02014B50 (33639248)\n-5373BC Created Zip Spec      14 (20) '2.0'\n-5373BD Created OS            00 (0) 'MS-DOS'\n-5373BE Extract Zip Spec      14 (20) '2.0'\n-5373BF Extract OS            00 (0) 'MS-DOS'\n-5373C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5373C2 Compression Method    0000 (0) 'Stored'\n-5373C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5373C8 CRC                   A9B3A4D7 (2847122647)\n-5373CC Compressed Size       00002051 (8273)\n-5373D0 Uncompressed Size     00002051 (8273)\n-5373D4 Filename Length       0080 (128)\n-5373D6 Extra Length          0009 (9)\n-5373D8 Comment Length        0000 (0)\n-5373DA Disk Start            0000 (0)\n-5373DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5373DE Ext File Attributes   00000000 (0)\n-5373E2 Local Header Offset   000A9E68 (695912)\n-5373E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5373E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537466 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537468   Length              0005 (5)\n-53746A   Flags               01 (1) 'Modification'\n-53746B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53746F CENTRAL HEADER #274   02014B50 (33639248)\n-537473 Created Zip Spec      14 (20) '2.0'\n-537474 Created OS            00 (0) 'MS-DOS'\n-537475 Extract Zip Spec      14 (20) '2.0'\n-537476 Extract OS            00 (0) 'MS-DOS'\n-537477 General Purpose Flag  0000 (0)\n-537479 Compression Method    0000 (0) 'Stored'\n-53747B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53747F CRC                   00000000 (0)\n-537483 Compressed Size       00000000 (0)\n-537487 Uncompressed Size     00000000 (0)\n-53748B Filename Length       0026 (38)\n-53748D Extra Length          0009 (9)\n-53748F Comment Length        0000 (0)\n-537491 Disk Start            0000 (0)\n-537493 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537495 Ext File Attributes   00000000 (0)\n-537499 Local Header Offset   000ABF70 (704368)\n-53749D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53749D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5374C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5374C5   Length              0005 (5)\n-5374C7   Flags               01 (1) 'Modification'\n-5374C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5374CC CENTRAL HEADER #275   02014B50 (33639248)\n-5374D0 Created Zip Spec      14 (20) '2.0'\n-5374D1 Created OS            00 (0) 'MS-DOS'\n-5374D2 Extract Zip Spec      14 (20) '2.0'\n-5374D3 Extract OS            00 (0) 'MS-DOS'\n-5374D4 General Purpose Flag  0000 (0)\n-5374D6 Compression Method    0000 (0) 'Stored'\n-5374D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5374DC CRC                   00000000 (0)\n-5374E0 Compressed Size       00000000 (0)\n-5374E4 Uncompressed Size     00000000 (0)\n-5374E8 Filename Length       002F (47)\n-5374EA Extra Length          0009 (9)\n-5374EC Comment Length        0000 (0)\n-5374EE Disk Start            0000 (0)\n-5374F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5374F2 Ext File Attributes   00000000 (0)\n-5374F6 Local Header Offset   000ABFBD (704445)\n-5374FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5374FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537529 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53752B   Length              0005 (5)\n-53752D   Flags               01 (1) 'Modification'\n-53752E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537532 CENTRAL HEADER #276   02014B50 (33639248)\n-537536 Created Zip Spec      14 (20) '2.0'\n-537537 Created OS            00 (0) 'MS-DOS'\n-537538 Extract Zip Spec      14 (20) '2.0'\n-537539 Extract OS            00 (0) 'MS-DOS'\n-53753A General Purpose Flag  0000 (0)\n-53753C Compression Method    0000 (0) 'Stored'\n-53753E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537542 CRC                   00000000 (0)\n-537546 Compressed Size       00000000 (0)\n-53754A Uncompressed Size     00000000 (0)\n-53754E Filename Length       005D (93)\n-537550 Extra Length          0009 (9)\n-537552 Comment Length        0000 (0)\n-537554 Disk Start            0000 (0)\n-537556 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537558 Ext File Attributes   00000000 (0)\n-53755C Local Header Offset   000AC013 (704531)\n-537560 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537560: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5375BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5375BF   Length              0005 (5)\n-5375C1   Flags               01 (1) 'Modification'\n-5375C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5375C6 CENTRAL HEADER #277   02014B50 (33639248)\n-5375CA Created Zip Spec      14 (20) '2.0'\n-5375CB Created OS            00 (0) 'MS-DOS'\n-5375CC Extract Zip Spec      14 (20) '2.0'\n-5375CD Extract OS            00 (0) 'MS-DOS'\n-5375CE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5375D0 Compression Method    0000 (0) 'Stored'\n-5375D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5375D6 CRC                   B12610E6 (2972061926)\n-5375DA Compressed Size       00000A5B (2651)\n-5375DE Uncompressed Size     00000A5B (2651)\n-5375E2 Filename Length       0073 (115)\n-5375E4 Extra Length          0009 (9)\n-5375E6 Comment Length        0000 (0)\n-5375E8 Disk Start            0000 (0)\n-5375EA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5375EC Ext File Attributes   00000000 (0)\n-5375F0 Local Header Offset   000AC097 (704663)\n-5375F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5375F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537667 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537669   Length              0005 (5)\n-53766B   Flags               01 (1) 'Modification'\n-53766C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537670 CENTRAL HEADER #278   02014B50 (33639248)\n-537674 Created Zip Spec      14 (20) '2.0'\n-537675 Created OS            00 (0) 'MS-DOS'\n-537676 Extract Zip Spec      14 (20) '2.0'\n-537677 Extract OS            00 (0) 'MS-DOS'\n-537678 General Purpose Flag  0000 (0)\n-53767A Compression Method    0000 (0) 'Stored'\n-53767C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537680 CRC                   00000000 (0)\n-537684 Compressed Size       00000000 (0)\n-537688 Uncompressed Size     00000000 (0)\n-53768C Filename Length       0035 (53)\n-53768E Extra Length          0009 (9)\n-537690 Comment Length        0000 (0)\n-537692 Disk Start            0000 (0)\n-537694 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537696 Ext File Attributes   00000000 (0)\n-53769A Local Header Offset   000ACB9C (707484)\n-53769E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53769E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5376D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5376D5   Length              0005 (5)\n-5376D7   Flags               01 (1) 'Modification'\n-5376D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5376DC CENTRAL HEADER #279   02014B50 (33639248)\n-5376E0 Created Zip Spec      14 (20) '2.0'\n-5376E1 Created OS            00 (0) 'MS-DOS'\n-5376E2 Extract Zip Spec      14 (20) '2.0'\n-5376E3 Extract OS            00 (0) 'MS-DOS'\n-5376E4 General Purpose Flag  0000 (0)\n-5376E6 Compression Method    0000 (0) 'Stored'\n-5376E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5376EC CRC                   00000000 (0)\n-5376F0 Compressed Size       00000000 (0)\n-5376F4 Uncompressed Size     00000000 (0)\n-5376F8 Filename Length       003E (62)\n-5376FA Extra Length          0009 (9)\n-5376FC Comment Length        0000 (0)\n-5376FE Disk Start            0000 (0)\n-537700 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537702 Ext File Attributes   00000000 (0)\n-537706 Local Header Offset   000ACBF8 (707576)\n-53770A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53770A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537748 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53774A   Length              0005 (5)\n-53774C   Flags               01 (1) 'Modification'\n-53774D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537751 CENTRAL HEADER #280   02014B50 (33639248)\n-537755 Created Zip Spec      14 (20) '2.0'\n-537756 Created OS            00 (0) 'MS-DOS'\n-537757 Extract Zip Spec      14 (20) '2.0'\n-537758 Extract OS            00 (0) 'MS-DOS'\n-537759 General Purpose Flag  0000 (0)\n-53775B Compression Method    0000 (0) 'Stored'\n-53775D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537761 CRC                   00000000 (0)\n-537765 Compressed Size       00000000 (0)\n-537769 Uncompressed Size     00000000 (0)\n-53776D Filename Length       0078 (120)\n-53776F Extra Length          0009 (9)\n-537771 Comment Length        0000 (0)\n-537773 Disk Start            0000 (0)\n-537775 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537777 Ext File Attributes   00000000 (0)\n-53777B Local Header Offset   000ACC5D (707677)\n-53777F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53777F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5377F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5377F9   Length              0005 (5)\n-5377FB   Flags               01 (1) 'Modification'\n-5377FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537800 CENTRAL HEADER #281   02014B50 (33639248)\n-537804 Created Zip Spec      14 (20) '2.0'\n-537805 Created OS            00 (0) 'MS-DOS'\n-537806 Extract Zip Spec      14 (20) '2.0'\n-537807 Extract OS            00 (0) 'MS-DOS'\n-537808 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53780A Compression Method    0000 (0) 'Stored'\n-53780C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537810 CRC                   041CE92B (69003563)\n-537814 Compressed Size       00000B22 (2850)\n-537818 Uncompressed Size     00000B22 (2850)\n-53781C Filename Length       008E (142)\n-53781E Extra Length          0009 (9)\n-537820 Comment Length        0000 (0)\n-537822 Disk Start            0000 (0)\n-537824 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537826 Ext File Attributes   00000000 (0)\n-53782A Local Header Offset   000ACCFC (707836)\n-53782E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+536C78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536C7A   Length              0005 (5)\n+536C7C   Flags               01 (1) 'Modification'\n+536C7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536C81 CENTRAL HEADER #262   02014B50 (33639248)\n+536C85 Created Zip Spec      14 (20) '2.0'\n+536C86 Created OS            00 (0) 'MS-DOS'\n+536C87 Extract Zip Spec      14 (20) '2.0'\n+536C88 Extract OS            00 (0) 'MS-DOS'\n+536C89 General Purpose Flag  0000 (0)\n+536C8B Compression Method    0000 (0) 'Stored'\n+536C8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536C91 CRC                   00000000 (0)\n+536C95 Compressed Size       00000000 (0)\n+536C99 Uncompressed Size     00000000 (0)\n+536C9D Filename Length       0028 (40)\n+536C9F Extra Length          0009 (9)\n+536CA1 Comment Length        0000 (0)\n+536CA3 Disk Start            0000 (0)\n+536CA5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536CA7 Ext File Attributes   00000000 (0)\n+536CAB Local Header Offset   0009DC0A (646154)\n+536CAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536CAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536CD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536CD9   Length              0005 (5)\n+536CDB   Flags               01 (1) 'Modification'\n+536CDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536CE0 CENTRAL HEADER #263   02014B50 (33639248)\n+536CE4 Created Zip Spec      14 (20) '2.0'\n+536CE5 Created OS            00 (0) 'MS-DOS'\n+536CE6 Extract Zip Spec      14 (20) '2.0'\n+536CE7 Extract OS            00 (0) 'MS-DOS'\n+536CE8 General Purpose Flag  0000 (0)\n+536CEA Compression Method    0000 (0) 'Stored'\n+536CEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536CF0 CRC                   00000000 (0)\n+536CF4 Compressed Size       00000000 (0)\n+536CF8 Uncompressed Size     00000000 (0)\n+536CFC Filename Length       0031 (49)\n+536CFE Extra Length          0009 (9)\n+536D00 Comment Length        0000 (0)\n+536D02 Disk Start            0000 (0)\n+536D04 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536D06 Ext File Attributes   00000000 (0)\n+536D0A Local Header Offset   0009DC59 (646233)\n+536D0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536D0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536D3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536D41   Length              0005 (5)\n+536D43   Flags               01 (1) 'Modification'\n+536D44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536D48 CENTRAL HEADER #264   02014B50 (33639248)\n+536D4C Created Zip Spec      14 (20) '2.0'\n+536D4D Created OS            00 (0) 'MS-DOS'\n+536D4E Extract Zip Spec      14 (20) '2.0'\n+536D4F Extract OS            00 (0) 'MS-DOS'\n+536D50 General Purpose Flag  0000 (0)\n+536D52 Compression Method    0000 (0) 'Stored'\n+536D54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536D58 CRC                   00000000 (0)\n+536D5C Compressed Size       00000000 (0)\n+536D60 Uncompressed Size     00000000 (0)\n+536D64 Filename Length       0061 (97)\n+536D66 Extra Length          0009 (9)\n+536D68 Comment Length        0000 (0)\n+536D6A Disk Start            0000 (0)\n+536D6C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536D6E Ext File Attributes   00000000 (0)\n+536D72 Local Header Offset   0009DCB1 (646321)\n+536D76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536D76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536DD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536DD9   Length              0005 (5)\n+536DDB   Flags               01 (1) 'Modification'\n+536DDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536DE0 CENTRAL HEADER #265   02014B50 (33639248)\n+536DE4 Created Zip Spec      14 (20) '2.0'\n+536DE5 Created OS            00 (0) 'MS-DOS'\n+536DE6 Extract Zip Spec      14 (20) '2.0'\n+536DE7 Extract OS            00 (0) 'MS-DOS'\n+536DE8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+536DEA Compression Method    0000 (0) 'Stored'\n+536DEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536DF0 CRC                   9B32EF54 (2603806548)\n+536DF4 Compressed Size       000054C4 (21700)\n+536DF8 Uncompressed Size     000054C4 (21700)\n+536DFC Filename Length       0077 (119)\n+536DFE Extra Length          0009 (9)\n+536E00 Comment Length        0000 (0)\n+536E02 Disk Start            0000 (0)\n+536E04 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536E06 Ext File Attributes   00000000 (0)\n+536E0A Local Header Offset   0009DD39 (646457)\n+536E0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536E0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536E85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536E87   Length              0005 (5)\n+536E89   Flags               01 (1) 'Modification'\n+536E8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536E8E CENTRAL HEADER #266   02014B50 (33639248)\n+536E92 Created Zip Spec      14 (20) '2.0'\n+536E93 Created OS            00 (0) 'MS-DOS'\n+536E94 Extract Zip Spec      14 (20) '2.0'\n+536E95 Extract OS            00 (0) 'MS-DOS'\n+536E96 General Purpose Flag  0000 (0)\n+536E98 Compression Method    0000 (0) 'Stored'\n+536E9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536E9E CRC                   00000000 (0)\n+536EA2 Compressed Size       00000000 (0)\n+536EA6 Uncompressed Size     00000000 (0)\n+536EAA Filename Length       0068 (104)\n+536EAC Extra Length          0009 (9)\n+536EAE Comment Length        0000 (0)\n+536EB0 Disk Start            0000 (0)\n+536EB2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536EB4 Ext File Attributes   00000000 (0)\n+536EB8 Local Header Offset   000A32AB (668331)\n+536EBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536EBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536F24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536F26   Length              0005 (5)\n+536F28   Flags               01 (1) 'Modification'\n+536F29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536F2D CENTRAL HEADER #267   02014B50 (33639248)\n+536F31 Created Zip Spec      14 (20) '2.0'\n+536F32 Created OS            00 (0) 'MS-DOS'\n+536F33 Extract Zip Spec      14 (20) '2.0'\n+536F34 Extract OS            00 (0) 'MS-DOS'\n+536F35 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+536F37 Compression Method    0000 (0) 'Stored'\n+536F39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536F3D CRC                   4975042F (1232405551)\n+536F41 Compressed Size       00001B21 (6945)\n+536F45 Uncompressed Size     00001B21 (6945)\n+536F49 Filename Length       007E (126)\n+536F4B Extra Length          0009 (9)\n+536F4D Comment Length        0000 (0)\n+536F4F Disk Start            0000 (0)\n+536F51 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+536F53 Ext File Attributes   00000000 (0)\n+536F57 Local Header Offset   000A333A (668474)\n+536F5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x536F5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+536FD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+536FDB   Length              0005 (5)\n+536FDD   Flags               01 (1) 'Modification'\n+536FDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+536FE2 CENTRAL HEADER #268   02014B50 (33639248)\n+536FE6 Created Zip Spec      14 (20) '2.0'\n+536FE7 Created OS            00 (0) 'MS-DOS'\n+536FE8 Extract Zip Spec      14 (20) '2.0'\n+536FE9 Extract OS            00 (0) 'MS-DOS'\n+536FEA General Purpose Flag  0000 (0)\n+536FEC Compression Method    0000 (0) 'Stored'\n+536FEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+536FF2 CRC                   00000000 (0)\n+536FF6 Compressed Size       00000000 (0)\n+536FFA Uncompressed Size     00000000 (0)\n+536FFE Filename Length       006B (107)\n+537000 Extra Length          0009 (9)\n+537002 Comment Length        0000 (0)\n+537004 Disk Start            0000 (0)\n+537006 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537008 Ext File Attributes   00000000 (0)\n+53700C Local Header Offset   000A4F10 (675600)\n+537010 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537010: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53707B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53707D   Length              0005 (5)\n+53707F   Flags               01 (1) 'Modification'\n+537080   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537084 CENTRAL HEADER #269   02014B50 (33639248)\n+537088 Created Zip Spec      14 (20) '2.0'\n+537089 Created OS            00 (0) 'MS-DOS'\n+53708A Extract Zip Spec      14 (20) '2.0'\n+53708B Extract OS            00 (0) 'MS-DOS'\n+53708C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53708E Compression Method    0000 (0) 'Stored'\n+537090 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537094 CRC                   27E12F4C (669069132)\n+537098 Compressed Size       000014EA (5354)\n+53709C Uncompressed Size     000014EA (5354)\n+5370A0 Filename Length       0081 (129)\n+5370A2 Extra Length          0009 (9)\n+5370A4 Comment Length        0000 (0)\n+5370A6 Disk Start            0000 (0)\n+5370A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5370AA Ext File Attributes   00000000 (0)\n+5370AE Local Header Offset   000A4FA2 (675746)\n+5370B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5370B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537133 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537135   Length              0005 (5)\n+537137   Flags               01 (1) 'Modification'\n+537138   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53713C CENTRAL HEADER #270   02014B50 (33639248)\n+537140 Created Zip Spec      14 (20) '2.0'\n+537141 Created OS            00 (0) 'MS-DOS'\n+537142 Extract Zip Spec      14 (20) '2.0'\n+537143 Extract OS            00 (0) 'MS-DOS'\n+537144 General Purpose Flag  0000 (0)\n+537146 Compression Method    0000 (0) 'Stored'\n+537148 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53714C CRC                   00000000 (0)\n+537150 Compressed Size       00000000 (0)\n+537154 Uncompressed Size     00000000 (0)\n+537158 Filename Length       006B (107)\n+53715A Extra Length          0009 (9)\n+53715C Comment Length        0000 (0)\n+53715E Disk Start            0000 (0)\n+537160 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537162 Ext File Attributes   00000000 (0)\n+537166 Local Header Offset   000A6544 (681284)\n+53716A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53716A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5371D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5371D7   Length              0005 (5)\n+5371D9   Flags               01 (1) 'Modification'\n+5371DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5371DE CENTRAL HEADER #271   02014B50 (33639248)\n+5371E2 Created Zip Spec      14 (20) '2.0'\n+5371E3 Created OS            00 (0) 'MS-DOS'\n+5371E4 Extract Zip Spec      14 (20) '2.0'\n+5371E5 Extract OS            00 (0) 'MS-DOS'\n+5371E6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5371E8 Compression Method    0000 (0) 'Stored'\n+5371EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5371EE CRC                   3E8950DE (1049186526)\n+5371F2 Compressed Size       000036E0 (14048)\n+5371F6 Uncompressed Size     000036E0 (14048)\n+5371FA Filename Length       0081 (129)\n+5371FC Extra Length          0009 (9)\n+5371FE Comment Length        0000 (0)\n+537200 Disk Start            0000 (0)\n+537202 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537204 Ext File Attributes   00000000 (0)\n+537208 Local Header Offset   000A65D6 (681430)\n+53720C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53720C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53728D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53728F   Length              0005 (5)\n+537291   Flags               01 (1) 'Modification'\n+537292   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537296 CENTRAL HEADER #272   02014B50 (33639248)\n+53729A Created Zip Spec      14 (20) '2.0'\n+53729B Created OS            00 (0) 'MS-DOS'\n+53729C Extract Zip Spec      14 (20) '2.0'\n+53729D Extract OS            00 (0) 'MS-DOS'\n+53729E General Purpose Flag  0000 (0)\n+5372A0 Compression Method    0000 (0) 'Stored'\n+5372A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5372A6 CRC                   00000000 (0)\n+5372AA Compressed Size       00000000 (0)\n+5372AE Uncompressed Size     00000000 (0)\n+5372B2 Filename Length       006A (106)\n+5372B4 Extra Length          0009 (9)\n+5372B6 Comment Length        0000 (0)\n+5372B8 Disk Start            0000 (0)\n+5372BA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5372BC Ext File Attributes   00000000 (0)\n+5372C0 Local Header Offset   000A9D6E (695662)\n+5372C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5372C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53732E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537330   Length              0005 (5)\n+537332   Flags               01 (1) 'Modification'\n+537333   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537337 CENTRAL HEADER #273   02014B50 (33639248)\n+53733B Created Zip Spec      14 (20) '2.0'\n+53733C Created OS            00 (0) 'MS-DOS'\n+53733D Extract Zip Spec      14 (20) '2.0'\n+53733E Extract OS            00 (0) 'MS-DOS'\n+53733F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+537341 Compression Method    0000 (0) 'Stored'\n+537343 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537347 CRC                   A9B3A4D7 (2847122647)\n+53734B Compressed Size       00002051 (8273)\n+53734F Uncompressed Size     00002051 (8273)\n+537353 Filename Length       0080 (128)\n+537355 Extra Length          0009 (9)\n+537357 Comment Length        0000 (0)\n+537359 Disk Start            0000 (0)\n+53735B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53735D Ext File Attributes   00000000 (0)\n+537361 Local Header Offset   000A9DFF (695807)\n+537365 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537365: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5373E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5373E7   Length              0005 (5)\n+5373E9   Flags               01 (1) 'Modification'\n+5373EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5373EE CENTRAL HEADER #274   02014B50 (33639248)\n+5373F2 Created Zip Spec      14 (20) '2.0'\n+5373F3 Created OS            00 (0) 'MS-DOS'\n+5373F4 Extract Zip Spec      14 (20) '2.0'\n+5373F5 Extract OS            00 (0) 'MS-DOS'\n+5373F6 General Purpose Flag  0000 (0)\n+5373F8 Compression Method    0000 (0) 'Stored'\n+5373FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5373FE CRC                   00000000 (0)\n+537402 Compressed Size       00000000 (0)\n+537406 Uncompressed Size     00000000 (0)\n+53740A Filename Length       0026 (38)\n+53740C Extra Length          0009 (9)\n+53740E Comment Length        0000 (0)\n+537410 Disk Start            0000 (0)\n+537412 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537414 Ext File Attributes   00000000 (0)\n+537418 Local Header Offset   000ABF07 (704263)\n+53741C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53741C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537442 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537444   Length              0005 (5)\n+537446   Flags               01 (1) 'Modification'\n+537447   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53744B CENTRAL HEADER #275   02014B50 (33639248)\n+53744F Created Zip Spec      14 (20) '2.0'\n+537450 Created OS            00 (0) 'MS-DOS'\n+537451 Extract Zip Spec      14 (20) '2.0'\n+537452 Extract OS            00 (0) 'MS-DOS'\n+537453 General Purpose Flag  0000 (0)\n+537455 Compression Method    0000 (0) 'Stored'\n+537457 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53745B CRC                   00000000 (0)\n+53745F Compressed Size       00000000 (0)\n+537463 Uncompressed Size     00000000 (0)\n+537467 Filename Length       002F (47)\n+537469 Extra Length          0009 (9)\n+53746B Comment Length        0000 (0)\n+53746D Disk Start            0000 (0)\n+53746F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537471 Ext File Attributes   00000000 (0)\n+537475 Local Header Offset   000ABF54 (704340)\n+537479 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537479: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5374A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5374AA   Length              0005 (5)\n+5374AC   Flags               01 (1) 'Modification'\n+5374AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5374B1 CENTRAL HEADER #276   02014B50 (33639248)\n+5374B5 Created Zip Spec      14 (20) '2.0'\n+5374B6 Created OS            00 (0) 'MS-DOS'\n+5374B7 Extract Zip Spec      14 (20) '2.0'\n+5374B8 Extract OS            00 (0) 'MS-DOS'\n+5374B9 General Purpose Flag  0000 (0)\n+5374BB Compression Method    0000 (0) 'Stored'\n+5374BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5374C1 CRC                   00000000 (0)\n+5374C5 Compressed Size       00000000 (0)\n+5374C9 Uncompressed Size     00000000 (0)\n+5374CD Filename Length       005D (93)\n+5374CF Extra Length          0009 (9)\n+5374D1 Comment Length        0000 (0)\n+5374D3 Disk Start            0000 (0)\n+5374D5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5374D7 Ext File Attributes   00000000 (0)\n+5374DB Local Header Offset   000ABFAA (704426)\n+5374DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5374DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53753C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53753E   Length              0005 (5)\n+537540   Flags               01 (1) 'Modification'\n+537541   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537545 CENTRAL HEADER #277   02014B50 (33639248)\n+537549 Created Zip Spec      14 (20) '2.0'\n+53754A Created OS            00 (0) 'MS-DOS'\n+53754B Extract Zip Spec      14 (20) '2.0'\n+53754C Extract OS            00 (0) 'MS-DOS'\n+53754D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53754F Compression Method    0000 (0) 'Stored'\n+537551 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537555 CRC                   B12610E6 (2972061926)\n+537559 Compressed Size       00000A5B (2651)\n+53755D Uncompressed Size     00000A5B (2651)\n+537561 Filename Length       0073 (115)\n+537563 Extra Length          0009 (9)\n+537565 Comment Length        0000 (0)\n+537567 Disk Start            0000 (0)\n+537569 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53756B Ext File Attributes   00000000 (0)\n+53756F Local Header Offset   000AC02E (704558)\n+537573 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537573: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5375E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5375E8   Length              0005 (5)\n+5375EA   Flags               01 (1) 'Modification'\n+5375EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5375EF CENTRAL HEADER #278   02014B50 (33639248)\n+5375F3 Created Zip Spec      14 (20) '2.0'\n+5375F4 Created OS            00 (0) 'MS-DOS'\n+5375F5 Extract Zip Spec      14 (20) '2.0'\n+5375F6 Extract OS            00 (0) 'MS-DOS'\n+5375F7 General Purpose Flag  0000 (0)\n+5375F9 Compression Method    0000 (0) 'Stored'\n+5375FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5375FF CRC                   00000000 (0)\n+537603 Compressed Size       00000000 (0)\n+537607 Uncompressed Size     00000000 (0)\n+53760B Filename Length       0035 (53)\n+53760D Extra Length          0009 (9)\n+53760F Comment Length        0000 (0)\n+537611 Disk Start            0000 (0)\n+537613 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537615 Ext File Attributes   00000000 (0)\n+537619 Local Header Offset   000ACB33 (707379)\n+53761D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53761D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537652 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537654   Length              0005 (5)\n+537656   Flags               01 (1) 'Modification'\n+537657   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53765B CENTRAL HEADER #279   02014B50 (33639248)\n+53765F Created Zip Spec      14 (20) '2.0'\n+537660 Created OS            00 (0) 'MS-DOS'\n+537661 Extract Zip Spec      14 (20) '2.0'\n+537662 Extract OS            00 (0) 'MS-DOS'\n+537663 General Purpose Flag  0000 (0)\n+537665 Compression Method    0000 (0) 'Stored'\n+537667 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53766B CRC                   00000000 (0)\n+53766F Compressed Size       00000000 (0)\n+537673 Uncompressed Size     00000000 (0)\n+537677 Filename Length       003E (62)\n+537679 Extra Length          0009 (9)\n+53767B Comment Length        0000 (0)\n+53767D Disk Start            0000 (0)\n+53767F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537681 Ext File Attributes   00000000 (0)\n+537685 Local Header Offset   000ACB8F (707471)\n+537689 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537689: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5376C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5376C9   Length              0005 (5)\n+5376CB   Flags               01 (1) 'Modification'\n+5376CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5376D0 CENTRAL HEADER #280   02014B50 (33639248)\n+5376D4 Created Zip Spec      14 (20) '2.0'\n+5376D5 Created OS            00 (0) 'MS-DOS'\n+5376D6 Extract Zip Spec      14 (20) '2.0'\n+5376D7 Extract OS            00 (0) 'MS-DOS'\n+5376D8 General Purpose Flag  0000 (0)\n+5376DA Compression Method    0000 (0) 'Stored'\n+5376DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5376E0 CRC                   00000000 (0)\n+5376E4 Compressed Size       00000000 (0)\n+5376E8 Uncompressed Size     00000000 (0)\n+5376EC Filename Length       0078 (120)\n+5376EE Extra Length          0009 (9)\n+5376F0 Comment Length        0000 (0)\n+5376F2 Disk Start            0000 (0)\n+5376F4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5376F6 Ext File Attributes   00000000 (0)\n+5376FA Local Header Offset   000ACBF4 (707572)\n+5376FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5376FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537776 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537778   Length              0005 (5)\n+53777A   Flags               01 (1) 'Modification'\n+53777B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53777F CENTRAL HEADER #281   02014B50 (33639248)\n+537783 Created Zip Spec      14 (20) '2.0'\n+537784 Created OS            00 (0) 'MS-DOS'\n+537785 Extract Zip Spec      14 (20) '2.0'\n+537786 Extract OS            00 (0) 'MS-DOS'\n+537787 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+537789 Compression Method    0000 (0) 'Stored'\n+53778B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53778F CRC                   041CE92B (69003563)\n+537793 Compressed Size       00000B22 (2850)\n+537797 Uncompressed Size     00000B22 (2850)\n+53779B Filename Length       008E (142)\n+53779D Extra Length          0009 (9)\n+53779F Comment Length        0000 (0)\n+5377A1 Disk Start            0000 (0)\n+5377A3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5377A5 Ext File Attributes   00000000 (0)\n+5377A9 Local Header Offset   000ACC93 (707731)\n+5377AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x53782E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5377AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5378BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5378BE   Length              0005 (5)\n-5378C0   Flags               01 (1) 'Modification'\n-5378C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5378C5 CENTRAL HEADER #282   02014B50 (33639248)\n-5378C9 Created Zip Spec      14 (20) '2.0'\n-5378CA Created OS            00 (0) 'MS-DOS'\n-5378CB Extract Zip Spec      14 (20) '2.0'\n-5378CC Extract OS            00 (0) 'MS-DOS'\n-5378CD General Purpose Flag  0000 (0)\n-5378CF Compression Method    0000 (0) 'Stored'\n-5378D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5378D5 CRC                   00000000 (0)\n-5378D9 Compressed Size       00000000 (0)\n-5378DD Uncompressed Size     00000000 (0)\n-5378E1 Filename Length       0077 (119)\n-5378E3 Extra Length          0009 (9)\n-5378E5 Comment Length        0000 (0)\n-5378E7 Disk Start            0000 (0)\n-5378E9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5378EB Ext File Attributes   00000000 (0)\n-5378EF Local Header Offset   000AD8E3 (710883)\n-5378F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5378F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53796A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53796C   Length              0005 (5)\n-53796E   Flags               01 (1) 'Modification'\n-53796F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537973 CENTRAL HEADER #283   02014B50 (33639248)\n-537977 Created Zip Spec      14 (20) '2.0'\n-537978 Created OS            00 (0) 'MS-DOS'\n-537979 Extract Zip Spec      14 (20) '2.0'\n-53797A Extract OS            00 (0) 'MS-DOS'\n-53797B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53797D Compression Method    0000 (0) 'Stored'\n-53797F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537983 CRC                   16A4BA93 (379894419)\n-537987 Compressed Size       000016E4 (5860)\n-53798B Uncompressed Size     000016E4 (5860)\n-53798F Filename Length       008D (141)\n-537991 Extra Length          0009 (9)\n-537993 Comment Length        0000 (0)\n-537995 Disk Start            0000 (0)\n-537997 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537999 Ext File Attributes   00000000 (0)\n-53799D Local Header Offset   000AD981 (711041)\n-5379A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+53783B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53783D   Length              0005 (5)\n+53783F   Flags               01 (1) 'Modification'\n+537840   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537844 CENTRAL HEADER #282   02014B50 (33639248)\n+537848 Created Zip Spec      14 (20) '2.0'\n+537849 Created OS            00 (0) 'MS-DOS'\n+53784A Extract Zip Spec      14 (20) '2.0'\n+53784B Extract OS            00 (0) 'MS-DOS'\n+53784C General Purpose Flag  0000 (0)\n+53784E Compression Method    0000 (0) 'Stored'\n+537850 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537854 CRC                   00000000 (0)\n+537858 Compressed Size       00000000 (0)\n+53785C Uncompressed Size     00000000 (0)\n+537860 Filename Length       0077 (119)\n+537862 Extra Length          0009 (9)\n+537864 Comment Length        0000 (0)\n+537866 Disk Start            0000 (0)\n+537868 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53786A Ext File Attributes   00000000 (0)\n+53786E Local Header Offset   000AD87A (710778)\n+537872 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537872: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5378E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5378EB   Length              0005 (5)\n+5378ED   Flags               01 (1) 'Modification'\n+5378EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5378F2 CENTRAL HEADER #283   02014B50 (33639248)\n+5378F6 Created Zip Spec      14 (20) '2.0'\n+5378F7 Created OS            00 (0) 'MS-DOS'\n+5378F8 Extract Zip Spec      14 (20) '2.0'\n+5378F9 Extract OS            00 (0) 'MS-DOS'\n+5378FA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5378FC Compression Method    0000 (0) 'Stored'\n+5378FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537902 CRC                   16A4BA93 (379894419)\n+537906 Compressed Size       000016E4 (5860)\n+53790A Uncompressed Size     000016E4 (5860)\n+53790E Filename Length       008D (141)\n+537910 Extra Length          0009 (9)\n+537912 Comment Length        0000 (0)\n+537914 Disk Start            0000 (0)\n+537916 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537918 Ext File Attributes   00000000 (0)\n+53791C Local Header Offset   000AD918 (710936)\n+537920 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0x5379A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x537920: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-537A2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537A30   Length              0005 (5)\n-537A32   Flags               01 (1) 'Modification'\n-537A33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537A37 CENTRAL HEADER #284   02014B50 (33639248)\n-537A3B Created Zip Spec      14 (20) '2.0'\n-537A3C Created OS            00 (0) 'MS-DOS'\n-537A3D Extract Zip Spec      14 (20) '2.0'\n-537A3E Extract OS            00 (0) 'MS-DOS'\n-537A3F General Purpose Flag  0000 (0)\n-537A41 Compression Method    0000 (0) 'Stored'\n-537A43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537A47 CRC                   00000000 (0)\n-537A4B Compressed Size       00000000 (0)\n-537A4F Uncompressed Size     00000000 (0)\n-537A53 Filename Length       007A (122)\n-537A55 Extra Length          0009 (9)\n-537A57 Comment Length        0000 (0)\n-537A59 Disk Start            0000 (0)\n-537A5B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537A5D Ext File Attributes   00000000 (0)\n-537A61 Local Header Offset   000AF129 (717097)\n-537A65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537A65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537ADF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537AE1   Length              0005 (5)\n-537AE3   Flags               01 (1) 'Modification'\n-537AE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537AE8 CENTRAL HEADER #285   02014B50 (33639248)\n-537AEC Created Zip Spec      14 (20) '2.0'\n-537AED Created OS            00 (0) 'MS-DOS'\n-537AEE Extract Zip Spec      14 (20) '2.0'\n-537AEF Extract OS            00 (0) 'MS-DOS'\n-537AF0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-537AF2 Compression Method    0000 (0) 'Stored'\n-537AF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537AF8 CRC                   390AB403 (957002755)\n-537AFC Compressed Size       00001068 (4200)\n-537B00 Uncompressed Size     00001068 (4200)\n-537B04 Filename Length       0090 (144)\n-537B06 Extra Length          0009 (9)\n-537B08 Comment Length        0000 (0)\n-537B0A Disk Start            0000 (0)\n-537B0C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537B0E Ext File Attributes   00000000 (0)\n-537B12 Local Header Offset   000AF1CA (717258)\n-537B16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5379AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5379AF   Length              0005 (5)\n+5379B1   Flags               01 (1) 'Modification'\n+5379B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5379B6 CENTRAL HEADER #284   02014B50 (33639248)\n+5379BA Created Zip Spec      14 (20) '2.0'\n+5379BB Created OS            00 (0) 'MS-DOS'\n+5379BC Extract Zip Spec      14 (20) '2.0'\n+5379BD Extract OS            00 (0) 'MS-DOS'\n+5379BE General Purpose Flag  0000 (0)\n+5379C0 Compression Method    0000 (0) 'Stored'\n+5379C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5379C6 CRC                   00000000 (0)\n+5379CA Compressed Size       00000000 (0)\n+5379CE Uncompressed Size     00000000 (0)\n+5379D2 Filename Length       007A (122)\n+5379D4 Extra Length          0009 (9)\n+5379D6 Comment Length        0000 (0)\n+5379D8 Disk Start            0000 (0)\n+5379DA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5379DC Ext File Attributes   00000000 (0)\n+5379E0 Local Header Offset   000AF0C0 (716992)\n+5379E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5379E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537A5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537A60   Length              0005 (5)\n+537A62   Flags               01 (1) 'Modification'\n+537A63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537A67 CENTRAL HEADER #285   02014B50 (33639248)\n+537A6B Created Zip Spec      14 (20) '2.0'\n+537A6C Created OS            00 (0) 'MS-DOS'\n+537A6D Extract Zip Spec      14 (20) '2.0'\n+537A6E Extract OS            00 (0) 'MS-DOS'\n+537A6F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+537A71 Compression Method    0000 (0) 'Stored'\n+537A73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537A77 CRC                   390AB403 (957002755)\n+537A7B Compressed Size       00001068 (4200)\n+537A7F Uncompressed Size     00001068 (4200)\n+537A83 Filename Length       0090 (144)\n+537A85 Extra Length          0009 (9)\n+537A87 Comment Length        0000 (0)\n+537A89 Disk Start            0000 (0)\n+537A8B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537A8D Ext File Attributes   00000000 (0)\n+537A91 Local Header Offset   000AF161 (717153)\n+537A95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x537B16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x537A95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-537BA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537BA8   Length              0005 (5)\n-537BAA   Flags               01 (1) 'Modification'\n-537BAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537BAF CENTRAL HEADER #286   02014B50 (33639248)\n-537BB3 Created Zip Spec      14 (20) '2.0'\n-537BB4 Created OS            00 (0) 'MS-DOS'\n-537BB5 Extract Zip Spec      14 (20) '2.0'\n-537BB6 Extract OS            00 (0) 'MS-DOS'\n-537BB7 General Purpose Flag  0000 (0)\n-537BB9 Compression Method    0000 (0) 'Stored'\n-537BBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537BBF CRC                   00000000 (0)\n-537BC3 Compressed Size       00000000 (0)\n-537BC7 Uncompressed Size     00000000 (0)\n-537BCB Filename Length       0076 (118)\n-537BCD Extra Length          0009 (9)\n-537BCF Comment Length        0000 (0)\n-537BD1 Disk Start            0000 (0)\n-537BD3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537BD5 Ext File Attributes   00000000 (0)\n-537BD9 Local Header Offset   000B02F9 (721657)\n-537BDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537BDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537C53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537C55   Length              0005 (5)\n-537C57   Flags               01 (1) 'Modification'\n-537C58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537C5C CENTRAL HEADER #287   02014B50 (33639248)\n-537C60 Created Zip Spec      14 (20) '2.0'\n-537C61 Created OS            00 (0) 'MS-DOS'\n-537C62 Extract Zip Spec      14 (20) '2.0'\n-537C63 Extract OS            00 (0) 'MS-DOS'\n-537C64 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-537C66 Compression Method    0000 (0) 'Stored'\n-537C68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537C6C CRC                   3DE98548 (1038714184)\n-537C70 Compressed Size       000016AA (5802)\n-537C74 Uncompressed Size     000016AA (5802)\n-537C78 Filename Length       008C (140)\n-537C7A Extra Length          0009 (9)\n-537C7C Comment Length        0000 (0)\n-537C7E Disk Start            0000 (0)\n-537C80 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537C82 Ext File Attributes   00000000 (0)\n-537C86 Local Header Offset   000B0396 (721814)\n-537C8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+537B25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537B27   Length              0005 (5)\n+537B29   Flags               01 (1) 'Modification'\n+537B2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537B2E CENTRAL HEADER #286   02014B50 (33639248)\n+537B32 Created Zip Spec      14 (20) '2.0'\n+537B33 Created OS            00 (0) 'MS-DOS'\n+537B34 Extract Zip Spec      14 (20) '2.0'\n+537B35 Extract OS            00 (0) 'MS-DOS'\n+537B36 General Purpose Flag  0000 (0)\n+537B38 Compression Method    0000 (0) 'Stored'\n+537B3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537B3E CRC                   00000000 (0)\n+537B42 Compressed Size       00000000 (0)\n+537B46 Uncompressed Size     00000000 (0)\n+537B4A Filename Length       0076 (118)\n+537B4C Extra Length          0009 (9)\n+537B4E Comment Length        0000 (0)\n+537B50 Disk Start            0000 (0)\n+537B52 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537B54 Ext File Attributes   00000000 (0)\n+537B58 Local Header Offset   000B0290 (721552)\n+537B5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537B5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537BD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537BD4   Length              0005 (5)\n+537BD6   Flags               01 (1) 'Modification'\n+537BD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537BDB CENTRAL HEADER #287   02014B50 (33639248)\n+537BDF Created Zip Spec      14 (20) '2.0'\n+537BE0 Created OS            00 (0) 'MS-DOS'\n+537BE1 Extract Zip Spec      14 (20) '2.0'\n+537BE2 Extract OS            00 (0) 'MS-DOS'\n+537BE3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+537BE5 Compression Method    0000 (0) 'Stored'\n+537BE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537BEB CRC                   3DE98548 (1038714184)\n+537BEF Compressed Size       000016AA (5802)\n+537BF3 Uncompressed Size     000016AA (5802)\n+537BF7 Filename Length       008C (140)\n+537BF9 Extra Length          0009 (9)\n+537BFB Comment Length        0000 (0)\n+537BFD Disk Start            0000 (0)\n+537BFF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537C01 Ext File Attributes   00000000 (0)\n+537C05 Local Header Offset   000B032D (721709)\n+537C09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0x537C8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x537C09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-537D16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537D18   Length              0005 (5)\n-537D1A   Flags               01 (1) 'Modification'\n-537D1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537D1F CENTRAL HEADER #288   02014B50 (33639248)\n-537D23 Created Zip Spec      14 (20) '2.0'\n-537D24 Created OS            00 (0) 'MS-DOS'\n-537D25 Extract Zip Spec      14 (20) '2.0'\n-537D26 Extract OS            00 (0) 'MS-DOS'\n-537D27 General Purpose Flag  0000 (0)\n-537D29 Compression Method    0000 (0) 'Stored'\n-537D2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537D2F CRC                   00000000 (0)\n-537D33 Compressed Size       00000000 (0)\n-537D37 Uncompressed Size     00000000 (0)\n-537D3B Filename Length       0024 (36)\n-537D3D Extra Length          0009 (9)\n-537D3F Comment Length        0000 (0)\n-537D41 Disk Start            0000 (0)\n-537D43 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537D45 Ext File Attributes   00000000 (0)\n-537D49 Local Header Offset   000B1B03 (727811)\n-537D4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537D4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537D71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537D73   Length              0005 (5)\n-537D75   Flags               01 (1) 'Modification'\n-537D76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537D7A CENTRAL HEADER #289   02014B50 (33639248)\n-537D7E Created Zip Spec      14 (20) '2.0'\n-537D7F Created OS            00 (0) 'MS-DOS'\n-537D80 Extract Zip Spec      14 (20) '2.0'\n-537D81 Extract OS            00 (0) 'MS-DOS'\n-537D82 General Purpose Flag  0000 (0)\n-537D84 Compression Method    0000 (0) 'Stored'\n-537D86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537D8A CRC                   00000000 (0)\n-537D8E Compressed Size       00000000 (0)\n-537D92 Uncompressed Size     00000000 (0)\n-537D96 Filename Length       002D (45)\n-537D98 Extra Length          0009 (9)\n-537D9A Comment Length        0000 (0)\n-537D9C Disk Start            0000 (0)\n-537D9E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537DA0 Ext File Attributes   00000000 (0)\n-537DA4 Local Header Offset   000B1B4E (727886)\n-537DA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537DA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537DD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537DD7   Length              0005 (5)\n-537DD9   Flags               01 (1) 'Modification'\n-537DDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537DDE CENTRAL HEADER #290   02014B50 (33639248)\n-537DE2 Created Zip Spec      14 (20) '2.0'\n-537DE3 Created OS            00 (0) 'MS-DOS'\n-537DE4 Extract Zip Spec      14 (20) '2.0'\n-537DE5 Extract OS            00 (0) 'MS-DOS'\n-537DE6 General Purpose Flag  0000 (0)\n-537DE8 Compression Method    0000 (0) 'Stored'\n-537DEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537DEE CRC                   00000000 (0)\n-537DF2 Compressed Size       00000000 (0)\n-537DF6 Uncompressed Size     00000000 (0)\n-537DFA Filename Length       005B (91)\n-537DFC Extra Length          0009 (9)\n-537DFE Comment Length        0000 (0)\n-537E00 Disk Start            0000 (0)\n-537E02 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537E04 Ext File Attributes   00000000 (0)\n-537E08 Local Header Offset   000B1BA2 (727970)\n-537E0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537E0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537E67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537E69   Length              0005 (5)\n-537E6B   Flags               01 (1) 'Modification'\n-537E6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537E70 CENTRAL HEADER #291   02014B50 (33639248)\n-537E74 Created Zip Spec      14 (20) '2.0'\n-537E75 Created OS            00 (0) 'MS-DOS'\n-537E76 Extract Zip Spec      14 (20) '2.0'\n-537E77 Extract OS            00 (0) 'MS-DOS'\n-537E78 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-537E7A Compression Method    0000 (0) 'Stored'\n-537E7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537E80 CRC                   561A3BB2 (1444559794)\n-537E84 Compressed Size       000018A8 (6312)\n-537E88 Uncompressed Size     000018A8 (6312)\n-537E8C Filename Length       0071 (113)\n-537E8E Extra Length          0009 (9)\n-537E90 Comment Length        0000 (0)\n-537E92 Disk Start            0000 (0)\n-537E94 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537E96 Ext File Attributes   00000000 (0)\n-537E9A Local Header Offset   000B1C24 (728100)\n-537E9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537E9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537F0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537F11   Length              0005 (5)\n-537F13   Flags               01 (1) 'Modification'\n-537F14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537F18 CENTRAL HEADER #292   02014B50 (33639248)\n-537F1C Created Zip Spec      14 (20) '2.0'\n-537F1D Created OS            00 (0) 'MS-DOS'\n-537F1E Extract Zip Spec      14 (20) '2.0'\n-537F1F Extract OS            00 (0) 'MS-DOS'\n-537F20 General Purpose Flag  0000 (0)\n-537F22 Compression Method    0000 (0) 'Stored'\n-537F24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537F28 CRC                   00000000 (0)\n-537F2C Compressed Size       00000000 (0)\n-537F30 Uncompressed Size     00000000 (0)\n-537F34 Filename Length       005A (90)\n-537F36 Extra Length          0009 (9)\n-537F38 Comment Length        0000 (0)\n-537F3A Disk Start            0000 (0)\n-537F3C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537F3E Ext File Attributes   00000000 (0)\n-537F42 Local Header Offset   000B3574 (734580)\n-537F46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537F46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537FA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537FA2   Length              0005 (5)\n-537FA4   Flags               01 (1) 'Modification'\n-537FA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537FA9 CENTRAL HEADER #293   02014B50 (33639248)\n-537FAD Created Zip Spec      14 (20) '2.0'\n-537FAE Created OS            00 (0) 'MS-DOS'\n-537FAF Extract Zip Spec      14 (20) '2.0'\n-537FB0 Extract OS            00 (0) 'MS-DOS'\n-537FB1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-537FB3 Compression Method    0000 (0) 'Stored'\n-537FB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537FB9 CRC                   A1D18B9C (2714864540)\n-537FBD Compressed Size       00001AC2 (6850)\n-537FC1 Uncompressed Size     00001AC2 (6850)\n-537FC5 Filename Length       0070 (112)\n-537FC7 Extra Length          0009 (9)\n-537FC9 Comment Length        0000 (0)\n-537FCB Disk Start            0000 (0)\n-537FCD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-537FCF Ext File Attributes   00000000 (0)\n-537FD3 Local Header Offset   000B35F5 (734709)\n-537FD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x537FD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538047 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538049   Length              0005 (5)\n-53804B   Flags               01 (1) 'Modification'\n-53804C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538050 CENTRAL HEADER #294   02014B50 (33639248)\n-538054 Created Zip Spec      14 (20) '2.0'\n-538055 Created OS            00 (0) 'MS-DOS'\n-538056 Extract Zip Spec      14 (20) '2.0'\n-538057 Extract OS            00 (0) 'MS-DOS'\n-538058 General Purpose Flag  0000 (0)\n-53805A Compression Method    0000 (0) 'Stored'\n-53805C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538060 CRC                   00000000 (0)\n-538064 Compressed Size       00000000 (0)\n-538068 Uncompressed Size     00000000 (0)\n-53806C Filename Length       005B (91)\n-53806E Extra Length          0009 (9)\n-538070 Comment Length        0000 (0)\n-538072 Disk Start            0000 (0)\n-538074 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538076 Ext File Attributes   00000000 (0)\n-53807A Local Header Offset   000B515E (741726)\n-53807E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53807E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5380D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5380DB   Length              0005 (5)\n-5380DD   Flags               01 (1) 'Modification'\n-5380DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5380E2 CENTRAL HEADER #295   02014B50 (33639248)\n-5380E6 Created Zip Spec      14 (20) '2.0'\n-5380E7 Created OS            00 (0) 'MS-DOS'\n-5380E8 Extract Zip Spec      14 (20) '2.0'\n-5380E9 Extract OS            00 (0) 'MS-DOS'\n-5380EA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5380EC Compression Method    0000 (0) 'Stored'\n-5380EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5380F2 CRC                   33231FD5 (857939925)\n-5380F6 Compressed Size       00001399 (5017)\n-5380FA Uncompressed Size     00001399 (5017)\n-5380FE Filename Length       0071 (113)\n-538100 Extra Length          0009 (9)\n-538102 Comment Length        0000 (0)\n-538104 Disk Start            0000 (0)\n-538106 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538108 Ext File Attributes   00000000 (0)\n-53810C Local Header Offset   000B51E0 (741856)\n-538110 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538110: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538181 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538183   Length              0005 (5)\n-538185   Flags               01 (1) 'Modification'\n-538186   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53818A CENTRAL HEADER #296   02014B50 (33639248)\n-53818E Created Zip Spec      14 (20) '2.0'\n-53818F Created OS            00 (0) 'MS-DOS'\n-538190 Extract Zip Spec      14 (20) '2.0'\n-538191 Extract OS            00 (0) 'MS-DOS'\n-538192 General Purpose Flag  0000 (0)\n-538194 Compression Method    0000 (0) 'Stored'\n-538196 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53819A CRC                   00000000 (0)\n-53819E Compressed Size       00000000 (0)\n-5381A2 Uncompressed Size     00000000 (0)\n-5381A6 Filename Length       0023 (35)\n-5381A8 Extra Length          0009 (9)\n-5381AA Comment Length        0000 (0)\n-5381AC Disk Start            0000 (0)\n-5381AE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5381B0 Ext File Attributes   00000000 (0)\n-5381B4 Local Header Offset   000B6621 (747041)\n-5381B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5381B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5381DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5381DD   Length              0005 (5)\n-5381DF   Flags               01 (1) 'Modification'\n-5381E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5381E4 CENTRAL HEADER #297   02014B50 (33639248)\n-5381E8 Created Zip Spec      14 (20) '2.0'\n-5381E9 Created OS            00 (0) 'MS-DOS'\n-5381EA Extract Zip Spec      14 (20) '2.0'\n-5381EB Extract OS            00 (0) 'MS-DOS'\n-5381EC General Purpose Flag  0000 (0)\n-5381EE Compression Method    0000 (0) 'Stored'\n-5381F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5381F4 CRC                   00000000 (0)\n-5381F8 Compressed Size       00000000 (0)\n-5381FC Uncompressed Size     00000000 (0)\n-538200 Filename Length       002C (44)\n-538202 Extra Length          0009 (9)\n-538204 Comment Length        0000 (0)\n-538206 Disk Start            0000 (0)\n-538208 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53820A Ext File Attributes   00000000 (0)\n-53820E Local Header Offset   000B666B (747115)\n-538212 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538212: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53823E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538240   Length              0005 (5)\n-538242   Flags               01 (1) 'Modification'\n-538243   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538247 CENTRAL HEADER #298   02014B50 (33639248)\n-53824B Created Zip Spec      14 (20) '2.0'\n-53824C Created OS            00 (0) 'MS-DOS'\n-53824D Extract Zip Spec      14 (20) '2.0'\n-53824E Extract OS            00 (0) 'MS-DOS'\n-53824F General Purpose Flag  0000 (0)\n-538251 Compression Method    0000 (0) 'Stored'\n-538253 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538257 CRC                   00000000 (0)\n-53825B Compressed Size       00000000 (0)\n-53825F Uncompressed Size     00000000 (0)\n-538263 Filename Length       0054 (84)\n-538265 Extra Length          0009 (9)\n-538267 Comment Length        0000 (0)\n-538269 Disk Start            0000 (0)\n-53826B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53826D Ext File Attributes   00000000 (0)\n-538271 Local Header Offset   000B66BE (747198)\n-538275 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538275: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5382C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5382CB   Length              0005 (5)\n-5382CD   Flags               01 (1) 'Modification'\n-5382CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5382D2 CENTRAL HEADER #299   02014B50 (33639248)\n-5382D6 Created Zip Spec      14 (20) '2.0'\n-5382D7 Created OS            00 (0) 'MS-DOS'\n-5382D8 Extract Zip Spec      14 (20) '2.0'\n-5382D9 Extract OS            00 (0) 'MS-DOS'\n-5382DA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5382DC Compression Method    0000 (0) 'Stored'\n-5382DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5382E2 CRC                   63C353AF (1673745327)\n-5382E6 Compressed Size       00000CF8 (3320)\n-5382EA Uncompressed Size     00000CF8 (3320)\n-5382EE Filename Length       006A (106)\n-5382F0 Extra Length          0009 (9)\n-5382F2 Comment Length        0000 (0)\n-5382F4 Disk Start            0000 (0)\n-5382F6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5382F8 Ext File Attributes   00000000 (0)\n-5382FC Local Header Offset   000B6739 (747321)\n-538300 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538300: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53836A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53836C   Length              0005 (5)\n-53836E   Flags               01 (1) 'Modification'\n-53836F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538373 CENTRAL HEADER #300   02014B50 (33639248)\n-538377 Created Zip Spec      14 (20) '2.0'\n-538378 Created OS            00 (0) 'MS-DOS'\n-538379 Extract Zip Spec      14 (20) '2.0'\n-53837A Extract OS            00 (0) 'MS-DOS'\n-53837B General Purpose Flag  0000 (0)\n-53837D Compression Method    0000 (0) 'Stored'\n-53837F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538383 CRC                   00000000 (0)\n-538387 Compressed Size       00000000 (0)\n-53838B Uncompressed Size     00000000 (0)\n-53838F Filename Length       005B (91)\n-538391 Extra Length          0009 (9)\n-538393 Comment Length        0000 (0)\n-538395 Disk Start            0000 (0)\n-538397 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538399 Ext File Attributes   00000000 (0)\n-53839D Local Header Offset   000B74D2 (750802)\n-5383A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5383A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5383FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5383FE   Length              0005 (5)\n-538400   Flags               01 (1) 'Modification'\n-538401   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538405 CENTRAL HEADER #301   02014B50 (33639248)\n-538409 Created Zip Spec      14 (20) '2.0'\n-53840A Created OS            00 (0) 'MS-DOS'\n-53840B Extract Zip Spec      14 (20) '2.0'\n-53840C Extract OS            00 (0) 'MS-DOS'\n-53840D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53840F Compression Method    0000 (0) 'Stored'\n-538411 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538415 CRC                   C64481A5 (3326378405)\n-538419 Compressed Size       00000723 (1827)\n-53841D Uncompressed Size     00000723 (1827)\n-538421 Filename Length       0071 (113)\n-538423 Extra Length          0009 (9)\n-538425 Comment Length        0000 (0)\n-538427 Disk Start            0000 (0)\n-538429 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53842B Ext File Attributes   00000000 (0)\n-53842F Local Header Offset   000B7554 (750932)\n-538433 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538433: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5384A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5384A6   Length              0005 (5)\n-5384A8   Flags               01 (1) 'Modification'\n-5384A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5384AD CENTRAL HEADER #302   02014B50 (33639248)\n-5384B1 Created Zip Spec      14 (20) '2.0'\n-5384B2 Created OS            00 (0) 'MS-DOS'\n-5384B3 Extract Zip Spec      14 (20) '2.0'\n-5384B4 Extract OS            00 (0) 'MS-DOS'\n-5384B5 General Purpose Flag  0000 (0)\n-5384B7 Compression Method    0000 (0) 'Stored'\n-5384B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5384BD CRC                   00000000 (0)\n-5384C1 Compressed Size       00000000 (0)\n-5384C5 Uncompressed Size     00000000 (0)\n-5384C9 Filename Length       0059 (89)\n-5384CB Extra Length          0009 (9)\n-5384CD Comment Length        0000 (0)\n-5384CF Disk Start            0000 (0)\n-5384D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5384D3 Ext File Attributes   00000000 (0)\n-5384D7 Local Header Offset   000B7D1F (752927)\n-5384DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5384DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538534 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538536   Length              0005 (5)\n-538538   Flags               01 (1) 'Modification'\n-538539   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53853D CENTRAL HEADER #303   02014B50 (33639248)\n-538541 Created Zip Spec      14 (20) '2.0'\n-538542 Created OS            00 (0) 'MS-DOS'\n-538543 Extract Zip Spec      14 (20) '2.0'\n-538544 Extract OS            00 (0) 'MS-DOS'\n-538545 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-538547 Compression Method    0000 (0) 'Stored'\n-538549 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53854D CRC                   39649106 (962892038)\n-538551 Compressed Size       000006E2 (1762)\n-538555 Uncompressed Size     000006E2 (1762)\n-538559 Filename Length       006F (111)\n-53855B Extra Length          0009 (9)\n-53855D Comment Length        0000 (0)\n-53855F Disk Start            0000 (0)\n-538561 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538563 Ext File Attributes   00000000 (0)\n-538567 Local Header Offset   000B7D9F (753055)\n-53856B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53856B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5385DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5385DC   Length              0005 (5)\n-5385DE   Flags               01 (1) 'Modification'\n-5385DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5385E3 CENTRAL HEADER #304   02014B50 (33639248)\n-5385E7 Created Zip Spec      14 (20) '2.0'\n-5385E8 Created OS            00 (0) 'MS-DOS'\n-5385E9 Extract Zip Spec      14 (20) '2.0'\n-5385EA Extract OS            00 (0) 'MS-DOS'\n-5385EB General Purpose Flag  0000 (0)\n-5385ED Compression Method    0000 (0) 'Stored'\n-5385EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5385F3 CRC                   00000000 (0)\n-5385F7 Compressed Size       00000000 (0)\n-5385FB Uncompressed Size     00000000 (0)\n-5385FF Filename Length       0054 (84)\n-538601 Extra Length          0009 (9)\n-538603 Comment Length        0000 (0)\n-538605 Disk Start            0000 (0)\n-538607 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538609 Ext File Attributes   00000000 (0)\n-53860D Local Header Offset   000B8527 (754983)\n-538611 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538611: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538665 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538667   Length              0005 (5)\n-538669   Flags               01 (1) 'Modification'\n-53866A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53866E CENTRAL HEADER #305   02014B50 (33639248)\n-538672 Created Zip Spec      14 (20) '2.0'\n-538673 Created OS            00 (0) 'MS-DOS'\n-538674 Extract Zip Spec      14 (20) '2.0'\n-538675 Extract OS            00 (0) 'MS-DOS'\n-538676 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-538678 Compression Method    0000 (0) 'Stored'\n-53867A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53867E CRC                   8DC8B44C (2378740812)\n-538682 Compressed Size       00000782 (1922)\n-538686 Uncompressed Size     00000782 (1922)\n-53868A Filename Length       006A (106)\n-53868C Extra Length          0009 (9)\n-53868E Comment Length        0000 (0)\n-538690 Disk Start            0000 (0)\n-538692 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538694 Ext File Attributes   00000000 (0)\n-538698 Local Header Offset   000B85A2 (755106)\n-53869C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53869C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538706 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538708   Length              0005 (5)\n-53870A   Flags               01 (1) 'Modification'\n-53870B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53870F CENTRAL HEADER #306   02014B50 (33639248)\n-538713 Created Zip Spec      14 (20) '2.0'\n-538714 Created OS            00 (0) 'MS-DOS'\n-538715 Extract Zip Spec      14 (20) '2.0'\n-538716 Extract OS            00 (0) 'MS-DOS'\n-538717 General Purpose Flag  0000 (0)\n-538719 Compression Method    0000 (0) 'Stored'\n-53871B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53871F CRC                   00000000 (0)\n-538723 Compressed Size       00000000 (0)\n-538727 Uncompressed Size     00000000 (0)\n-53872B Filename Length       0025 (37)\n-53872D Extra Length          0009 (9)\n-53872F Comment Length        0000 (0)\n-538731 Disk Start            0000 (0)\n-538733 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538735 Ext File Attributes   00000000 (0)\n-538739 Local Header Offset   000B8DC5 (757189)\n-53873D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53873D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538762 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538764   Length              0005 (5)\n-538766   Flags               01 (1) 'Modification'\n-538767   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53876B CENTRAL HEADER #307   02014B50 (33639248)\n-53876F Created Zip Spec      14 (20) '2.0'\n-538770 Created OS            00 (0) 'MS-DOS'\n-538771 Extract Zip Spec      14 (20) '2.0'\n-538772 Extract OS            00 (0) 'MS-DOS'\n-538773 General Purpose Flag  0000 (0)\n-538775 Compression Method    0000 (0) 'Stored'\n-538777 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53877B CRC                   00000000 (0)\n-53877F Compressed Size       00000000 (0)\n-538783 Uncompressed Size     00000000 (0)\n-538787 Filename Length       002E (46)\n-538789 Extra Length          0009 (9)\n-53878B Comment Length        0000 (0)\n-53878D Disk Start            0000 (0)\n-53878F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538791 Ext File Attributes   00000000 (0)\n-538795 Local Header Offset   000B8E11 (757265)\n-538799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5387C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5387C9   Length              0005 (5)\n-5387CB   Flags               01 (1) 'Modification'\n-5387CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5387D0 CENTRAL HEADER #308   02014B50 (33639248)\n-5387D4 Created Zip Spec      14 (20) '2.0'\n-5387D5 Created OS            00 (0) 'MS-DOS'\n-5387D6 Extract Zip Spec      14 (20) '2.0'\n-5387D7 Extract OS            00 (0) 'MS-DOS'\n-5387D8 General Purpose Flag  0000 (0)\n-5387DA Compression Method    0000 (0) 'Stored'\n-5387DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5387E0 CRC                   00000000 (0)\n-5387E4 Compressed Size       00000000 (0)\n-5387E8 Uncompressed Size     00000000 (0)\n-5387EC Filename Length       005E (94)\n-5387EE Extra Length          0009 (9)\n-5387F0 Comment Length        0000 (0)\n-5387F2 Disk Start            0000 (0)\n-5387F4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5387F6 Ext File Attributes   00000000 (0)\n-5387FA Local Header Offset   000B8E66 (757350)\n-5387FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5387FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53885C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53885E   Length              0005 (5)\n-538860   Flags               01 (1) 'Modification'\n-538861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538865 CENTRAL HEADER #309   02014B50 (33639248)\n-538869 Created Zip Spec      14 (20) '2.0'\n-53886A Created OS            00 (0) 'MS-DOS'\n-53886B Extract Zip Spec      14 (20) '2.0'\n-53886C Extract OS            00 (0) 'MS-DOS'\n-53886D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53886F Compression Method    0000 (0) 'Stored'\n-538871 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538875 CRC                   335CA1CD (861708749)\n-538879 Compressed Size       00000E9A (3738)\n-53887D Uncompressed Size     00000E9A (3738)\n-538881 Filename Length       0074 (116)\n-538883 Extra Length          0009 (9)\n-538885 Comment Length        0000 (0)\n-538887 Disk Start            0000 (0)\n-538889 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53888B Ext File Attributes   00000000 (0)\n-53888F Local Header Offset   000B8EEB (757483)\n-538893 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538893: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538907 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538909   Length              0005 (5)\n-53890B   Flags               01 (1) 'Modification'\n-53890C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538910 CENTRAL HEADER #310   02014B50 (33639248)\n-538914 Created Zip Spec      14 (20) '2.0'\n-538915 Created OS            00 (0) 'MS-DOS'\n-538916 Extract Zip Spec      14 (20) '2.0'\n-538917 Extract OS            00 (0) 'MS-DOS'\n-538918 General Purpose Flag  0000 (0)\n-53891A Compression Method    0000 (0) 'Stored'\n-53891C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538920 CRC                   00000000 (0)\n-538924 Compressed Size       00000000 (0)\n-538928 Uncompressed Size     00000000 (0)\n-53892C Filename Length       006A (106)\n-53892E Extra Length          0009 (9)\n-538930 Comment Length        0000 (0)\n-538932 Disk Start            0000 (0)\n-538934 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538936 Ext File Attributes   00000000 (0)\n-53893A Local Header Offset   000B9E30 (761392)\n-53893E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53893E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5389A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5389AA   Length              0005 (5)\n-5389AC   Flags               01 (1) 'Modification'\n-5389AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5389B1 CENTRAL HEADER #311   02014B50 (33639248)\n-5389B5 Created Zip Spec      14 (20) '2.0'\n-5389B6 Created OS            00 (0) 'MS-DOS'\n-5389B7 Extract Zip Spec      14 (20) '2.0'\n-5389B8 Extract OS            00 (0) 'MS-DOS'\n-5389B9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5389BB Compression Method    0000 (0) 'Stored'\n-5389BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5389C1 CRC                   3EE7FDDD (1055391197)\n-5389C5 Compressed Size       00001059 (4185)\n-5389C9 Uncompressed Size     00001059 (4185)\n-5389CD Filename Length       0080 (128)\n-5389CF Extra Length          0009 (9)\n-5389D1 Comment Length        0000 (0)\n-5389D3 Disk Start            0000 (0)\n-5389D5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5389D7 Ext File Attributes   00000000 (0)\n-5389DB Local Header Offset   000B9EC1 (761537)\n-5389DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5389DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538A5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538A61   Length              0005 (5)\n-538A63   Flags               01 (1) 'Modification'\n-538A64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538A68 CENTRAL HEADER #312   02014B50 (33639248)\n-538A6C Created Zip Spec      14 (20) '2.0'\n-538A6D Created OS            00 (0) 'MS-DOS'\n-538A6E Extract Zip Spec      14 (20) '2.0'\n-538A6F Extract OS            00 (0) 'MS-DOS'\n-538A70 General Purpose Flag  0000 (0)\n-538A72 Compression Method    0000 (0) 'Stored'\n-538A74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538A78 CRC                   00000000 (0)\n-538A7C Compressed Size       00000000 (0)\n-538A80 Uncompressed Size     00000000 (0)\n-538A84 Filename Length       0027 (39)\n-538A86 Extra Length          0009 (9)\n-538A88 Comment Length        0000 (0)\n-538A8A Disk Start            0000 (0)\n-538A8C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538A8E Ext File Attributes   00000000 (0)\n-538A92 Local Header Offset   000BAFD1 (765905)\n-538A96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538A96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538ABD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538ABF   Length              0005 (5)\n-538AC1   Flags               01 (1) 'Modification'\n-538AC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538AC6 CENTRAL HEADER #313   02014B50 (33639248)\n-538ACA Created Zip Spec      14 (20) '2.0'\n-538ACB Created OS            00 (0) 'MS-DOS'\n-538ACC Extract Zip Spec      14 (20) '2.0'\n-538ACD Extract OS            00 (0) 'MS-DOS'\n-538ACE General Purpose Flag  0000 (0)\n-538AD0 Compression Method    0000 (0) 'Stored'\n-538AD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538AD6 CRC                   00000000 (0)\n-538ADA Compressed Size       00000000 (0)\n-538ADE Uncompressed Size     00000000 (0)\n-538AE2 Filename Length       0030 (48)\n-538AE4 Extra Length          0009 (9)\n-538AE6 Comment Length        0000 (0)\n-538AE8 Disk Start            0000 (0)\n-538AEA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538AEC Ext File Attributes   00000000 (0)\n-538AF0 Local Header Offset   000BB01F (765983)\n-538AF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538AF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538B24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538B26   Length              0005 (5)\n-538B28   Flags               01 (1) 'Modification'\n-538B29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538B2D CENTRAL HEADER #314   02014B50 (33639248)\n-538B31 Created Zip Spec      14 (20) '2.0'\n-538B32 Created OS            00 (0) 'MS-DOS'\n-538B33 Extract Zip Spec      14 (20) '2.0'\n-538B34 Extract OS            00 (0) 'MS-DOS'\n-538B35 General Purpose Flag  0000 (0)\n-538B37 Compression Method    0000 (0) 'Stored'\n-538B39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538B3D CRC                   00000000 (0)\n-538B41 Compressed Size       00000000 (0)\n-538B45 Uncompressed Size     00000000 (0)\n-538B49 Filename Length       0069 (105)\n-538B4B Extra Length          0009 (9)\n-538B4D Comment Length        0000 (0)\n-538B4F Disk Start            0000 (0)\n-538B51 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538B53 Ext File Attributes   00000000 (0)\n-538B57 Local Header Offset   000BB076 (766070)\n-538B5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538B5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538BC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538BC6   Length              0005 (5)\n-538BC8   Flags               01 (1) 'Modification'\n-538BC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538BCD CENTRAL HEADER #315   02014B50 (33639248)\n-538BD1 Created Zip Spec      14 (20) '2.0'\n-538BD2 Created OS            00 (0) 'MS-DOS'\n-538BD3 Extract Zip Spec      14 (20) '2.0'\n-538BD4 Extract OS            00 (0) 'MS-DOS'\n-538BD5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-538BD7 Compression Method    0000 (0) 'Stored'\n-538BD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538BDD CRC                   67FA3A91 (1744452241)\n-538BE1 Compressed Size       00000C5B (3163)\n-538BE5 Uncompressed Size     00000C5B (3163)\n-538BE9 Filename Length       007F (127)\n-538BEB Extra Length          0009 (9)\n-538BED Comment Length        0000 (0)\n-538BEF Disk Start            0000 (0)\n-538BF1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538BF3 Ext File Attributes   00000000 (0)\n-538BF7 Local Header Offset   000BB106 (766214)\n-538BFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538BFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538C7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538C7C   Length              0005 (5)\n-538C7E   Flags               01 (1) 'Modification'\n-538C7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538C83 CENTRAL HEADER #316   02014B50 (33639248)\n-538C87 Created Zip Spec      14 (20) '2.0'\n-538C88 Created OS            00 (0) 'MS-DOS'\n-538C89 Extract Zip Spec      14 (20) '2.0'\n-538C8A Extract OS            00 (0) 'MS-DOS'\n-538C8B General Purpose Flag  0000 (0)\n-538C8D Compression Method    0000 (0) 'Stored'\n-538C8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538C93 CRC                   00000000 (0)\n-538C97 Compressed Size       00000000 (0)\n-538C9B Uncompressed Size     00000000 (0)\n-538C9F Filename Length       0064 (100)\n-538CA1 Extra Length          0009 (9)\n-538CA3 Comment Length        0000 (0)\n-538CA5 Disk Start            0000 (0)\n-538CA7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538CA9 Ext File Attributes   00000000 (0)\n-538CAD Local Header Offset   000BBE17 (769559)\n-538CB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538CB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538D15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538D17   Length              0005 (5)\n-538D19   Flags               01 (1) 'Modification'\n-538D1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538D1E CENTRAL HEADER #317   02014B50 (33639248)\n-538D22 Created Zip Spec      14 (20) '2.0'\n-538D23 Created OS            00 (0) 'MS-DOS'\n-538D24 Extract Zip Spec      14 (20) '2.0'\n-538D25 Extract OS            00 (0) 'MS-DOS'\n-538D26 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-538D28 Compression Method    0000 (0) 'Stored'\n-538D2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538D2E CRC                   984F1B9C (2555321244)\n-538D32 Compressed Size       00001AA4 (6820)\n-538D36 Uncompressed Size     00001AA4 (6820)\n-538D3A Filename Length       007A (122)\n-538D3C Extra Length          0009 (9)\n-538D3E Comment Length        0000 (0)\n-538D40 Disk Start            0000 (0)\n-538D42 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538D44 Ext File Attributes   00000000 (0)\n-538D48 Local Header Offset   000BBEA2 (769698)\n-538D4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538D4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538DC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538DC8   Length              0005 (5)\n-538DCA   Flags               01 (1) 'Modification'\n-538DCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538DCF CENTRAL HEADER #318   02014B50 (33639248)\n-538DD3 Created Zip Spec      14 (20) '2.0'\n-538DD4 Created OS            00 (0) 'MS-DOS'\n-538DD5 Extract Zip Spec      14 (20) '2.0'\n-538DD6 Extract OS            00 (0) 'MS-DOS'\n-538DD7 General Purpose Flag  0000 (0)\n-538DD9 Compression Method    0000 (0) 'Stored'\n-538DDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538DDF CRC                   00000000 (0)\n-538DE3 Compressed Size       00000000 (0)\n-538DE7 Uncompressed Size     00000000 (0)\n-538DEB Filename Length       006C (108)\n-538DED Extra Length          0009 (9)\n-538DEF Comment Length        0000 (0)\n-538DF1 Disk Start            0000 (0)\n-538DF3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538DF5 Ext File Attributes   00000000 (0)\n-538DF9 Local Header Offset   000BD9F7 (776695)\n-538DFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538DFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538E69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538E6B   Length              0005 (5)\n-538E6D   Flags               01 (1) 'Modification'\n-538E6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538E72 CENTRAL HEADER #319   02014B50 (33639248)\n-538E76 Created Zip Spec      14 (20) '2.0'\n-538E77 Created OS            00 (0) 'MS-DOS'\n-538E78 Extract Zip Spec      14 (20) '2.0'\n-538E79 Extract OS            00 (0) 'MS-DOS'\n-538E7A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-538E7C Compression Method    0000 (0) 'Stored'\n-538E7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538E82 CRC                   0FF19131 (267489585)\n-538E86 Compressed Size       00000DC2 (3522)\n-538E8A Uncompressed Size     00000DC2 (3522)\n-538E8E Filename Length       0082 (130)\n-538E90 Extra Length          0009 (9)\n-538E92 Comment Length        0000 (0)\n-538E94 Disk Start            0000 (0)\n-538E96 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538E98 Ext File Attributes   00000000 (0)\n-538E9C Local Header Offset   000BDA8A (776842)\n-538EA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538EA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538F22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538F24   Length              0005 (5)\n-538F26   Flags               01 (1) 'Modification'\n-538F27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538F2B CENTRAL HEADER #320   02014B50 (33639248)\n-538F2F Created Zip Spec      14 (20) '2.0'\n-538F30 Created OS            00 (0) 'MS-DOS'\n-538F31 Extract Zip Spec      14 (20) '2.0'\n-538F32 Extract OS            00 (0) 'MS-DOS'\n-538F33 General Purpose Flag  0000 (0)\n-538F35 Compression Method    0000 (0) 'Stored'\n-538F37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538F3B CRC                   00000000 (0)\n-538F3F Compressed Size       00000000 (0)\n-538F43 Uncompressed Size     00000000 (0)\n-538F47 Filename Length       0069 (105)\n-538F49 Extra Length          0009 (9)\n-538F4B Comment Length        0000 (0)\n-538F4D Disk Start            0000 (0)\n-538F4F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538F51 Ext File Attributes   00000000 (0)\n-538F55 Local Header Offset   000BE905 (780549)\n-538F59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538F59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538FC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538FC4   Length              0005 (5)\n-538FC6   Flags               01 (1) 'Modification'\n-538FC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538FCB CENTRAL HEADER #321   02014B50 (33639248)\n-538FCF Created Zip Spec      14 (20) '2.0'\n-538FD0 Created OS            00 (0) 'MS-DOS'\n-538FD1 Extract Zip Spec      14 (20) '2.0'\n-538FD2 Extract OS            00 (0) 'MS-DOS'\n-538FD3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-538FD5 Compression Method    0000 (0) 'Stored'\n-538FD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538FDB CRC                   63513D5C (1666268508)\n-538FDF Compressed Size       000007C0 (1984)\n-538FE3 Uncompressed Size     000007C0 (1984)\n-538FE7 Filename Length       007F (127)\n-538FE9 Extra Length          0009 (9)\n-538FEB Comment Length        0000 (0)\n-538FED Disk Start            0000 (0)\n-538FEF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-538FF1 Ext File Attributes   00000000 (0)\n-538FF5 Local Header Offset   000BE995 (780693)\n-538FF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538FF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539078 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53907A   Length              0005 (5)\n-53907C   Flags               01 (1) 'Modification'\n-53907D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539081 CENTRAL HEADER #322   02014B50 (33639248)\n-539085 Created Zip Spec      14 (20) '2.0'\n-539086 Created OS            00 (0) 'MS-DOS'\n-539087 Extract Zip Spec      14 (20) '2.0'\n-539088 Extract OS            00 (0) 'MS-DOS'\n-539089 General Purpose Flag  0000 (0)\n-53908B Compression Method    0000 (0) 'Stored'\n-53908D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539091 CRC                   00000000 (0)\n-539095 Compressed Size       00000000 (0)\n-539099 Uncompressed Size     00000000 (0)\n-53909D Filename Length       0060 (96)\n-53909F Extra Length          0009 (9)\n-5390A1 Comment Length        0000 (0)\n-5390A3 Disk Start            0000 (0)\n-5390A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5390A7 Ext File Attributes   00000000 (0)\n-5390AB Local Header Offset   000BF20B (782859)\n-5390AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5390AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53910F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539111   Length              0005 (5)\n-539113   Flags               01 (1) 'Modification'\n-539114   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539118 CENTRAL HEADER #323   02014B50 (33639248)\n-53911C Created Zip Spec      14 (20) '2.0'\n-53911D Created OS            00 (0) 'MS-DOS'\n-53911E Extract Zip Spec      14 (20) '2.0'\n-53911F Extract OS            00 (0) 'MS-DOS'\n-539120 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539122 Compression Method    0000 (0) 'Stored'\n-539124 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539128 CRC                   99929518 (2576520472)\n-53912C Compressed Size       00000EDA (3802)\n-539130 Uncompressed Size     00000EDA (3802)\n-539134 Filename Length       0076 (118)\n-539136 Extra Length          0009 (9)\n-539138 Comment Length        0000 (0)\n-53913A Disk Start            0000 (0)\n-53913C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53913E Ext File Attributes   00000000 (0)\n-539142 Local Header Offset   000BF292 (782994)\n-539146 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539146: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5391BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5391BE   Length              0005 (5)\n-5391C0   Flags               01 (1) 'Modification'\n-5391C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5391C5 CENTRAL HEADER #324   02014B50 (33639248)\n-5391C9 Created Zip Spec      14 (20) '2.0'\n-5391CA Created OS            00 (0) 'MS-DOS'\n-5391CB Extract Zip Spec      14 (20) '2.0'\n-5391CC Extract OS            00 (0) 'MS-DOS'\n-5391CD General Purpose Flag  0000 (0)\n-5391CF Compression Method    0000 (0) 'Stored'\n-5391D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5391D5 CRC                   00000000 (0)\n-5391D9 Compressed Size       00000000 (0)\n-5391DD Uncompressed Size     00000000 (0)\n-5391E1 Filename Length       005E (94)\n-5391E3 Extra Length          0009 (9)\n-5391E5 Comment Length        0000 (0)\n-5391E7 Disk Start            0000 (0)\n-5391E9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5391EB Ext File Attributes   00000000 (0)\n-5391EF Local Header Offset   000C0219 (786969)\n-5391F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5391F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539251 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539253   Length              0005 (5)\n-539255   Flags               01 (1) 'Modification'\n-539256   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53925A CENTRAL HEADER #325   02014B50 (33639248)\n-53925E Created Zip Spec      14 (20) '2.0'\n-53925F Created OS            00 (0) 'MS-DOS'\n-539260 Extract Zip Spec      14 (20) '2.0'\n-539261 Extract OS            00 (0) 'MS-DOS'\n-539262 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539264 Compression Method    0000 (0) 'Stored'\n-539266 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53926A CRC                   E6BF62E0 (3871302368)\n-53926E Compressed Size       000008F8 (2296)\n-539272 Uncompressed Size     000008F8 (2296)\n-539276 Filename Length       0074 (116)\n-539278 Extra Length          0009 (9)\n-53927A Comment Length        0000 (0)\n-53927C Disk Start            0000 (0)\n-53927E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539280 Ext File Attributes   00000000 (0)\n-539284 Local Header Offset   000C029E (787102)\n-539288 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539288: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5392FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5392FE   Length              0005 (5)\n-539300   Flags               01 (1) 'Modification'\n-539301   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539305 CENTRAL HEADER #326   02014B50 (33639248)\n-539309 Created Zip Spec      14 (20) '2.0'\n-53930A Created OS            00 (0) 'MS-DOS'\n-53930B Extract Zip Spec      14 (20) '2.0'\n-53930C Extract OS            00 (0) 'MS-DOS'\n-53930D General Purpose Flag  0000 (0)\n-53930F Compression Method    0000 (0) 'Stored'\n-539311 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539315 CRC                   00000000 (0)\n-539319 Compressed Size       00000000 (0)\n-53931D Uncompressed Size     00000000 (0)\n-539321 Filename Length       0065 (101)\n-539323 Extra Length          0009 (9)\n-539325 Comment Length        0000 (0)\n-539327 Disk Start            0000 (0)\n-539329 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53932B Ext File Attributes   00000000 (0)\n-53932F Local Header Offset   000C0C41 (789569)\n-539333 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539333: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539398 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53939A   Length              0005 (5)\n-53939C   Flags               01 (1) 'Modification'\n-53939D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5393A1 CENTRAL HEADER #327   02014B50 (33639248)\n-5393A5 Created Zip Spec      14 (20) '2.0'\n-5393A6 Created OS            00 (0) 'MS-DOS'\n-5393A7 Extract Zip Spec      14 (20) '2.0'\n-5393A8 Extract OS            00 (0) 'MS-DOS'\n-5393A9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5393AB Compression Method    0000 (0) 'Stored'\n-5393AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5393B1 CRC                   F05E2331 (4032701233)\n-5393B5 Compressed Size       00000831 (2097)\n-5393B9 Uncompressed Size     00000831 (2097)\n-5393BD Filename Length       007B (123)\n-5393BF Extra Length          0009 (9)\n-5393C1 Comment Length        0000 (0)\n-5393C3 Disk Start            0000 (0)\n-5393C5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5393C7 Ext File Attributes   00000000 (0)\n-5393CB Local Header Offset   000C0CCD (789709)\n-5393CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5393CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53944A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53944C   Length              0005 (5)\n-53944E   Flags               01 (1) 'Modification'\n-53944F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539453 CENTRAL HEADER #328   02014B50 (33639248)\n-539457 Created Zip Spec      14 (20) '2.0'\n-539458 Created OS            00 (0) 'MS-DOS'\n-539459 Extract Zip Spec      14 (20) '2.0'\n-53945A Extract OS            00 (0) 'MS-DOS'\n-53945B General Purpose Flag  0000 (0)\n-53945D Compression Method    0000 (0) 'Stored'\n-53945F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539463 CRC                   00000000 (0)\n-539467 Compressed Size       00000000 (0)\n-53946B Uncompressed Size     00000000 (0)\n-53946F Filename Length       0063 (99)\n-539471 Extra Length          0009 (9)\n-539473 Comment Length        0000 (0)\n-539475 Disk Start            0000 (0)\n-539477 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539479 Ext File Attributes   00000000 (0)\n-53947D Local Header Offset   000C15B0 (791984)\n-539481 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539481: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5394E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5394E6   Length              0005 (5)\n-5394E8   Flags               01 (1) 'Modification'\n-5394E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5394ED CENTRAL HEADER #329   02014B50 (33639248)\n-5394F1 Created Zip Spec      14 (20) '2.0'\n-5394F2 Created OS            00 (0) 'MS-DOS'\n-5394F3 Extract Zip Spec      14 (20) '2.0'\n-5394F4 Extract OS            00 (0) 'MS-DOS'\n-5394F5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5394F7 Compression Method    0000 (0) 'Stored'\n-5394F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5394FD CRC                   80ED3BA4 (2163030948)\n-539501 Compressed Size       000015D0 (5584)\n-539505 Uncompressed Size     000015D0 (5584)\n-539509 Filename Length       0079 (121)\n-53950B Extra Length          0009 (9)\n-53950D Comment Length        0000 (0)\n-53950F Disk Start            0000 (0)\n-539511 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539513 Ext File Attributes   00000000 (0)\n-539517 Local Header Offset   000C163A (792122)\n-53951B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53951B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539594 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539596   Length              0005 (5)\n-539598   Flags               01 (1) 'Modification'\n-539599   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53959D CENTRAL HEADER #330   02014B50 (33639248)\n-5395A1 Created Zip Spec      14 (20) '2.0'\n-5395A2 Created OS            00 (0) 'MS-DOS'\n-5395A3 Extract Zip Spec      14 (20) '2.0'\n-5395A4 Extract OS            00 (0) 'MS-DOS'\n-5395A5 General Purpose Flag  0000 (0)\n-5395A7 Compression Method    0000 (0) 'Stored'\n-5395A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5395AD CRC                   00000000 (0)\n-5395B1 Compressed Size       00000000 (0)\n-5395B5 Uncompressed Size     00000000 (0)\n-5395B9 Filename Length       0069 (105)\n-5395BB Extra Length          0009 (9)\n-5395BD Comment Length        0000 (0)\n-5395BF Disk Start            0000 (0)\n-5395C1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5395C3 Ext File Attributes   00000000 (0)\n-5395C7 Local Header Offset   000C2CBA (797882)\n-5395CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5395CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539634 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539636   Length              0005 (5)\n-539638   Flags               01 (1) 'Modification'\n-539639   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53963D CENTRAL HEADER #331   02014B50 (33639248)\n-539641 Created Zip Spec      14 (20) '2.0'\n-539642 Created OS            00 (0) 'MS-DOS'\n-539643 Extract Zip Spec      14 (20) '2.0'\n-539644 Extract OS            00 (0) 'MS-DOS'\n-539645 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539647 Compression Method    0000 (0) 'Stored'\n-539649 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53964D CRC                   7018E446 (1880679494)\n-539651 Compressed Size       00001FAE (8110)\n-539655 Uncompressed Size     00001FAE (8110)\n-539659 Filename Length       007F (127)\n-53965B Extra Length          0009 (9)\n-53965D Comment Length        0000 (0)\n-53965F Disk Start            0000 (0)\n-539661 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539663 Ext File Attributes   00000000 (0)\n-539667 Local Header Offset   000C2D4A (798026)\n-53966B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53966B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5396EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5396EC   Length              0005 (5)\n-5396EE   Flags               01 (1) 'Modification'\n-5396EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5396F3 CENTRAL HEADER #332   02014B50 (33639248)\n-5396F7 Created Zip Spec      14 (20) '2.0'\n-5396F8 Created OS            00 (0) 'MS-DOS'\n-5396F9 Extract Zip Spec      14 (20) '2.0'\n-5396FA Extract OS            00 (0) 'MS-DOS'\n-5396FB General Purpose Flag  0000 (0)\n-5396FD Compression Method    0000 (0) 'Stored'\n-5396FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539703 CRC                   00000000 (0)\n-539707 Compressed Size       00000000 (0)\n-53970B Uncompressed Size     00000000 (0)\n-53970F Filename Length       0060 (96)\n-539711 Extra Length          0009 (9)\n-539713 Comment Length        0000 (0)\n-539715 Disk Start            0000 (0)\n-539717 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539719 Ext File Attributes   00000000 (0)\n-53971D Local Header Offset   000C4DAE (806318)\n-539721 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539721: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539781 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539783   Length              0005 (5)\n-539785   Flags               01 (1) 'Modification'\n-539786   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53978A CENTRAL HEADER #333   02014B50 (33639248)\n-53978E Created Zip Spec      14 (20) '2.0'\n-53978F Created OS            00 (0) 'MS-DOS'\n-539790 Extract Zip Spec      14 (20) '2.0'\n-539791 Extract OS            00 (0) 'MS-DOS'\n-539792 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539794 Compression Method    0000 (0) 'Stored'\n-539796 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53979A CRC                   61A0CE5A (1637928538)\n-53979E Compressed Size       000012FA (4858)\n-5397A2 Uncompressed Size     000012FA (4858)\n-5397A6 Filename Length       0076 (118)\n-5397A8 Extra Length          0009 (9)\n-5397AA Comment Length        0000 (0)\n-5397AC Disk Start            0000 (0)\n-5397AE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5397B0 Ext File Attributes   00000000 (0)\n-5397B4 Local Header Offset   000C4E35 (806453)\n-5397B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5397B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53982E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539830   Length              0005 (5)\n-539832   Flags               01 (1) 'Modification'\n-539833   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539837 CENTRAL HEADER #334   02014B50 (33639248)\n-53983B Created Zip Spec      14 (20) '2.0'\n-53983C Created OS            00 (0) 'MS-DOS'\n-53983D Extract Zip Spec      14 (20) '2.0'\n-53983E Extract OS            00 (0) 'MS-DOS'\n-53983F General Purpose Flag  0000 (0)\n-539841 Compression Method    0000 (0) 'Stored'\n-539843 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539847 CRC                   00000000 (0)\n-53984B Compressed Size       00000000 (0)\n-53984F Uncompressed Size     00000000 (0)\n-539853 Filename Length       0063 (99)\n-539855 Extra Length          0009 (9)\n-539857 Comment Length        0000 (0)\n-539859 Disk Start            0000 (0)\n-53985B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53985D Ext File Attributes   00000000 (0)\n-539861 Local Header Offset   000C61DC (811484)\n-539865 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539865: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5398C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5398CA   Length              0005 (5)\n-5398CC   Flags               01 (1) 'Modification'\n-5398CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5398D1 CENTRAL HEADER #335   02014B50 (33639248)\n-5398D5 Created Zip Spec      14 (20) '2.0'\n-5398D6 Created OS            00 (0) 'MS-DOS'\n-5398D7 Extract Zip Spec      14 (20) '2.0'\n-5398D8 Extract OS            00 (0) 'MS-DOS'\n-5398D9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5398DB Compression Method    0000 (0) 'Stored'\n-5398DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5398E1 CRC                   5A804AEF (1518357231)\n-5398E5 Compressed Size       00001311 (4881)\n-5398E9 Uncompressed Size     00001311 (4881)\n-5398ED Filename Length       0079 (121)\n-5398EF Extra Length          0009 (9)\n-5398F1 Comment Length        0000 (0)\n-5398F3 Disk Start            0000 (0)\n-5398F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5398F7 Ext File Attributes   00000000 (0)\n-5398FB Local Header Offset   000C6266 (811622)\n-5398FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5398FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539978 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53997A   Length              0005 (5)\n-53997C   Flags               01 (1) 'Modification'\n-53997D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539981 CENTRAL HEADER #336   02014B50 (33639248)\n-539985 Created Zip Spec      14 (20) '2.0'\n-539986 Created OS            00 (0) 'MS-DOS'\n-539987 Extract Zip Spec      14 (20) '2.0'\n-539988 Extract OS            00 (0) 'MS-DOS'\n-539989 General Purpose Flag  0000 (0)\n-53998B Compression Method    0000 (0) 'Stored'\n-53998D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539991 CRC                   00000000 (0)\n-539995 Compressed Size       00000000 (0)\n-539999 Uncompressed Size     00000000 (0)\n-53999D Filename Length       005F (95)\n-53999F Extra Length          0009 (9)\n-5399A1 Comment Length        0000 (0)\n-5399A3 Disk Start            0000 (0)\n-5399A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5399A7 Ext File Attributes   00000000 (0)\n-5399AB Local Header Offset   000C7627 (816679)\n-5399AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5399AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539A0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539A10   Length              0005 (5)\n-539A12   Flags               01 (1) 'Modification'\n-539A13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539A17 CENTRAL HEADER #337   02014B50 (33639248)\n-539A1B Created Zip Spec      14 (20) '2.0'\n-539A1C Created OS            00 (0) 'MS-DOS'\n-539A1D Extract Zip Spec      14 (20) '2.0'\n-539A1E Extract OS            00 (0) 'MS-DOS'\n-539A1F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539A21 Compression Method    0000 (0) 'Stored'\n-539A23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539A27 CRC                   F4A07CA3 (4104158371)\n-539A2B Compressed Size       000027E4 (10212)\n-539A2F Uncompressed Size     000027E4 (10212)\n-539A33 Filename Length       0075 (117)\n-539A35 Extra Length          0009 (9)\n-539A37 Comment Length        0000 (0)\n-539A39 Disk Start            0000 (0)\n-539A3B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539A3D Ext File Attributes   00000000 (0)\n-539A41 Local Header Offset   000C76AD (816813)\n-539A45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539A45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539ABA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539ABC   Length              0005 (5)\n-539ABE   Flags               01 (1) 'Modification'\n-539ABF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539AC3 CENTRAL HEADER #338   02014B50 (33639248)\n-539AC7 Created Zip Spec      14 (20) '2.0'\n-539AC8 Created OS            00 (0) 'MS-DOS'\n-539AC9 Extract Zip Spec      14 (20) '2.0'\n-539ACA Extract OS            00 (0) 'MS-DOS'\n-539ACB General Purpose Flag  0000 (0)\n-539ACD Compression Method    0000 (0) 'Stored'\n-539ACF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539AD3 CRC                   00000000 (0)\n-539AD7 Compressed Size       00000000 (0)\n-539ADB Uncompressed Size     00000000 (0)\n-539ADF Filename Length       0067 (103)\n-539AE1 Extra Length          0009 (9)\n-539AE3 Comment Length        0000 (0)\n-539AE5 Disk Start            0000 (0)\n-539AE7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539AE9 Ext File Attributes   00000000 (0)\n-539AED Local Header Offset   000C9F3D (827197)\n-539AF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539AF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539B58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539B5A   Length              0005 (5)\n-539B5C   Flags               01 (1) 'Modification'\n-539B5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539B61 CENTRAL HEADER #339   02014B50 (33639248)\n-539B65 Created Zip Spec      14 (20) '2.0'\n-539B66 Created OS            00 (0) 'MS-DOS'\n-539B67 Extract Zip Spec      14 (20) '2.0'\n-539B68 Extract OS            00 (0) 'MS-DOS'\n-539B69 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539B6B Compression Method    0000 (0) 'Stored'\n-539B6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539B71 CRC                   6E031E40 (1845698112)\n-539B75 Compressed Size       00001276 (4726)\n-539B79 Uncompressed Size     00001276 (4726)\n-539B7D Filename Length       007D (125)\n-539B7F Extra Length          0009 (9)\n-539B81 Comment Length        0000 (0)\n-539B83 Disk Start            0000 (0)\n-539B85 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539B87 Ext File Attributes   00000000 (0)\n-539B8B Local Header Offset   000C9FCB (827339)\n-539B8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539B8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539C0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539C0E   Length              0005 (5)\n-539C10   Flags               01 (1) 'Modification'\n-539C11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539C15 CENTRAL HEADER #340   02014B50 (33639248)\n-539C19 Created Zip Spec      14 (20) '2.0'\n-539C1A Created OS            00 (0) 'MS-DOS'\n-539C1B Extract Zip Spec      14 (20) '2.0'\n-539C1C Extract OS            00 (0) 'MS-DOS'\n-539C1D General Purpose Flag  0000 (0)\n-539C1F Compression Method    0000 (0) 'Stored'\n-539C21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539C25 CRC                   00000000 (0)\n-539C29 Compressed Size       00000000 (0)\n-539C2D Uncompressed Size     00000000 (0)\n-539C31 Filename Length       0066 (102)\n-539C33 Extra Length          0009 (9)\n-539C35 Comment Length        0000 (0)\n-539C37 Disk Start            0000 (0)\n-539C39 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539C3B Ext File Attributes   00000000 (0)\n-539C3F Local Header Offset   000CB2F5 (832245)\n-539C43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539C43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539CA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539CAB   Length              0005 (5)\n-539CAD   Flags               01 (1) 'Modification'\n-539CAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539CB2 CENTRAL HEADER #341   02014B50 (33639248)\n-539CB6 Created Zip Spec      14 (20) '2.0'\n-539CB7 Created OS            00 (0) 'MS-DOS'\n-539CB8 Extract Zip Spec      14 (20) '2.0'\n-539CB9 Extract OS            00 (0) 'MS-DOS'\n-539CBA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539CBC Compression Method    0000 (0) 'Stored'\n-539CBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539CC2 CRC                   5987930A (1502057226)\n-539CC6 Compressed Size       00000BDE (3038)\n-539CCA Uncompressed Size     00000BDE (3038)\n-539CCE Filename Length       007C (124)\n-539CD0 Extra Length          0009 (9)\n-539CD2 Comment Length        0000 (0)\n-539CD4 Disk Start            0000 (0)\n-539CD6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539CD8 Ext File Attributes   00000000 (0)\n-539CDC Local Header Offset   000CB382 (832386)\n-539CE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539CE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539D5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539D5E   Length              0005 (5)\n-539D60   Flags               01 (1) 'Modification'\n-539D61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539D65 CENTRAL HEADER #342   02014B50 (33639248)\n-539D69 Created Zip Spec      14 (20) '2.0'\n-539D6A Created OS            00 (0) 'MS-DOS'\n-539D6B Extract Zip Spec      14 (20) '2.0'\n-539D6C Extract OS            00 (0) 'MS-DOS'\n-539D6D General Purpose Flag  0000 (0)\n-539D6F Compression Method    0000 (0) 'Stored'\n-539D71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539D75 CRC                   00000000 (0)\n-539D79 Compressed Size       00000000 (0)\n-539D7D Uncompressed Size     00000000 (0)\n-539D81 Filename Length       0067 (103)\n-539D83 Extra Length          0009 (9)\n-539D85 Comment Length        0000 (0)\n-539D87 Disk Start            0000 (0)\n-539D89 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539D8B Ext File Attributes   00000000 (0)\n-539D8F Local Header Offset   000CC013 (835603)\n-539D93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539D93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539DFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539DFC   Length              0005 (5)\n-539DFE   Flags               01 (1) 'Modification'\n-539DFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539E03 CENTRAL HEADER #343   02014B50 (33639248)\n-539E07 Created Zip Spec      14 (20) '2.0'\n-539E08 Created OS            00 (0) 'MS-DOS'\n-539E09 Extract Zip Spec      14 (20) '2.0'\n-539E0A Extract OS            00 (0) 'MS-DOS'\n-539E0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539E0D Compression Method    0000 (0) 'Stored'\n-539E0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539E13 CRC                   CA93F7B9 (3398694841)\n-539E17 Compressed Size       000008CF (2255)\n-539E1B Uncompressed Size     000008CF (2255)\n-539E1F Filename Length       007D (125)\n-539E21 Extra Length          0009 (9)\n-539E23 Comment Length        0000 (0)\n-539E25 Disk Start            0000 (0)\n-539E27 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539E29 Ext File Attributes   00000000 (0)\n-539E2D Local Header Offset   000CC0A1 (835745)\n-539E31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539E31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539EAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539EB0   Length              0005 (5)\n-539EB2   Flags               01 (1) 'Modification'\n-539EB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539EB7 CENTRAL HEADER #344   02014B50 (33639248)\n-539EBB Created Zip Spec      14 (20) '2.0'\n-539EBC Created OS            00 (0) 'MS-DOS'\n-539EBD Extract Zip Spec      14 (20) '2.0'\n-539EBE Extract OS            00 (0) 'MS-DOS'\n-539EBF General Purpose Flag  0000 (0)\n-539EC1 Compression Method    0000 (0) 'Stored'\n-539EC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539EC7 CRC                   00000000 (0)\n-539ECB Compressed Size       00000000 (0)\n-539ECF Uncompressed Size     00000000 (0)\n-539ED3 Filename Length       0065 (101)\n-539ED5 Extra Length          0009 (9)\n-539ED7 Comment Length        0000 (0)\n-539ED9 Disk Start            0000 (0)\n-539EDB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539EDD Ext File Attributes   00000000 (0)\n-539EE1 Local Header Offset   000CCA24 (838180)\n-539EE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539EE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539F4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539F4C   Length              0005 (5)\n-539F4E   Flags               01 (1) 'Modification'\n-539F4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539F53 CENTRAL HEADER #345   02014B50 (33639248)\n-539F57 Created Zip Spec      14 (20) '2.0'\n-539F58 Created OS            00 (0) 'MS-DOS'\n-539F59 Extract Zip Spec      14 (20) '2.0'\n-539F5A Extract OS            00 (0) 'MS-DOS'\n-539F5B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-539F5D Compression Method    0000 (0) 'Stored'\n-539F5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539F63 CRC                   673E5975 (1732139381)\n-539F67 Compressed Size       00000CA9 (3241)\n-539F6B Uncompressed Size     00000CA9 (3241)\n-539F6F Filename Length       007B (123)\n-539F71 Extra Length          0009 (9)\n-539F73 Comment Length        0000 (0)\n-539F75 Disk Start            0000 (0)\n-539F77 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-539F79 Ext File Attributes   00000000 (0)\n-539F7D Local Header Offset   000CCAB0 (838320)\n-539F81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539F81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539FFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539FFE   Length              0005 (5)\n-53A000   Flags               01 (1) 'Modification'\n-53A001   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A005 CENTRAL HEADER #346   02014B50 (33639248)\n-53A009 Created Zip Spec      14 (20) '2.0'\n-53A00A Created OS            00 (0) 'MS-DOS'\n-53A00B Extract Zip Spec      14 (20) '2.0'\n-53A00C Extract OS            00 (0) 'MS-DOS'\n-53A00D General Purpose Flag  0000 (0)\n-53A00F Compression Method    0000 (0) 'Stored'\n-53A011 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A015 CRC                   00000000 (0)\n-53A019 Compressed Size       00000000 (0)\n-53A01D Uncompressed Size     00000000 (0)\n-53A021 Filename Length       0063 (99)\n-53A023 Extra Length          0009 (9)\n-53A025 Comment Length        0000 (0)\n-53A027 Disk Start            0000 (0)\n-53A029 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A02B Ext File Attributes   00000000 (0)\n-53A02F Local Header Offset   000CD80B (841739)\n-53A033 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A033: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A096 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A098   Length              0005 (5)\n-53A09A   Flags               01 (1) 'Modification'\n-53A09B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A09F CENTRAL HEADER #347   02014B50 (33639248)\n-53A0A3 Created Zip Spec      14 (20) '2.0'\n-53A0A4 Created OS            00 (0) 'MS-DOS'\n-53A0A5 Extract Zip Spec      14 (20) '2.0'\n-53A0A6 Extract OS            00 (0) 'MS-DOS'\n-53A0A7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A0A9 Compression Method    0000 (0) 'Stored'\n-53A0AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A0AF CRC                   2D1E752C (756970796)\n-53A0B3 Compressed Size       00005038 (20536)\n-53A0B7 Uncompressed Size     00005038 (20536)\n-53A0BB Filename Length       0079 (121)\n-53A0BD Extra Length          0009 (9)\n-53A0BF Comment Length        0000 (0)\n-53A0C1 Disk Start            0000 (0)\n-53A0C3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A0C5 Ext File Attributes   00000000 (0)\n-53A0C9 Local Header Offset   000CD895 (841877)\n-53A0CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A0CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A146 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A148   Length              0005 (5)\n-53A14A   Flags               01 (1) 'Modification'\n-53A14B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A14F CENTRAL HEADER #348   02014B50 (33639248)\n-53A153 Created Zip Spec      14 (20) '2.0'\n-53A154 Created OS            00 (0) 'MS-DOS'\n-53A155 Extract Zip Spec      14 (20) '2.0'\n-53A156 Extract OS            00 (0) 'MS-DOS'\n-53A157 General Purpose Flag  0000 (0)\n-53A159 Compression Method    0000 (0) 'Stored'\n-53A15B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A15F CRC                   00000000 (0)\n-53A163 Compressed Size       00000000 (0)\n-53A167 Uncompressed Size     00000000 (0)\n-53A16B Filename Length       005C (92)\n-53A16D Extra Length          0009 (9)\n-53A16F Comment Length        0000 (0)\n-53A171 Disk Start            0000 (0)\n-53A173 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A175 Ext File Attributes   00000000 (0)\n-53A179 Local Header Offset   000D297D (862589)\n-53A17D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A17D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A1D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A1DB   Length              0005 (5)\n-53A1DD   Flags               01 (1) 'Modification'\n-53A1DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A1E2 CENTRAL HEADER #349   02014B50 (33639248)\n-53A1E6 Created Zip Spec      14 (20) '2.0'\n-53A1E7 Created OS            00 (0) 'MS-DOS'\n-53A1E8 Extract Zip Spec      14 (20) '2.0'\n-53A1E9 Extract OS            00 (0) 'MS-DOS'\n-53A1EA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A1EC Compression Method    0000 (0) 'Stored'\n-53A1EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A1F2 CRC                   DB187B38 (3675814712)\n-53A1F6 Compressed Size       00001A85 (6789)\n-53A1FA Uncompressed Size     00001A85 (6789)\n-53A1FE Filename Length       0072 (114)\n-53A200 Extra Length          0009 (9)\n-53A202 Comment Length        0000 (0)\n-53A204 Disk Start            0000 (0)\n-53A206 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A208 Ext File Attributes   00000000 (0)\n-53A20C Local Header Offset   000D2A00 (862720)\n-53A210 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A210: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A282 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A284   Length              0005 (5)\n-53A286   Flags               01 (1) 'Modification'\n-53A287   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A28B CENTRAL HEADER #350   02014B50 (33639248)\n-53A28F Created Zip Spec      14 (20) '2.0'\n-53A290 Created OS            00 (0) 'MS-DOS'\n-53A291 Extract Zip Spec      14 (20) '2.0'\n-53A292 Extract OS            00 (0) 'MS-DOS'\n-53A293 General Purpose Flag  0000 (0)\n-53A295 Compression Method    0000 (0) 'Stored'\n-53A297 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A29B CRC                   00000000 (0)\n-53A29F Compressed Size       00000000 (0)\n-53A2A3 Uncompressed Size     00000000 (0)\n-53A2A7 Filename Length       005D (93)\n-53A2A9 Extra Length          0009 (9)\n-53A2AB Comment Length        0000 (0)\n-53A2AD Disk Start            0000 (0)\n-53A2AF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A2B1 Ext File Attributes   00000000 (0)\n-53A2B5 Local Header Offset   000D452E (869678)\n-53A2B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A2B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A316 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A318   Length              0005 (5)\n-53A31A   Flags               01 (1) 'Modification'\n-53A31B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A31F CENTRAL HEADER #351   02014B50 (33639248)\n-53A323 Created Zip Spec      14 (20) '2.0'\n-53A324 Created OS            00 (0) 'MS-DOS'\n-53A325 Extract Zip Spec      14 (20) '2.0'\n-53A326 Extract OS            00 (0) 'MS-DOS'\n-53A327 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A329 Compression Method    0000 (0) 'Stored'\n-53A32B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A32F CRC                   CD183667 (3440916071)\n-53A333 Compressed Size       00001A6E (6766)\n-53A337 Uncompressed Size     00001A6E (6766)\n-53A33B Filename Length       0073 (115)\n-53A33D Extra Length          0009 (9)\n-53A33F Comment Length        0000 (0)\n-53A341 Disk Start            0000 (0)\n-53A343 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A345 Ext File Attributes   00000000 (0)\n-53A349 Local Header Offset   000D45B2 (869810)\n-53A34D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A34D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A3C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A3C2   Length              0005 (5)\n-53A3C4   Flags               01 (1) 'Modification'\n-53A3C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A3C9 CENTRAL HEADER #352   02014B50 (33639248)\n-53A3CD Created Zip Spec      14 (20) '2.0'\n-53A3CE Created OS            00 (0) 'MS-DOS'\n-53A3CF Extract Zip Spec      14 (20) '2.0'\n-53A3D0 Extract OS            00 (0) 'MS-DOS'\n-53A3D1 General Purpose Flag  0000 (0)\n-53A3D3 Compression Method    0000 (0) 'Stored'\n-53A3D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A3D9 CRC                   00000000 (0)\n-53A3DD Compressed Size       00000000 (0)\n-53A3E1 Uncompressed Size     00000000 (0)\n-53A3E5 Filename Length       005D (93)\n-53A3E7 Extra Length          0009 (9)\n-53A3E9 Comment Length        0000 (0)\n-53A3EB Disk Start            0000 (0)\n-53A3ED Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A3EF Ext File Attributes   00000000 (0)\n-53A3F3 Local Header Offset   000D60CA (876746)\n-53A3F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A3F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A454 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A456   Length              0005 (5)\n-53A458   Flags               01 (1) 'Modification'\n-53A459   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A45D CENTRAL HEADER #353   02014B50 (33639248)\n-53A461 Created Zip Spec      14 (20) '2.0'\n-53A462 Created OS            00 (0) 'MS-DOS'\n-53A463 Extract Zip Spec      14 (20) '2.0'\n-53A464 Extract OS            00 (0) 'MS-DOS'\n-53A465 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A467 Compression Method    0000 (0) 'Stored'\n-53A469 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A46D CRC                   0C7DD276 (209572470)\n-53A471 Compressed Size       00001A92 (6802)\n-53A475 Uncompressed Size     00001A92 (6802)\n-53A479 Filename Length       0073 (115)\n-53A47B Extra Length          0009 (9)\n-53A47D Comment Length        0000 (0)\n-53A47F Disk Start            0000 (0)\n-53A481 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A483 Ext File Attributes   00000000 (0)\n-53A487 Local Header Offset   000D614E (876878)\n-53A48B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A48B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A4FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A500   Length              0005 (5)\n-53A502   Flags               01 (1) 'Modification'\n-53A503   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A507 CENTRAL HEADER #354   02014B50 (33639248)\n-53A50B Created Zip Spec      14 (20) '2.0'\n-53A50C Created OS            00 (0) 'MS-DOS'\n-53A50D Extract Zip Spec      14 (20) '2.0'\n-53A50E Extract OS            00 (0) 'MS-DOS'\n-53A50F General Purpose Flag  0000 (0)\n-53A511 Compression Method    0000 (0) 'Stored'\n-53A513 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A517 CRC                   00000000 (0)\n-53A51B Compressed Size       00000000 (0)\n-53A51F Uncompressed Size     00000000 (0)\n-53A523 Filename Length       005E (94)\n-53A525 Extra Length          0009 (9)\n-53A527 Comment Length        0000 (0)\n-53A529 Disk Start            0000 (0)\n-53A52B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A52D Ext File Attributes   00000000 (0)\n-53A531 Local Header Offset   000D7C8A (883850)\n-53A535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A593 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A595   Length              0005 (5)\n-53A597   Flags               01 (1) 'Modification'\n-53A598   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A59C CENTRAL HEADER #355   02014B50 (33639248)\n-53A5A0 Created Zip Spec      14 (20) '2.0'\n-53A5A1 Created OS            00 (0) 'MS-DOS'\n-53A5A2 Extract Zip Spec      14 (20) '2.0'\n-53A5A3 Extract OS            00 (0) 'MS-DOS'\n-53A5A4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A5A6 Compression Method    0000 (0) 'Stored'\n-53A5A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A5AC CRC                   60EA12C2 (1625952962)\n-53A5B0 Compressed Size       00001733 (5939)\n-53A5B4 Uncompressed Size     00001733 (5939)\n-53A5B8 Filename Length       0074 (116)\n-53A5BA Extra Length          0009 (9)\n-53A5BC Comment Length        0000 (0)\n-53A5BE Disk Start            0000 (0)\n-53A5C0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A5C2 Ext File Attributes   00000000 (0)\n-53A5C6 Local Header Offset   000D7D0F (883983)\n-53A5CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A5CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A63E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A640   Length              0005 (5)\n-53A642   Flags               01 (1) 'Modification'\n-53A643   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A647 CENTRAL HEADER #356   02014B50 (33639248)\n-53A64B Created Zip Spec      14 (20) '2.0'\n-53A64C Created OS            00 (0) 'MS-DOS'\n-53A64D Extract Zip Spec      14 (20) '2.0'\n-53A64E Extract OS            00 (0) 'MS-DOS'\n-53A64F General Purpose Flag  0000 (0)\n-53A651 Compression Method    0000 (0) 'Stored'\n-53A653 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A657 CRC                   00000000 (0)\n-53A65B Compressed Size       00000000 (0)\n-53A65F Uncompressed Size     00000000 (0)\n-53A663 Filename Length       0061 (97)\n-53A665 Extra Length          0009 (9)\n-53A667 Comment Length        0000 (0)\n-53A669 Disk Start            0000 (0)\n-53A66B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A66D Ext File Attributes   00000000 (0)\n-53A671 Local Header Offset   000D94ED (890093)\n-53A675 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A675: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A6D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A6D8   Length              0005 (5)\n-53A6DA   Flags               01 (1) 'Modification'\n-53A6DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A6DF CENTRAL HEADER #357   02014B50 (33639248)\n-53A6E3 Created Zip Spec      14 (20) '2.0'\n-53A6E4 Created OS            00 (0) 'MS-DOS'\n-53A6E5 Extract Zip Spec      14 (20) '2.0'\n-53A6E6 Extract OS            00 (0) 'MS-DOS'\n-53A6E7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A6E9 Compression Method    0000 (0) 'Stored'\n-53A6EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A6EF CRC                   4BB1EABD (1269951165)\n-53A6F3 Compressed Size       0000167D (5757)\n-53A6F7 Uncompressed Size     0000167D (5757)\n-53A6FB Filename Length       0077 (119)\n-53A6FD Extra Length          0009 (9)\n-53A6FF Comment Length        0000 (0)\n-53A701 Disk Start            0000 (0)\n-53A703 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A705 Ext File Attributes   00000000 (0)\n-53A709 Local Header Offset   000D9575 (890229)\n-53A70D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A70D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A784 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A786   Length              0005 (5)\n-53A788   Flags               01 (1) 'Modification'\n-53A789   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A78D CENTRAL HEADER #358   02014B50 (33639248)\n-53A791 Created Zip Spec      14 (20) '2.0'\n-53A792 Created OS            00 (0) 'MS-DOS'\n-53A793 Extract Zip Spec      14 (20) '2.0'\n-53A794 Extract OS            00 (0) 'MS-DOS'\n-53A795 General Purpose Flag  0000 (0)\n-53A797 Compression Method    0000 (0) 'Stored'\n-53A799 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A79D CRC                   00000000 (0)\n-53A7A1 Compressed Size       00000000 (0)\n-53A7A5 Uncompressed Size     00000000 (0)\n-53A7A9 Filename Length       0061 (97)\n-53A7AB Extra Length          0009 (9)\n-53A7AD Comment Length        0000 (0)\n-53A7AF Disk Start            0000 (0)\n-53A7B1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A7B3 Ext File Attributes   00000000 (0)\n-53A7B7 Local Header Offset   000DACA0 (896160)\n-53A7BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A7BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A81C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A81E   Length              0005 (5)\n-53A820   Flags               01 (1) 'Modification'\n-53A821   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A825 CENTRAL HEADER #359   02014B50 (33639248)\n-53A829 Created Zip Spec      14 (20) '2.0'\n-53A82A Created OS            00 (0) 'MS-DOS'\n-53A82B Extract Zip Spec      14 (20) '2.0'\n-53A82C Extract OS            00 (0) 'MS-DOS'\n-53A82D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A82F Compression Method    0000 (0) 'Stored'\n-53A831 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A835 CRC                   A18A8EB9 (2710212281)\n-53A839 Compressed Size       0000328A (12938)\n-53A83D Uncompressed Size     0000328A (12938)\n-53A841 Filename Length       0077 (119)\n-53A843 Extra Length          0009 (9)\n-53A845 Comment Length        0000 (0)\n-53A847 Disk Start            0000 (0)\n-53A849 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A84B Ext File Attributes   00000000 (0)\n-53A84F Local Header Offset   000DAD28 (896296)\n-53A853 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A853: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A8CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A8CC   Length              0005 (5)\n-53A8CE   Flags               01 (1) 'Modification'\n-53A8CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A8D3 CENTRAL HEADER #360   02014B50 (33639248)\n-53A8D7 Created Zip Spec      14 (20) '2.0'\n-53A8D8 Created OS            00 (0) 'MS-DOS'\n-53A8D9 Extract Zip Spec      14 (20) '2.0'\n-53A8DA Extract OS            00 (0) 'MS-DOS'\n-53A8DB General Purpose Flag  0000 (0)\n-53A8DD Compression Method    0000 (0) 'Stored'\n-53A8DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A8E3 CRC                   00000000 (0)\n-53A8E7 Compressed Size       00000000 (0)\n-53A8EB Uncompressed Size     00000000 (0)\n-53A8EF Filename Length       0060 (96)\n-53A8F1 Extra Length          0009 (9)\n-53A8F3 Comment Length        0000 (0)\n-53A8F5 Disk Start            0000 (0)\n-53A8F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A8F9 Ext File Attributes   00000000 (0)\n-53A8FD Local Header Offset   000DE060 (909408)\n-53A901 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A901: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A961 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A963   Length              0005 (5)\n-53A965   Flags               01 (1) 'Modification'\n-53A966   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A96A CENTRAL HEADER #361   02014B50 (33639248)\n-53A96E Created Zip Spec      14 (20) '2.0'\n-53A96F Created OS            00 (0) 'MS-DOS'\n-53A970 Extract Zip Spec      14 (20) '2.0'\n-53A971 Extract OS            00 (0) 'MS-DOS'\n-53A972 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53A974 Compression Method    0000 (0) 'Stored'\n-53A976 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A97A CRC                   B7B762D6 (3082248918)\n-53A97E Compressed Size       00003879 (14457)\n-53A982 Uncompressed Size     00003879 (14457)\n-53A986 Filename Length       0076 (118)\n-53A988 Extra Length          0009 (9)\n-53A98A Comment Length        0000 (0)\n-53A98C Disk Start            0000 (0)\n-53A98E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53A990 Ext File Attributes   00000000 (0)\n-53A994 Local Header Offset   000DE0E7 (909543)\n-53A998 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A998: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AA0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AA10   Length              0005 (5)\n-53AA12   Flags               01 (1) 'Modification'\n-53AA13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AA17 CENTRAL HEADER #362   02014B50 (33639248)\n-53AA1B Created Zip Spec      14 (20) '2.0'\n-53AA1C Created OS            00 (0) 'MS-DOS'\n-53AA1D Extract Zip Spec      14 (20) '2.0'\n-53AA1E Extract OS            00 (0) 'MS-DOS'\n-53AA1F General Purpose Flag  0000 (0)\n-53AA21 Compression Method    0000 (0) 'Stored'\n-53AA23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AA27 CRC                   00000000 (0)\n-53AA2B Compressed Size       00000000 (0)\n-53AA2F Uncompressed Size     00000000 (0)\n-53AA33 Filename Length       0064 (100)\n-53AA35 Extra Length          0009 (9)\n-53AA37 Comment Length        0000 (0)\n-53AA39 Disk Start            0000 (0)\n-53AA3B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AA3D Ext File Attributes   00000000 (0)\n-53AA41 Local Header Offset   000E1A0D (924173)\n-53AA45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AA45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AAA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AAAB   Length              0005 (5)\n-53AAAD   Flags               01 (1) 'Modification'\n-53AAAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AAB2 CENTRAL HEADER #363   02014B50 (33639248)\n-53AAB6 Created Zip Spec      14 (20) '2.0'\n-53AAB7 Created OS            00 (0) 'MS-DOS'\n-53AAB8 Extract Zip Spec      14 (20) '2.0'\n-53AAB9 Extract OS            00 (0) 'MS-DOS'\n-53AABA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53AABC Compression Method    0000 (0) 'Stored'\n-53AABE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AAC2 CRC                   A2B9D29A (2730087066)\n-53AAC6 Compressed Size       00002150 (8528)\n-53AACA Uncompressed Size     00002150 (8528)\n-53AACE Filename Length       007A (122)\n-53AAD0 Extra Length          0009 (9)\n-53AAD2 Comment Length        0000 (0)\n-53AAD4 Disk Start            0000 (0)\n-53AAD6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AAD8 Ext File Attributes   00000000 (0)\n-53AADC Local Header Offset   000E1A98 (924312)\n-53AAE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AAE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AB5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AB5C   Length              0005 (5)\n-53AB5E   Flags               01 (1) 'Modification'\n-53AB5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AB63 CENTRAL HEADER #364   02014B50 (33639248)\n-53AB67 Created Zip Spec      14 (20) '2.0'\n-53AB68 Created OS            00 (0) 'MS-DOS'\n-53AB69 Extract Zip Spec      14 (20) '2.0'\n-53AB6A Extract OS            00 (0) 'MS-DOS'\n-53AB6B General Purpose Flag  0000 (0)\n-53AB6D Compression Method    0000 (0) 'Stored'\n-53AB6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AB73 CRC                   00000000 (0)\n-53AB77 Compressed Size       00000000 (0)\n-53AB7B Uncompressed Size     00000000 (0)\n-53AB7F Filename Length       005D (93)\n-53AB81 Extra Length          0009 (9)\n-53AB83 Comment Length        0000 (0)\n-53AB85 Disk Start            0000 (0)\n-53AB87 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AB89 Ext File Attributes   00000000 (0)\n-53AB8D Local Header Offset   000E3C99 (933017)\n-53AB91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AB91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53ABEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53ABF0   Length              0005 (5)\n-53ABF2   Flags               01 (1) 'Modification'\n-53ABF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53ABF7 CENTRAL HEADER #365   02014B50 (33639248)\n-53ABFB Created Zip Spec      14 (20) '2.0'\n-53ABFC Created OS            00 (0) 'MS-DOS'\n-53ABFD Extract Zip Spec      14 (20) '2.0'\n-53ABFE Extract OS            00 (0) 'MS-DOS'\n-53ABFF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53AC01 Compression Method    0000 (0) 'Stored'\n-53AC03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AC07 CRC                   C4FC7EA2 (3304881826)\n-53AC0B Compressed Size       000011DC (4572)\n-53AC0F Uncompressed Size     000011DC (4572)\n-53AC13 Filename Length       0073 (115)\n-53AC15 Extra Length          0009 (9)\n-53AC17 Comment Length        0000 (0)\n-53AC19 Disk Start            0000 (0)\n-53AC1B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AC1D Ext File Attributes   00000000 (0)\n-53AC21 Local Header Offset   000E3D1D (933149)\n-53AC25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AC25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AC98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AC9A   Length              0005 (5)\n-53AC9C   Flags               01 (1) 'Modification'\n-53AC9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53ACA1 CENTRAL HEADER #366   02014B50 (33639248)\n-53ACA5 Created Zip Spec      14 (20) '2.0'\n-53ACA6 Created OS            00 (0) 'MS-DOS'\n-53ACA7 Extract Zip Spec      14 (20) '2.0'\n-53ACA8 Extract OS            00 (0) 'MS-DOS'\n-53ACA9 General Purpose Flag  0000 (0)\n-53ACAB Compression Method    0000 (0) 'Stored'\n-53ACAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53ACB1 CRC                   00000000 (0)\n-53ACB5 Compressed Size       00000000 (0)\n-53ACB9 Uncompressed Size     00000000 (0)\n-53ACBD Filename Length       0060 (96)\n-53ACBF Extra Length          0009 (9)\n-53ACC1 Comment Length        0000 (0)\n-53ACC3 Disk Start            0000 (0)\n-53ACC5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53ACC7 Ext File Attributes   00000000 (0)\n-53ACCB Local Header Offset   000E4FA3 (937891)\n-53ACCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53ACCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AD2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AD31   Length              0005 (5)\n-53AD33   Flags               01 (1) 'Modification'\n-53AD34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AD38 CENTRAL HEADER #367   02014B50 (33639248)\n-53AD3C Created Zip Spec      14 (20) '2.0'\n-53AD3D Created OS            00 (0) 'MS-DOS'\n-53AD3E Extract Zip Spec      14 (20) '2.0'\n-53AD3F Extract OS            00 (0) 'MS-DOS'\n-53AD40 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53AD42 Compression Method    0000 (0) 'Stored'\n-53AD44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AD48 CRC                   EE30A8D8 (3996166360)\n-53AD4C Compressed Size       000072FB (29435)\n-53AD50 Uncompressed Size     000072FB (29435)\n-53AD54 Filename Length       0076 (118)\n-53AD56 Extra Length          0009 (9)\n-53AD58 Comment Length        0000 (0)\n-53AD5A Disk Start            0000 (0)\n-53AD5C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AD5E Ext File Attributes   00000000 (0)\n-53AD62 Local Header Offset   000E502A (938026)\n-53AD66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AD66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53ADDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53ADDE   Length              0005 (5)\n-53ADE0   Flags               01 (1) 'Modification'\n-53ADE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53ADE5 CENTRAL HEADER #368   02014B50 (33639248)\n-53ADE9 Created Zip Spec      14 (20) '2.0'\n-53ADEA Created OS            00 (0) 'MS-DOS'\n-53ADEB Extract Zip Spec      14 (20) '2.0'\n-53ADEC Extract OS            00 (0) 'MS-DOS'\n-53ADED General Purpose Flag  0000 (0)\n-53ADEF Compression Method    0000 (0) 'Stored'\n-53ADF1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53ADF5 CRC                   00000000 (0)\n-53ADF9 Compressed Size       00000000 (0)\n-53ADFD Uncompressed Size     00000000 (0)\n-53AE01 Filename Length       0066 (102)\n-53AE03 Extra Length          0009 (9)\n-53AE05 Comment Length        0000 (0)\n-53AE07 Disk Start            0000 (0)\n-53AE09 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AE0B Ext File Attributes   00000000 (0)\n-53AE0F Local Header Offset   000EC3D2 (967634)\n-53AE13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AE13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AE79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AE7B   Length              0005 (5)\n-53AE7D   Flags               01 (1) 'Modification'\n-53AE7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AE82 CENTRAL HEADER #369   02014B50 (33639248)\n-53AE86 Created Zip Spec      14 (20) '2.0'\n-53AE87 Created OS            00 (0) 'MS-DOS'\n-53AE88 Extract Zip Spec      14 (20) '2.0'\n-53AE89 Extract OS            00 (0) 'MS-DOS'\n-53AE8A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53AE8C Compression Method    0000 (0) 'Stored'\n-53AE8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AE92 CRC                   EA36353C (3929421116)\n-53AE96 Compressed Size       0000480E (18446)\n-53AE9A Uncompressed Size     0000480E (18446)\n-53AE9E Filename Length       007C (124)\n-53AEA0 Extra Length          0009 (9)\n-53AEA2 Comment Length        0000 (0)\n-53AEA4 Disk Start            0000 (0)\n-53AEA6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AEA8 Ext File Attributes   00000000 (0)\n-53AEAC Local Header Offset   000EC45F (967775)\n-53AEB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AEB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AF2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AF2E   Length              0005 (5)\n-53AF30   Flags               01 (1) 'Modification'\n-53AF31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AF35 CENTRAL HEADER #370   02014B50 (33639248)\n-53AF39 Created Zip Spec      14 (20) '2.0'\n-53AF3A Created OS            00 (0) 'MS-DOS'\n-53AF3B Extract Zip Spec      14 (20) '2.0'\n-53AF3C Extract OS            00 (0) 'MS-DOS'\n-53AF3D General Purpose Flag  0000 (0)\n-53AF3F Compression Method    0000 (0) 'Stored'\n-53AF41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AF45 CRC                   00000000 (0)\n-53AF49 Compressed Size       00000000 (0)\n-53AF4D Uncompressed Size     00000000 (0)\n-53AF51 Filename Length       0065 (101)\n-53AF53 Extra Length          0009 (9)\n-53AF55 Comment Length        0000 (0)\n-53AF57 Disk Start            0000 (0)\n-53AF59 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AF5B Ext File Attributes   00000000 (0)\n-53AF5F Local Header Offset   000F0D20 (986400)\n-53AF63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AF63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AFC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AFCA   Length              0005 (5)\n-53AFCC   Flags               01 (1) 'Modification'\n-53AFCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AFD1 CENTRAL HEADER #371   02014B50 (33639248)\n-53AFD5 Created Zip Spec      14 (20) '2.0'\n-53AFD6 Created OS            00 (0) 'MS-DOS'\n-53AFD7 Extract Zip Spec      14 (20) '2.0'\n-53AFD8 Extract OS            00 (0) 'MS-DOS'\n-53AFD9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53AFDB Compression Method    0000 (0) 'Stored'\n-53AFDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AFE1 CRC                   CA474DE0 (3393670624)\n-53AFE5 Compressed Size       000007B6 (1974)\n-53AFE9 Uncompressed Size     000007B6 (1974)\n-53AFED Filename Length       007B (123)\n-53AFEF Extra Length          0009 (9)\n-53AFF1 Comment Length        0000 (0)\n-53AFF3 Disk Start            0000 (0)\n-53AFF5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53AFF7 Ext File Attributes   00000000 (0)\n-53AFFB Local Header Offset   000F0DAC (986540)\n-53AFFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53AFFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B07A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B07C   Length              0005 (5)\n-53B07E   Flags               01 (1) 'Modification'\n-53B07F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B083 CENTRAL HEADER #372   02014B50 (33639248)\n-53B087 Created Zip Spec      14 (20) '2.0'\n-53B088 Created OS            00 (0) 'MS-DOS'\n-53B089 Extract Zip Spec      14 (20) '2.0'\n-53B08A Extract OS            00 (0) 'MS-DOS'\n-53B08B General Purpose Flag  0000 (0)\n-53B08D Compression Method    0000 (0) 'Stored'\n-53B08F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B093 CRC                   00000000 (0)\n-53B097 Compressed Size       00000000 (0)\n-53B09B Uncompressed Size     00000000 (0)\n-53B09F Filename Length       0061 (97)\n-53B0A1 Extra Length          0009 (9)\n-53B0A3 Comment Length        0000 (0)\n-53B0A5 Disk Start            0000 (0)\n-53B0A7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B0A9 Ext File Attributes   00000000 (0)\n-53B0AD Local Header Offset   000F1614 (988692)\n-53B0B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B0B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B112 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B114   Length              0005 (5)\n-53B116   Flags               01 (1) 'Modification'\n-53B117   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B11B CENTRAL HEADER #373   02014B50 (33639248)\n-53B11F Created Zip Spec      14 (20) '2.0'\n-53B120 Created OS            00 (0) 'MS-DOS'\n-53B121 Extract Zip Spec      14 (20) '2.0'\n-53B122 Extract OS            00 (0) 'MS-DOS'\n-53B123 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53B125 Compression Method    0000 (0) 'Stored'\n-53B127 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B12B CRC                   A19F99D4 (2711591380)\n-53B12F Compressed Size       000011CB (4555)\n-53B133 Uncompressed Size     000011CB (4555)\n-53B137 Filename Length       0077 (119)\n-53B139 Extra Length          0009 (9)\n-53B13B Comment Length        0000 (0)\n-53B13D Disk Start            0000 (0)\n-53B13F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B141 Ext File Attributes   00000000 (0)\n-53B145 Local Header Offset   000F169C (988828)\n-53B149 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B149: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B1C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B1C2   Length              0005 (5)\n-53B1C4   Flags               01 (1) 'Modification'\n-53B1C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B1C9 CENTRAL HEADER #374   02014B50 (33639248)\n-53B1CD Created Zip Spec      14 (20) '2.0'\n-53B1CE Created OS            00 (0) 'MS-DOS'\n-53B1CF Extract Zip Spec      14 (20) '2.0'\n-53B1D0 Extract OS            00 (0) 'MS-DOS'\n-53B1D1 General Purpose Flag  0000 (0)\n-53B1D3 Compression Method    0000 (0) 'Stored'\n-53B1D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B1D9 CRC                   00000000 (0)\n-53B1DD Compressed Size       00000000 (0)\n-53B1E1 Uncompressed Size     00000000 (0)\n-53B1E5 Filename Length       005D (93)\n-53B1E7 Extra Length          0009 (9)\n-53B1E9 Comment Length        0000 (0)\n-53B1EB Disk Start            0000 (0)\n-53B1ED Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B1EF Ext File Attributes   00000000 (0)\n-53B1F3 Local Header Offset   000F2915 (993557)\n-53B1F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B1F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B254 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B256   Length              0005 (5)\n-53B258   Flags               01 (1) 'Modification'\n-53B259   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B25D CENTRAL HEADER #375   02014B50 (33639248)\n-53B261 Created Zip Spec      14 (20) '2.0'\n-53B262 Created OS            00 (0) 'MS-DOS'\n-53B263 Extract Zip Spec      14 (20) '2.0'\n-53B264 Extract OS            00 (0) 'MS-DOS'\n-53B265 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53B267 Compression Method    0000 (0) 'Stored'\n-53B269 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B26D CRC                   7573E84B (1970530379)\n-53B271 Compressed Size       0000284F (10319)\n-53B275 Uncompressed Size     0000284F (10319)\n-53B279 Filename Length       0073 (115)\n-53B27B Extra Length          0009 (9)\n-53B27D Comment Length        0000 (0)\n-53B27F Disk Start            0000 (0)\n-53B281 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B283 Ext File Attributes   00000000 (0)\n-53B287 Local Header Offset   000F2999 (993689)\n-53B28B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B28B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B2FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B300   Length              0005 (5)\n-53B302   Flags               01 (1) 'Modification'\n-53B303   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B307 CENTRAL HEADER #376   02014B50 (33639248)\n-53B30B Created Zip Spec      14 (20) '2.0'\n-53B30C Created OS            00 (0) 'MS-DOS'\n-53B30D Extract Zip Spec      14 (20) '2.0'\n-53B30E Extract OS            00 (0) 'MS-DOS'\n-53B30F General Purpose Flag  0000 (0)\n-53B311 Compression Method    0000 (0) 'Stored'\n-53B313 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B317 CRC                   00000000 (0)\n-53B31B Compressed Size       00000000 (0)\n-53B31F Uncompressed Size     00000000 (0)\n-53B323 Filename Length       0061 (97)\n-53B325 Extra Length          0009 (9)\n-53B327 Comment Length        0000 (0)\n-53B329 Disk Start            0000 (0)\n-53B32B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B32D Ext File Attributes   00000000 (0)\n-53B331 Local Header Offset   000F5292 (1004178)\n-53B335 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B335: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B396 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B398   Length              0005 (5)\n-53B39A   Flags               01 (1) 'Modification'\n-53B39B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B39F CENTRAL HEADER #377   02014B50 (33639248)\n-53B3A3 Created Zip Spec      14 (20) '2.0'\n-53B3A4 Created OS            00 (0) 'MS-DOS'\n-53B3A5 Extract Zip Spec      14 (20) '2.0'\n-53B3A6 Extract OS            00 (0) 'MS-DOS'\n-53B3A7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53B3A9 Compression Method    0000 (0) 'Stored'\n-53B3AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B3AF CRC                   131CB9D8 (320649688)\n-53B3B3 Compressed Size       00002777 (10103)\n-53B3B7 Uncompressed Size     00002777 (10103)\n-53B3BB Filename Length       0077 (119)\n-53B3BD Extra Length          0009 (9)\n-53B3BF Comment Length        0000 (0)\n-53B3C1 Disk Start            0000 (0)\n-53B3C3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B3C5 Ext File Attributes   00000000 (0)\n-53B3C9 Local Header Offset   000F531A (1004314)\n-53B3CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B3CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B444 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B446   Length              0005 (5)\n-53B448   Flags               01 (1) 'Modification'\n-53B449   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B44D CENTRAL HEADER #378   02014B50 (33639248)\n-53B451 Created Zip Spec      14 (20) '2.0'\n-53B452 Created OS            00 (0) 'MS-DOS'\n-53B453 Extract Zip Spec      14 (20) '2.0'\n-53B454 Extract OS            00 (0) 'MS-DOS'\n-53B455 General Purpose Flag  0000 (0)\n-53B457 Compression Method    0000 (0) 'Stored'\n-53B459 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B45D CRC                   00000000 (0)\n-53B461 Compressed Size       00000000 (0)\n-53B465 Uncompressed Size     00000000 (0)\n-53B469 Filename Length       0060 (96)\n-53B46B Extra Length          0009 (9)\n-53B46D Comment Length        0000 (0)\n-53B46F Disk Start            0000 (0)\n-53B471 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B473 Ext File Attributes   00000000 (0)\n-53B477 Local Header Offset   000F7B3F (1014591)\n-53B47B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B47B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B4DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B4DD   Length              0005 (5)\n-53B4DF   Flags               01 (1) 'Modification'\n-53B4E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B4E4 CENTRAL HEADER #379   02014B50 (33639248)\n-53B4E8 Created Zip Spec      14 (20) '2.0'\n-53B4E9 Created OS            00 (0) 'MS-DOS'\n-53B4EA Extract Zip Spec      14 (20) '2.0'\n-53B4EB Extract OS            00 (0) 'MS-DOS'\n-53B4EC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53B4EE Compression Method    0000 (0) 'Stored'\n-53B4F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B4F4 CRC                   95FAB1DA (2516234714)\n-53B4F8 Compressed Size       0000110D (4365)\n-53B4FC Uncompressed Size     0000110D (4365)\n-53B500 Filename Length       0076 (118)\n-53B502 Extra Length          0009 (9)\n-53B504 Comment Length        0000 (0)\n-53B506 Disk Start            0000 (0)\n-53B508 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B50A Ext File Attributes   00000000 (0)\n-53B50E Local Header Offset   000F7BC6 (1014726)\n-53B512 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B512: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B588 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B58A   Length              0005 (5)\n-53B58C   Flags               01 (1) 'Modification'\n-53B58D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B591 CENTRAL HEADER #380   02014B50 (33639248)\n-53B595 Created Zip Spec      14 (20) '2.0'\n-53B596 Created OS            00 (0) 'MS-DOS'\n-53B597 Extract Zip Spec      14 (20) '2.0'\n-53B598 Extract OS            00 (0) 'MS-DOS'\n-53B599 General Purpose Flag  0000 (0)\n-53B59B Compression Method    0000 (0) 'Stored'\n-53B59D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B5A1 CRC                   00000000 (0)\n-53B5A5 Compressed Size       00000000 (0)\n-53B5A9 Uncompressed Size     00000000 (0)\n-53B5AD Filename Length       0063 (99)\n-53B5AF Extra Length          0009 (9)\n-53B5B1 Comment Length        0000 (0)\n-53B5B3 Disk Start            0000 (0)\n-53B5B5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B5B7 Ext File Attributes   00000000 (0)\n-53B5BB Local Header Offset   000F8D80 (1019264)\n-53B5BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B5BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B622 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B624   Length              0005 (5)\n-53B626   Flags               01 (1) 'Modification'\n-53B627   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B62B CENTRAL HEADER #381   02014B50 (33639248)\n-53B62F Created Zip Spec      14 (20) '2.0'\n-53B630 Created OS            00 (0) 'MS-DOS'\n-53B631 Extract Zip Spec      14 (20) '2.0'\n-53B632 Extract OS            00 (0) 'MS-DOS'\n-53B633 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53B635 Compression Method    0000 (0) 'Stored'\n-53B637 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B63B CRC                   B1E82858 (2984781912)\n-53B63F Compressed Size       000019D6 (6614)\n-53B643 Uncompressed Size     000019D6 (6614)\n-53B647 Filename Length       0079 (121)\n-53B649 Extra Length          0009 (9)\n-53B64B Comment Length        0000 (0)\n-53B64D Disk Start            0000 (0)\n-53B64F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B651 Ext File Attributes   00000000 (0)\n-53B655 Local Header Offset   000F8E0A (1019402)\n-53B659 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B659: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B6D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B6D4   Length              0005 (5)\n-53B6D6   Flags               01 (1) 'Modification'\n-53B6D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B6DB CENTRAL HEADER #382   02014B50 (33639248)\n-53B6DF Created Zip Spec      14 (20) '2.0'\n-53B6E0 Created OS            00 (0) 'MS-DOS'\n-53B6E1 Extract Zip Spec      14 (20) '2.0'\n-53B6E2 Extract OS            00 (0) 'MS-DOS'\n-53B6E3 General Purpose Flag  0000 (0)\n-53B6E5 Compression Method    0000 (0) 'Stored'\n-53B6E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B6EB CRC                   00000000 (0)\n-53B6EF Compressed Size       00000000 (0)\n-53B6F3 Uncompressed Size     00000000 (0)\n-53B6F7 Filename Length       0060 (96)\n-53B6F9 Extra Length          0009 (9)\n-53B6FB Comment Length        0000 (0)\n-53B6FD Disk Start            0000 (0)\n-53B6FF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B701 Ext File Attributes   00000000 (0)\n-53B705 Local Header Offset   000FA890 (1026192)\n-53B709 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B709: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B769 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B76B   Length              0005 (5)\n-53B76D   Flags               01 (1) 'Modification'\n-53B76E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B772 CENTRAL HEADER #383   02014B50 (33639248)\n-53B776 Created Zip Spec      14 (20) '2.0'\n-53B777 Created OS            00 (0) 'MS-DOS'\n-53B778 Extract Zip Spec      14 (20) '2.0'\n-53B779 Extract OS            00 (0) 'MS-DOS'\n-53B77A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53B77C Compression Method    0000 (0) 'Stored'\n-53B77E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B782 CRC                   EA13965E (3927152222)\n-53B786 Compressed Size       00000F7E (3966)\n-53B78A Uncompressed Size     00000F7E (3966)\n-53B78E Filename Length       0076 (118)\n-53B790 Extra Length          0009 (9)\n-53B792 Comment Length        0000 (0)\n-53B794 Disk Start            0000 (0)\n-53B796 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B798 Ext File Attributes   00000000 (0)\n-53B79C Local Header Offset   000FA917 (1026327)\n-53B7A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B7A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B816 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B818   Length              0005 (5)\n-53B81A   Flags               01 (1) 'Modification'\n-53B81B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B81F CENTRAL HEADER #384   02014B50 (33639248)\n-53B823 Created Zip Spec      14 (20) '2.0'\n-53B824 Created OS            00 (0) 'MS-DOS'\n-53B825 Extract Zip Spec      14 (20) '2.0'\n-53B826 Extract OS            00 (0) 'MS-DOS'\n-53B827 General Purpose Flag  0000 (0)\n-53B829 Compression Method    0000 (0) 'Stored'\n-53B82B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B82F CRC                   00000000 (0)\n-53B833 Compressed Size       00000000 (0)\n-53B837 Uncompressed Size     00000000 (0)\n-53B83B Filename Length       0059 (89)\n-53B83D Extra Length          0009 (9)\n-53B83F Comment Length        0000 (0)\n-53B841 Disk Start            0000 (0)\n-53B843 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B845 Ext File Attributes   00000000 (0)\n-53B849 Local Header Offset   000FB942 (1030466)\n-53B84D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B84D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B8A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B8A8   Length              0005 (5)\n-53B8AA   Flags               01 (1) 'Modification'\n-53B8AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B8AF CENTRAL HEADER #385   02014B50 (33639248)\n-53B8B3 Created Zip Spec      14 (20) '2.0'\n-53B8B4 Created OS            00 (0) 'MS-DOS'\n-53B8B5 Extract Zip Spec      14 (20) '2.0'\n-53B8B6 Extract OS            00 (0) 'MS-DOS'\n-53B8B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53B8B9 Compression Method    0000 (0) 'Stored'\n-53B8BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B8BF CRC                   C8903588 (3364894088)\n-53B8C3 Compressed Size       00002CD6 (11478)\n-53B8C7 Uncompressed Size     00002CD6 (11478)\n-53B8CB Filename Length       006F (111)\n-53B8CD Extra Length          0009 (9)\n-53B8CF Comment Length        0000 (0)\n-53B8D1 Disk Start            0000 (0)\n-53B8D3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B8D5 Ext File Attributes   00000000 (0)\n-53B8D9 Local Header Offset   000FB9C2 (1030594)\n-53B8DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B8DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B94C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B94E   Length              0005 (5)\n-53B950   Flags               01 (1) 'Modification'\n-53B951   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B955 CENTRAL HEADER #386   02014B50 (33639248)\n-53B959 Created Zip Spec      14 (20) '2.0'\n-53B95A Created OS            00 (0) 'MS-DOS'\n-53B95B Extract Zip Spec      14 (20) '2.0'\n-53B95C Extract OS            00 (0) 'MS-DOS'\n-53B95D General Purpose Flag  0000 (0)\n-53B95F Compression Method    0000 (0) 'Stored'\n-53B961 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B965 CRC                   00000000 (0)\n-53B969 Compressed Size       00000000 (0)\n-53B96D Uncompressed Size     00000000 (0)\n-53B971 Filename Length       006A (106)\n-53B973 Extra Length          0009 (9)\n-53B975 Comment Length        0000 (0)\n-53B977 Disk Start            0000 (0)\n-53B979 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53B97B Ext File Attributes   00000000 (0)\n-53B97F Local Header Offset   000FE73E (1042238)\n-53B983 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B983: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B9ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B9EF   Length              0005 (5)\n-53B9F1   Flags               01 (1) 'Modification'\n-53B9F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B9F6 CENTRAL HEADER #387   02014B50 (33639248)\n-53B9FA Created Zip Spec      14 (20) '2.0'\n-53B9FB Created OS            00 (0) 'MS-DOS'\n-53B9FC Extract Zip Spec      14 (20) '2.0'\n-53B9FD Extract OS            00 (0) 'MS-DOS'\n-53B9FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53BA00 Compression Method    0000 (0) 'Stored'\n-53BA02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BA06 CRC                   D19560D0 (3516227792)\n-53BA0A Compressed Size       00000A2F (2607)\n-53BA0E Uncompressed Size     00000A2F (2607)\n-53BA12 Filename Length       0080 (128)\n-53BA14 Extra Length          0009 (9)\n-53BA16 Comment Length        0000 (0)\n-53BA18 Disk Start            0000 (0)\n-53BA1A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BA1C Ext File Attributes   00000000 (0)\n-53BA20 Local Header Offset   000FE7CF (1042383)\n-53BA24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BA24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BAA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BAA6   Length              0005 (5)\n-53BAA8   Flags               01 (1) 'Modification'\n-53BAA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BAAD CENTRAL HEADER #388   02014B50 (33639248)\n-53BAB1 Created Zip Spec      14 (20) '2.0'\n-53BAB2 Created OS            00 (0) 'MS-DOS'\n-53BAB3 Extract Zip Spec      14 (20) '2.0'\n-53BAB4 Extract OS            00 (0) 'MS-DOS'\n-53BAB5 General Purpose Flag  0000 (0)\n-53BAB7 Compression Method    0000 (0) 'Stored'\n-53BAB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BABD CRC                   00000000 (0)\n-53BAC1 Compressed Size       00000000 (0)\n-53BAC5 Uncompressed Size     00000000 (0)\n-53BAC9 Filename Length       002F (47)\n-53BACB Extra Length          0009 (9)\n-53BACD Comment Length        0000 (0)\n-53BACF Disk Start            0000 (0)\n-53BAD1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BAD3 Ext File Attributes   00000000 (0)\n-53BAD7 Local Header Offset   000FF2B5 (1045173)\n-53BADB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BADB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BB0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BB0C   Length              0005 (5)\n-53BB0E   Flags               01 (1) 'Modification'\n-53BB0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BB13 CENTRAL HEADER #389   02014B50 (33639248)\n-53BB17 Created Zip Spec      14 (20) '2.0'\n-53BB18 Created OS            00 (0) 'MS-DOS'\n-53BB19 Extract Zip Spec      14 (20) '2.0'\n-53BB1A Extract OS            00 (0) 'MS-DOS'\n-53BB1B General Purpose Flag  0000 (0)\n-53BB1D Compression Method    0000 (0) 'Stored'\n-53BB1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BB23 CRC                   00000000 (0)\n-53BB27 Compressed Size       00000000 (0)\n-53BB2B Uncompressed Size     00000000 (0)\n-53BB2F Filename Length       0038 (56)\n-53BB31 Extra Length          0009 (9)\n-53BB33 Comment Length        0000 (0)\n-53BB35 Disk Start            0000 (0)\n-53BB37 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BB39 Ext File Attributes   00000000 (0)\n-53BB3D Local Header Offset   000FF30B (1045259)\n-53BB41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BB41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BB79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BB7B   Length              0005 (5)\n-53BB7D   Flags               01 (1) 'Modification'\n-53BB7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BB82 CENTRAL HEADER #390   02014B50 (33639248)\n-53BB86 Created Zip Spec      14 (20) '2.0'\n-53BB87 Created OS            00 (0) 'MS-DOS'\n-53BB88 Extract Zip Spec      14 (20) '2.0'\n-53BB89 Extract OS            00 (0) 'MS-DOS'\n-53BB8A General Purpose Flag  0000 (0)\n-53BB8C Compression Method    0000 (0) 'Stored'\n-53BB8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BB92 CRC                   00000000 (0)\n-53BB96 Compressed Size       00000000 (0)\n-53BB9A Uncompressed Size     00000000 (0)\n-53BB9E Filename Length       006E (110)\n-53BBA0 Extra Length          0009 (9)\n-53BBA2 Comment Length        0000 (0)\n-53BBA4 Disk Start            0000 (0)\n-53BBA6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BBA8 Ext File Attributes   00000000 (0)\n-53BBAC Local Header Offset   000FF36A (1045354)\n-53BBB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BBB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BC1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BC20   Length              0005 (5)\n-53BC22   Flags               01 (1) 'Modification'\n-53BC23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BC27 CENTRAL HEADER #391   02014B50 (33639248)\n-53BC2B Created Zip Spec      14 (20) '2.0'\n-53BC2C Created OS            00 (0) 'MS-DOS'\n-53BC2D Extract Zip Spec      14 (20) '2.0'\n-53BC2E Extract OS            00 (0) 'MS-DOS'\n-53BC2F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53BC31 Compression Method    0000 (0) 'Stored'\n-53BC33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BC37 CRC                   CB05D09B (3406155931)\n-53BC3B Compressed Size       00005230 (21040)\n-53BC3F Uncompressed Size     00005230 (21040)\n-53BC43 Filename Length       0084 (132)\n-53BC45 Extra Length          0009 (9)\n-53BC47 Comment Length        0000 (0)\n-53BC49 Disk Start            0000 (0)\n-53BC4B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BC4D Ext File Attributes   00000000 (0)\n-53BC51 Local Header Offset   000FF3FF (1045503)\n-53BC55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+537C95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537C97   Length              0005 (5)\n+537C99   Flags               01 (1) 'Modification'\n+537C9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537C9E CENTRAL HEADER #288   02014B50 (33639248)\n+537CA2 Created Zip Spec      14 (20) '2.0'\n+537CA3 Created OS            00 (0) 'MS-DOS'\n+537CA4 Extract Zip Spec      14 (20) '2.0'\n+537CA5 Extract OS            00 (0) 'MS-DOS'\n+537CA6 General Purpose Flag  0000 (0)\n+537CA8 Compression Method    0000 (0) 'Stored'\n+537CAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537CAE CRC                   00000000 (0)\n+537CB2 Compressed Size       00000000 (0)\n+537CB6 Uncompressed Size     00000000 (0)\n+537CBA Filename Length       0024 (36)\n+537CBC Extra Length          0009 (9)\n+537CBE Comment Length        0000 (0)\n+537CC0 Disk Start            0000 (0)\n+537CC2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537CC4 Ext File Attributes   00000000 (0)\n+537CC8 Local Header Offset   000B1A9A (727706)\n+537CCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537CCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537CF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537CF2   Length              0005 (5)\n+537CF4   Flags               01 (1) 'Modification'\n+537CF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537CF9 CENTRAL HEADER #289   02014B50 (33639248)\n+537CFD Created Zip Spec      14 (20) '2.0'\n+537CFE Created OS            00 (0) 'MS-DOS'\n+537CFF Extract Zip Spec      14 (20) '2.0'\n+537D00 Extract OS            00 (0) 'MS-DOS'\n+537D01 General Purpose Flag  0000 (0)\n+537D03 Compression Method    0000 (0) 'Stored'\n+537D05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537D09 CRC                   00000000 (0)\n+537D0D Compressed Size       00000000 (0)\n+537D11 Uncompressed Size     00000000 (0)\n+537D15 Filename Length       002D (45)\n+537D17 Extra Length          0009 (9)\n+537D19 Comment Length        0000 (0)\n+537D1B Disk Start            0000 (0)\n+537D1D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537D1F Ext File Attributes   00000000 (0)\n+537D23 Local Header Offset   000B1AE5 (727781)\n+537D27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537D27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537D54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537D56   Length              0005 (5)\n+537D58   Flags               01 (1) 'Modification'\n+537D59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537D5D CENTRAL HEADER #290   02014B50 (33639248)\n+537D61 Created Zip Spec      14 (20) '2.0'\n+537D62 Created OS            00 (0) 'MS-DOS'\n+537D63 Extract Zip Spec      14 (20) '2.0'\n+537D64 Extract OS            00 (0) 'MS-DOS'\n+537D65 General Purpose Flag  0000 (0)\n+537D67 Compression Method    0000 (0) 'Stored'\n+537D69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537D6D CRC                   00000000 (0)\n+537D71 Compressed Size       00000000 (0)\n+537D75 Uncompressed Size     00000000 (0)\n+537D79 Filename Length       005B (91)\n+537D7B Extra Length          0009 (9)\n+537D7D Comment Length        0000 (0)\n+537D7F Disk Start            0000 (0)\n+537D81 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537D83 Ext File Attributes   00000000 (0)\n+537D87 Local Header Offset   000B1B39 (727865)\n+537D8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537D8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537DE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537DE8   Length              0005 (5)\n+537DEA   Flags               01 (1) 'Modification'\n+537DEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537DEF CENTRAL HEADER #291   02014B50 (33639248)\n+537DF3 Created Zip Spec      14 (20) '2.0'\n+537DF4 Created OS            00 (0) 'MS-DOS'\n+537DF5 Extract Zip Spec      14 (20) '2.0'\n+537DF6 Extract OS            00 (0) 'MS-DOS'\n+537DF7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+537DF9 Compression Method    0000 (0) 'Stored'\n+537DFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537DFF CRC                   561A3BB2 (1444559794)\n+537E03 Compressed Size       000018A8 (6312)\n+537E07 Uncompressed Size     000018A8 (6312)\n+537E0B Filename Length       0071 (113)\n+537E0D Extra Length          0009 (9)\n+537E0F Comment Length        0000 (0)\n+537E11 Disk Start            0000 (0)\n+537E13 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537E15 Ext File Attributes   00000000 (0)\n+537E19 Local Header Offset   000B1BBB (727995)\n+537E1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537E1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537E8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537E90   Length              0005 (5)\n+537E92   Flags               01 (1) 'Modification'\n+537E93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537E97 CENTRAL HEADER #292   02014B50 (33639248)\n+537E9B Created Zip Spec      14 (20) '2.0'\n+537E9C Created OS            00 (0) 'MS-DOS'\n+537E9D Extract Zip Spec      14 (20) '2.0'\n+537E9E Extract OS            00 (0) 'MS-DOS'\n+537E9F General Purpose Flag  0000 (0)\n+537EA1 Compression Method    0000 (0) 'Stored'\n+537EA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537EA7 CRC                   00000000 (0)\n+537EAB Compressed Size       00000000 (0)\n+537EAF Uncompressed Size     00000000 (0)\n+537EB3 Filename Length       005A (90)\n+537EB5 Extra Length          0009 (9)\n+537EB7 Comment Length        0000 (0)\n+537EB9 Disk Start            0000 (0)\n+537EBB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537EBD Ext File Attributes   00000000 (0)\n+537EC1 Local Header Offset   000B350B (734475)\n+537EC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537EC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537F1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537F21   Length              0005 (5)\n+537F23   Flags               01 (1) 'Modification'\n+537F24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537F28 CENTRAL HEADER #293   02014B50 (33639248)\n+537F2C Created Zip Spec      14 (20) '2.0'\n+537F2D Created OS            00 (0) 'MS-DOS'\n+537F2E Extract Zip Spec      14 (20) '2.0'\n+537F2F Extract OS            00 (0) 'MS-DOS'\n+537F30 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+537F32 Compression Method    0000 (0) 'Stored'\n+537F34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537F38 CRC                   A1D18B9C (2714864540)\n+537F3C Compressed Size       00001AC2 (6850)\n+537F40 Uncompressed Size     00001AC2 (6850)\n+537F44 Filename Length       0070 (112)\n+537F46 Extra Length          0009 (9)\n+537F48 Comment Length        0000 (0)\n+537F4A Disk Start            0000 (0)\n+537F4C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537F4E Ext File Attributes   00000000 (0)\n+537F52 Local Header Offset   000B358C (734604)\n+537F56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537F56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+537FC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+537FC8   Length              0005 (5)\n+537FCA   Flags               01 (1) 'Modification'\n+537FCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+537FCF CENTRAL HEADER #294   02014B50 (33639248)\n+537FD3 Created Zip Spec      14 (20) '2.0'\n+537FD4 Created OS            00 (0) 'MS-DOS'\n+537FD5 Extract Zip Spec      14 (20) '2.0'\n+537FD6 Extract OS            00 (0) 'MS-DOS'\n+537FD7 General Purpose Flag  0000 (0)\n+537FD9 Compression Method    0000 (0) 'Stored'\n+537FDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+537FDF CRC                   00000000 (0)\n+537FE3 Compressed Size       00000000 (0)\n+537FE7 Uncompressed Size     00000000 (0)\n+537FEB Filename Length       005B (91)\n+537FED Extra Length          0009 (9)\n+537FEF Comment Length        0000 (0)\n+537FF1 Disk Start            0000 (0)\n+537FF3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+537FF5 Ext File Attributes   00000000 (0)\n+537FF9 Local Header Offset   000B50F5 (741621)\n+537FFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x537FFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538058 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53805A   Length              0005 (5)\n+53805C   Flags               01 (1) 'Modification'\n+53805D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538061 CENTRAL HEADER #295   02014B50 (33639248)\n+538065 Created Zip Spec      14 (20) '2.0'\n+538066 Created OS            00 (0) 'MS-DOS'\n+538067 Extract Zip Spec      14 (20) '2.0'\n+538068 Extract OS            00 (0) 'MS-DOS'\n+538069 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53806B Compression Method    0000 (0) 'Stored'\n+53806D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538071 CRC                   33231FD5 (857939925)\n+538075 Compressed Size       00001399 (5017)\n+538079 Uncompressed Size     00001399 (5017)\n+53807D Filename Length       0071 (113)\n+53807F Extra Length          0009 (9)\n+538081 Comment Length        0000 (0)\n+538083 Disk Start            0000 (0)\n+538085 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538087 Ext File Attributes   00000000 (0)\n+53808B Local Header Offset   000B5177 (741751)\n+53808F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53808F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538100 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538102   Length              0005 (5)\n+538104   Flags               01 (1) 'Modification'\n+538105   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538109 CENTRAL HEADER #296   02014B50 (33639248)\n+53810D Created Zip Spec      14 (20) '2.0'\n+53810E Created OS            00 (0) 'MS-DOS'\n+53810F Extract Zip Spec      14 (20) '2.0'\n+538110 Extract OS            00 (0) 'MS-DOS'\n+538111 General Purpose Flag  0000 (0)\n+538113 Compression Method    0000 (0) 'Stored'\n+538115 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538119 CRC                   00000000 (0)\n+53811D Compressed Size       00000000 (0)\n+538121 Uncompressed Size     00000000 (0)\n+538125 Filename Length       0023 (35)\n+538127 Extra Length          0009 (9)\n+538129 Comment Length        0000 (0)\n+53812B Disk Start            0000 (0)\n+53812D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53812F Ext File Attributes   00000000 (0)\n+538133 Local Header Offset   000B65B8 (746936)\n+538137 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538137: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53815A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53815C   Length              0005 (5)\n+53815E   Flags               01 (1) 'Modification'\n+53815F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538163 CENTRAL HEADER #297   02014B50 (33639248)\n+538167 Created Zip Spec      14 (20) '2.0'\n+538168 Created OS            00 (0) 'MS-DOS'\n+538169 Extract Zip Spec      14 (20) '2.0'\n+53816A Extract OS            00 (0) 'MS-DOS'\n+53816B General Purpose Flag  0000 (0)\n+53816D Compression Method    0000 (0) 'Stored'\n+53816F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538173 CRC                   00000000 (0)\n+538177 Compressed Size       00000000 (0)\n+53817B Uncompressed Size     00000000 (0)\n+53817F Filename Length       002C (44)\n+538181 Extra Length          0009 (9)\n+538183 Comment Length        0000 (0)\n+538185 Disk Start            0000 (0)\n+538187 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538189 Ext File Attributes   00000000 (0)\n+53818D Local Header Offset   000B6602 (747010)\n+538191 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538191: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5381BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5381BF   Length              0005 (5)\n+5381C1   Flags               01 (1) 'Modification'\n+5381C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5381C6 CENTRAL HEADER #298   02014B50 (33639248)\n+5381CA Created Zip Spec      14 (20) '2.0'\n+5381CB Created OS            00 (0) 'MS-DOS'\n+5381CC Extract Zip Spec      14 (20) '2.0'\n+5381CD Extract OS            00 (0) 'MS-DOS'\n+5381CE General Purpose Flag  0000 (0)\n+5381D0 Compression Method    0000 (0) 'Stored'\n+5381D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5381D6 CRC                   00000000 (0)\n+5381DA Compressed Size       00000000 (0)\n+5381DE Uncompressed Size     00000000 (0)\n+5381E2 Filename Length       0054 (84)\n+5381E4 Extra Length          0009 (9)\n+5381E6 Comment Length        0000 (0)\n+5381E8 Disk Start            0000 (0)\n+5381EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5381EC Ext File Attributes   00000000 (0)\n+5381F0 Local Header Offset   000B6655 (747093)\n+5381F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5381F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538248 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53824A   Length              0005 (5)\n+53824C   Flags               01 (1) 'Modification'\n+53824D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538251 CENTRAL HEADER #299   02014B50 (33639248)\n+538255 Created Zip Spec      14 (20) '2.0'\n+538256 Created OS            00 (0) 'MS-DOS'\n+538257 Extract Zip Spec      14 (20) '2.0'\n+538258 Extract OS            00 (0) 'MS-DOS'\n+538259 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53825B Compression Method    0000 (0) 'Stored'\n+53825D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538261 CRC                   63C353AF (1673745327)\n+538265 Compressed Size       00000CF8 (3320)\n+538269 Uncompressed Size     00000CF8 (3320)\n+53826D Filename Length       006A (106)\n+53826F Extra Length          0009 (9)\n+538271 Comment Length        0000 (0)\n+538273 Disk Start            0000 (0)\n+538275 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538277 Ext File Attributes   00000000 (0)\n+53827B Local Header Offset   000B66D0 (747216)\n+53827F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53827F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5382E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5382EB   Length              0005 (5)\n+5382ED   Flags               01 (1) 'Modification'\n+5382EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5382F2 CENTRAL HEADER #300   02014B50 (33639248)\n+5382F6 Created Zip Spec      14 (20) '2.0'\n+5382F7 Created OS            00 (0) 'MS-DOS'\n+5382F8 Extract Zip Spec      14 (20) '2.0'\n+5382F9 Extract OS            00 (0) 'MS-DOS'\n+5382FA General Purpose Flag  0000 (0)\n+5382FC Compression Method    0000 (0) 'Stored'\n+5382FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538302 CRC                   00000000 (0)\n+538306 Compressed Size       00000000 (0)\n+53830A Uncompressed Size     00000000 (0)\n+53830E Filename Length       005B (91)\n+538310 Extra Length          0009 (9)\n+538312 Comment Length        0000 (0)\n+538314 Disk Start            0000 (0)\n+538316 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538318 Ext File Attributes   00000000 (0)\n+53831C Local Header Offset   000B7469 (750697)\n+538320 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538320: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53837B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53837D   Length              0005 (5)\n+53837F   Flags               01 (1) 'Modification'\n+538380   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538384 CENTRAL HEADER #301   02014B50 (33639248)\n+538388 Created Zip Spec      14 (20) '2.0'\n+538389 Created OS            00 (0) 'MS-DOS'\n+53838A Extract Zip Spec      14 (20) '2.0'\n+53838B Extract OS            00 (0) 'MS-DOS'\n+53838C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53838E Compression Method    0000 (0) 'Stored'\n+538390 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538394 CRC                   C64481A5 (3326378405)\n+538398 Compressed Size       00000723 (1827)\n+53839C Uncompressed Size     00000723 (1827)\n+5383A0 Filename Length       0071 (113)\n+5383A2 Extra Length          0009 (9)\n+5383A4 Comment Length        0000 (0)\n+5383A6 Disk Start            0000 (0)\n+5383A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5383AA Ext File Attributes   00000000 (0)\n+5383AE Local Header Offset   000B74EB (750827)\n+5383B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5383B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538423 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538425   Length              0005 (5)\n+538427   Flags               01 (1) 'Modification'\n+538428   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53842C CENTRAL HEADER #302   02014B50 (33639248)\n+538430 Created Zip Spec      14 (20) '2.0'\n+538431 Created OS            00 (0) 'MS-DOS'\n+538432 Extract Zip Spec      14 (20) '2.0'\n+538433 Extract OS            00 (0) 'MS-DOS'\n+538434 General Purpose Flag  0000 (0)\n+538436 Compression Method    0000 (0) 'Stored'\n+538438 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53843C CRC                   00000000 (0)\n+538440 Compressed Size       00000000 (0)\n+538444 Uncompressed Size     00000000 (0)\n+538448 Filename Length       0059 (89)\n+53844A Extra Length          0009 (9)\n+53844C Comment Length        0000 (0)\n+53844E Disk Start            0000 (0)\n+538450 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538452 Ext File Attributes   00000000 (0)\n+538456 Local Header Offset   000B7CB6 (752822)\n+53845A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53845A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5384B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5384B5   Length              0005 (5)\n+5384B7   Flags               01 (1) 'Modification'\n+5384B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5384BC CENTRAL HEADER #303   02014B50 (33639248)\n+5384C0 Created Zip Spec      14 (20) '2.0'\n+5384C1 Created OS            00 (0) 'MS-DOS'\n+5384C2 Extract Zip Spec      14 (20) '2.0'\n+5384C3 Extract OS            00 (0) 'MS-DOS'\n+5384C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5384C6 Compression Method    0000 (0) 'Stored'\n+5384C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5384CC CRC                   39649106 (962892038)\n+5384D0 Compressed Size       000006E2 (1762)\n+5384D4 Uncompressed Size     000006E2 (1762)\n+5384D8 Filename Length       006F (111)\n+5384DA Extra Length          0009 (9)\n+5384DC Comment Length        0000 (0)\n+5384DE Disk Start            0000 (0)\n+5384E0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5384E2 Ext File Attributes   00000000 (0)\n+5384E6 Local Header Offset   000B7D36 (752950)\n+5384EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5384EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538559 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53855B   Length              0005 (5)\n+53855D   Flags               01 (1) 'Modification'\n+53855E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538562 CENTRAL HEADER #304   02014B50 (33639248)\n+538566 Created Zip Spec      14 (20) '2.0'\n+538567 Created OS            00 (0) 'MS-DOS'\n+538568 Extract Zip Spec      14 (20) '2.0'\n+538569 Extract OS            00 (0) 'MS-DOS'\n+53856A General Purpose Flag  0000 (0)\n+53856C Compression Method    0000 (0) 'Stored'\n+53856E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538572 CRC                   00000000 (0)\n+538576 Compressed Size       00000000 (0)\n+53857A Uncompressed Size     00000000 (0)\n+53857E Filename Length       0054 (84)\n+538580 Extra Length          0009 (9)\n+538582 Comment Length        0000 (0)\n+538584 Disk Start            0000 (0)\n+538586 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538588 Ext File Attributes   00000000 (0)\n+53858C Local Header Offset   000B84BE (754878)\n+538590 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538590: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5385E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5385E6   Length              0005 (5)\n+5385E8   Flags               01 (1) 'Modification'\n+5385E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5385ED CENTRAL HEADER #305   02014B50 (33639248)\n+5385F1 Created Zip Spec      14 (20) '2.0'\n+5385F2 Created OS            00 (0) 'MS-DOS'\n+5385F3 Extract Zip Spec      14 (20) '2.0'\n+5385F4 Extract OS            00 (0) 'MS-DOS'\n+5385F5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5385F7 Compression Method    0000 (0) 'Stored'\n+5385F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5385FD CRC                   8DC8B44C (2378740812)\n+538601 Compressed Size       00000782 (1922)\n+538605 Uncompressed Size     00000782 (1922)\n+538609 Filename Length       006A (106)\n+53860B Extra Length          0009 (9)\n+53860D Comment Length        0000 (0)\n+53860F Disk Start            0000 (0)\n+538611 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538613 Ext File Attributes   00000000 (0)\n+538617 Local Header Offset   000B8539 (755001)\n+53861B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53861B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538685 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538687   Length              0005 (5)\n+538689   Flags               01 (1) 'Modification'\n+53868A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53868E CENTRAL HEADER #306   02014B50 (33639248)\n+538692 Created Zip Spec      14 (20) '2.0'\n+538693 Created OS            00 (0) 'MS-DOS'\n+538694 Extract Zip Spec      14 (20) '2.0'\n+538695 Extract OS            00 (0) 'MS-DOS'\n+538696 General Purpose Flag  0000 (0)\n+538698 Compression Method    0000 (0) 'Stored'\n+53869A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53869E CRC                   00000000 (0)\n+5386A2 Compressed Size       00000000 (0)\n+5386A6 Uncompressed Size     00000000 (0)\n+5386AA Filename Length       0025 (37)\n+5386AC Extra Length          0009 (9)\n+5386AE Comment Length        0000 (0)\n+5386B0 Disk Start            0000 (0)\n+5386B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5386B4 Ext File Attributes   00000000 (0)\n+5386B8 Local Header Offset   000B8D5C (757084)\n+5386BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5386BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5386E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5386E3   Length              0005 (5)\n+5386E5   Flags               01 (1) 'Modification'\n+5386E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5386EA CENTRAL HEADER #307   02014B50 (33639248)\n+5386EE Created Zip Spec      14 (20) '2.0'\n+5386EF Created OS            00 (0) 'MS-DOS'\n+5386F0 Extract Zip Spec      14 (20) '2.0'\n+5386F1 Extract OS            00 (0) 'MS-DOS'\n+5386F2 General Purpose Flag  0000 (0)\n+5386F4 Compression Method    0000 (0) 'Stored'\n+5386F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5386FA CRC                   00000000 (0)\n+5386FE Compressed Size       00000000 (0)\n+538702 Uncompressed Size     00000000 (0)\n+538706 Filename Length       002E (46)\n+538708 Extra Length          0009 (9)\n+53870A Comment Length        0000 (0)\n+53870C Disk Start            0000 (0)\n+53870E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538710 Ext File Attributes   00000000 (0)\n+538714 Local Header Offset   000B8DA8 (757160)\n+538718 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538718: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538746 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538748   Length              0005 (5)\n+53874A   Flags               01 (1) 'Modification'\n+53874B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53874F CENTRAL HEADER #308   02014B50 (33639248)\n+538753 Created Zip Spec      14 (20) '2.0'\n+538754 Created OS            00 (0) 'MS-DOS'\n+538755 Extract Zip Spec      14 (20) '2.0'\n+538756 Extract OS            00 (0) 'MS-DOS'\n+538757 General Purpose Flag  0000 (0)\n+538759 Compression Method    0000 (0) 'Stored'\n+53875B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53875F CRC                   00000000 (0)\n+538763 Compressed Size       00000000 (0)\n+538767 Uncompressed Size     00000000 (0)\n+53876B Filename Length       005E (94)\n+53876D Extra Length          0009 (9)\n+53876F Comment Length        0000 (0)\n+538771 Disk Start            0000 (0)\n+538773 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538775 Ext File Attributes   00000000 (0)\n+538779 Local Header Offset   000B8DFD (757245)\n+53877D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53877D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5387DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5387DD   Length              0005 (5)\n+5387DF   Flags               01 (1) 'Modification'\n+5387E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5387E4 CENTRAL HEADER #309   02014B50 (33639248)\n+5387E8 Created Zip Spec      14 (20) '2.0'\n+5387E9 Created OS            00 (0) 'MS-DOS'\n+5387EA Extract Zip Spec      14 (20) '2.0'\n+5387EB Extract OS            00 (0) 'MS-DOS'\n+5387EC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5387EE Compression Method    0000 (0) 'Stored'\n+5387F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5387F4 CRC                   335CA1CD (861708749)\n+5387F8 Compressed Size       00000E9A (3738)\n+5387FC Uncompressed Size     00000E9A (3738)\n+538800 Filename Length       0074 (116)\n+538802 Extra Length          0009 (9)\n+538804 Comment Length        0000 (0)\n+538806 Disk Start            0000 (0)\n+538808 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53880A Ext File Attributes   00000000 (0)\n+53880E Local Header Offset   000B8E82 (757378)\n+538812 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538812: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538886 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538888   Length              0005 (5)\n+53888A   Flags               01 (1) 'Modification'\n+53888B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53888F CENTRAL HEADER #310   02014B50 (33639248)\n+538893 Created Zip Spec      14 (20) '2.0'\n+538894 Created OS            00 (0) 'MS-DOS'\n+538895 Extract Zip Spec      14 (20) '2.0'\n+538896 Extract OS            00 (0) 'MS-DOS'\n+538897 General Purpose Flag  0000 (0)\n+538899 Compression Method    0000 (0) 'Stored'\n+53889B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53889F CRC                   00000000 (0)\n+5388A3 Compressed Size       00000000 (0)\n+5388A7 Uncompressed Size     00000000 (0)\n+5388AB Filename Length       006A (106)\n+5388AD Extra Length          0009 (9)\n+5388AF Comment Length        0000 (0)\n+5388B1 Disk Start            0000 (0)\n+5388B3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5388B5 Ext File Attributes   00000000 (0)\n+5388B9 Local Header Offset   000B9DC7 (761287)\n+5388BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5388BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538927 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538929   Length              0005 (5)\n+53892B   Flags               01 (1) 'Modification'\n+53892C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538930 CENTRAL HEADER #311   02014B50 (33639248)\n+538934 Created Zip Spec      14 (20) '2.0'\n+538935 Created OS            00 (0) 'MS-DOS'\n+538936 Extract Zip Spec      14 (20) '2.0'\n+538937 Extract OS            00 (0) 'MS-DOS'\n+538938 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53893A Compression Method    0000 (0) 'Stored'\n+53893C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538940 CRC                   3EE7FDDD (1055391197)\n+538944 Compressed Size       00001059 (4185)\n+538948 Uncompressed Size     00001059 (4185)\n+53894C Filename Length       0080 (128)\n+53894E Extra Length          0009 (9)\n+538950 Comment Length        0000 (0)\n+538952 Disk Start            0000 (0)\n+538954 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538956 Ext File Attributes   00000000 (0)\n+53895A Local Header Offset   000B9E58 (761432)\n+53895E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53895E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5389DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5389E0   Length              0005 (5)\n+5389E2   Flags               01 (1) 'Modification'\n+5389E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5389E7 CENTRAL HEADER #312   02014B50 (33639248)\n+5389EB Created Zip Spec      14 (20) '2.0'\n+5389EC Created OS            00 (0) 'MS-DOS'\n+5389ED Extract Zip Spec      14 (20) '2.0'\n+5389EE Extract OS            00 (0) 'MS-DOS'\n+5389EF General Purpose Flag  0000 (0)\n+5389F1 Compression Method    0000 (0) 'Stored'\n+5389F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5389F7 CRC                   00000000 (0)\n+5389FB Compressed Size       00000000 (0)\n+5389FF Uncompressed Size     00000000 (0)\n+538A03 Filename Length       0027 (39)\n+538A05 Extra Length          0009 (9)\n+538A07 Comment Length        0000 (0)\n+538A09 Disk Start            0000 (0)\n+538A0B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538A0D Ext File Attributes   00000000 (0)\n+538A11 Local Header Offset   000BAF68 (765800)\n+538A15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538A15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538A3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538A3E   Length              0005 (5)\n+538A40   Flags               01 (1) 'Modification'\n+538A41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538A45 CENTRAL HEADER #313   02014B50 (33639248)\n+538A49 Created Zip Spec      14 (20) '2.0'\n+538A4A Created OS            00 (0) 'MS-DOS'\n+538A4B Extract Zip Spec      14 (20) '2.0'\n+538A4C Extract OS            00 (0) 'MS-DOS'\n+538A4D General Purpose Flag  0000 (0)\n+538A4F Compression Method    0000 (0) 'Stored'\n+538A51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538A55 CRC                   00000000 (0)\n+538A59 Compressed Size       00000000 (0)\n+538A5D Uncompressed Size     00000000 (0)\n+538A61 Filename Length       0030 (48)\n+538A63 Extra Length          0009 (9)\n+538A65 Comment Length        0000 (0)\n+538A67 Disk Start            0000 (0)\n+538A69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538A6B Ext File Attributes   00000000 (0)\n+538A6F Local Header Offset   000BAFB6 (765878)\n+538A73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538A73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538AA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538AA5   Length              0005 (5)\n+538AA7   Flags               01 (1) 'Modification'\n+538AA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538AAC CENTRAL HEADER #314   02014B50 (33639248)\n+538AB0 Created Zip Spec      14 (20) '2.0'\n+538AB1 Created OS            00 (0) 'MS-DOS'\n+538AB2 Extract Zip Spec      14 (20) '2.0'\n+538AB3 Extract OS            00 (0) 'MS-DOS'\n+538AB4 General Purpose Flag  0000 (0)\n+538AB6 Compression Method    0000 (0) 'Stored'\n+538AB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538ABC CRC                   00000000 (0)\n+538AC0 Compressed Size       00000000 (0)\n+538AC4 Uncompressed Size     00000000 (0)\n+538AC8 Filename Length       0069 (105)\n+538ACA Extra Length          0009 (9)\n+538ACC Comment Length        0000 (0)\n+538ACE Disk Start            0000 (0)\n+538AD0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538AD2 Ext File Attributes   00000000 (0)\n+538AD6 Local Header Offset   000BB00D (765965)\n+538ADA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538ADA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538B43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538B45   Length              0005 (5)\n+538B47   Flags               01 (1) 'Modification'\n+538B48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538B4C CENTRAL HEADER #315   02014B50 (33639248)\n+538B50 Created Zip Spec      14 (20) '2.0'\n+538B51 Created OS            00 (0) 'MS-DOS'\n+538B52 Extract Zip Spec      14 (20) '2.0'\n+538B53 Extract OS            00 (0) 'MS-DOS'\n+538B54 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+538B56 Compression Method    0000 (0) 'Stored'\n+538B58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538B5C CRC                   67FA3A91 (1744452241)\n+538B60 Compressed Size       00000C5B (3163)\n+538B64 Uncompressed Size     00000C5B (3163)\n+538B68 Filename Length       007F (127)\n+538B6A Extra Length          0009 (9)\n+538B6C Comment Length        0000 (0)\n+538B6E Disk Start            0000 (0)\n+538B70 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538B72 Ext File Attributes   00000000 (0)\n+538B76 Local Header Offset   000BB09D (766109)\n+538B7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538B7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538BF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538BFB   Length              0005 (5)\n+538BFD   Flags               01 (1) 'Modification'\n+538BFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538C02 CENTRAL HEADER #316   02014B50 (33639248)\n+538C06 Created Zip Spec      14 (20) '2.0'\n+538C07 Created OS            00 (0) 'MS-DOS'\n+538C08 Extract Zip Spec      14 (20) '2.0'\n+538C09 Extract OS            00 (0) 'MS-DOS'\n+538C0A General Purpose Flag  0000 (0)\n+538C0C Compression Method    0000 (0) 'Stored'\n+538C0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538C12 CRC                   00000000 (0)\n+538C16 Compressed Size       00000000 (0)\n+538C1A Uncompressed Size     00000000 (0)\n+538C1E Filename Length       0064 (100)\n+538C20 Extra Length          0009 (9)\n+538C22 Comment Length        0000 (0)\n+538C24 Disk Start            0000 (0)\n+538C26 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538C28 Ext File Attributes   00000000 (0)\n+538C2C Local Header Offset   000BBDAE (769454)\n+538C30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538C30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538C94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538C96   Length              0005 (5)\n+538C98   Flags               01 (1) 'Modification'\n+538C99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538C9D CENTRAL HEADER #317   02014B50 (33639248)\n+538CA1 Created Zip Spec      14 (20) '2.0'\n+538CA2 Created OS            00 (0) 'MS-DOS'\n+538CA3 Extract Zip Spec      14 (20) '2.0'\n+538CA4 Extract OS            00 (0) 'MS-DOS'\n+538CA5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+538CA7 Compression Method    0000 (0) 'Stored'\n+538CA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538CAD CRC                   984F1B9C (2555321244)\n+538CB1 Compressed Size       00001AA4 (6820)\n+538CB5 Uncompressed Size     00001AA4 (6820)\n+538CB9 Filename Length       007A (122)\n+538CBB Extra Length          0009 (9)\n+538CBD Comment Length        0000 (0)\n+538CBF Disk Start            0000 (0)\n+538CC1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538CC3 Ext File Attributes   00000000 (0)\n+538CC7 Local Header Offset   000BBE39 (769593)\n+538CCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538CCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538D45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538D47   Length              0005 (5)\n+538D49   Flags               01 (1) 'Modification'\n+538D4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538D4E CENTRAL HEADER #318   02014B50 (33639248)\n+538D52 Created Zip Spec      14 (20) '2.0'\n+538D53 Created OS            00 (0) 'MS-DOS'\n+538D54 Extract Zip Spec      14 (20) '2.0'\n+538D55 Extract OS            00 (0) 'MS-DOS'\n+538D56 General Purpose Flag  0000 (0)\n+538D58 Compression Method    0000 (0) 'Stored'\n+538D5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538D5E CRC                   00000000 (0)\n+538D62 Compressed Size       00000000 (0)\n+538D66 Uncompressed Size     00000000 (0)\n+538D6A Filename Length       006C (108)\n+538D6C Extra Length          0009 (9)\n+538D6E Comment Length        0000 (0)\n+538D70 Disk Start            0000 (0)\n+538D72 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538D74 Ext File Attributes   00000000 (0)\n+538D78 Local Header Offset   000BD98E (776590)\n+538D7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538D7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538DE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538DEA   Length              0005 (5)\n+538DEC   Flags               01 (1) 'Modification'\n+538DED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538DF1 CENTRAL HEADER #319   02014B50 (33639248)\n+538DF5 Created Zip Spec      14 (20) '2.0'\n+538DF6 Created OS            00 (0) 'MS-DOS'\n+538DF7 Extract Zip Spec      14 (20) '2.0'\n+538DF8 Extract OS            00 (0) 'MS-DOS'\n+538DF9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+538DFB Compression Method    0000 (0) 'Stored'\n+538DFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538E01 CRC                   0FF19131 (267489585)\n+538E05 Compressed Size       00000DC2 (3522)\n+538E09 Uncompressed Size     00000DC2 (3522)\n+538E0D Filename Length       0082 (130)\n+538E0F Extra Length          0009 (9)\n+538E11 Comment Length        0000 (0)\n+538E13 Disk Start            0000 (0)\n+538E15 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538E17 Ext File Attributes   00000000 (0)\n+538E1B Local Header Offset   000BDA21 (776737)\n+538E1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538E1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538EA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538EA3   Length              0005 (5)\n+538EA5   Flags               01 (1) 'Modification'\n+538EA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538EAA CENTRAL HEADER #320   02014B50 (33639248)\n+538EAE Created Zip Spec      14 (20) '2.0'\n+538EAF Created OS            00 (0) 'MS-DOS'\n+538EB0 Extract Zip Spec      14 (20) '2.0'\n+538EB1 Extract OS            00 (0) 'MS-DOS'\n+538EB2 General Purpose Flag  0000 (0)\n+538EB4 Compression Method    0000 (0) 'Stored'\n+538EB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538EBA CRC                   00000000 (0)\n+538EBE Compressed Size       00000000 (0)\n+538EC2 Uncompressed Size     00000000 (0)\n+538EC6 Filename Length       0069 (105)\n+538EC8 Extra Length          0009 (9)\n+538ECA Comment Length        0000 (0)\n+538ECC Disk Start            0000 (0)\n+538ECE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538ED0 Ext File Attributes   00000000 (0)\n+538ED4 Local Header Offset   000BE89C (780444)\n+538ED8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538ED8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538F41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538F43   Length              0005 (5)\n+538F45   Flags               01 (1) 'Modification'\n+538F46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+538F4A CENTRAL HEADER #321   02014B50 (33639248)\n+538F4E Created Zip Spec      14 (20) '2.0'\n+538F4F Created OS            00 (0) 'MS-DOS'\n+538F50 Extract Zip Spec      14 (20) '2.0'\n+538F51 Extract OS            00 (0) 'MS-DOS'\n+538F52 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+538F54 Compression Method    0000 (0) 'Stored'\n+538F56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+538F5A CRC                   63513D5C (1666268508)\n+538F5E Compressed Size       000007C0 (1984)\n+538F62 Uncompressed Size     000007C0 (1984)\n+538F66 Filename Length       007F (127)\n+538F68 Extra Length          0009 (9)\n+538F6A Comment Length        0000 (0)\n+538F6C Disk Start            0000 (0)\n+538F6E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+538F70 Ext File Attributes   00000000 (0)\n+538F74 Local Header Offset   000BE92C (780588)\n+538F78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538F78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+538FF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+538FF9   Length              0005 (5)\n+538FFB   Flags               01 (1) 'Modification'\n+538FFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539000 CENTRAL HEADER #322   02014B50 (33639248)\n+539004 Created Zip Spec      14 (20) '2.0'\n+539005 Created OS            00 (0) 'MS-DOS'\n+539006 Extract Zip Spec      14 (20) '2.0'\n+539007 Extract OS            00 (0) 'MS-DOS'\n+539008 General Purpose Flag  0000 (0)\n+53900A Compression Method    0000 (0) 'Stored'\n+53900C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539010 CRC                   00000000 (0)\n+539014 Compressed Size       00000000 (0)\n+539018 Uncompressed Size     00000000 (0)\n+53901C Filename Length       0060 (96)\n+53901E Extra Length          0009 (9)\n+539020 Comment Length        0000 (0)\n+539022 Disk Start            0000 (0)\n+539024 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539026 Ext File Attributes   00000000 (0)\n+53902A Local Header Offset   000BF1A2 (782754)\n+53902E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53902E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53908E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539090   Length              0005 (5)\n+539092   Flags               01 (1) 'Modification'\n+539093   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539097 CENTRAL HEADER #323   02014B50 (33639248)\n+53909B Created Zip Spec      14 (20) '2.0'\n+53909C Created OS            00 (0) 'MS-DOS'\n+53909D Extract Zip Spec      14 (20) '2.0'\n+53909E Extract OS            00 (0) 'MS-DOS'\n+53909F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5390A1 Compression Method    0000 (0) 'Stored'\n+5390A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5390A7 CRC                   99929518 (2576520472)\n+5390AB Compressed Size       00000EDA (3802)\n+5390AF Uncompressed Size     00000EDA (3802)\n+5390B3 Filename Length       0076 (118)\n+5390B5 Extra Length          0009 (9)\n+5390B7 Comment Length        0000 (0)\n+5390B9 Disk Start            0000 (0)\n+5390BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5390BD Ext File Attributes   00000000 (0)\n+5390C1 Local Header Offset   000BF229 (782889)\n+5390C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5390C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53913B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53913D   Length              0005 (5)\n+53913F   Flags               01 (1) 'Modification'\n+539140   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539144 CENTRAL HEADER #324   02014B50 (33639248)\n+539148 Created Zip Spec      14 (20) '2.0'\n+539149 Created OS            00 (0) 'MS-DOS'\n+53914A Extract Zip Spec      14 (20) '2.0'\n+53914B Extract OS            00 (0) 'MS-DOS'\n+53914C General Purpose Flag  0000 (0)\n+53914E Compression Method    0000 (0) 'Stored'\n+539150 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539154 CRC                   00000000 (0)\n+539158 Compressed Size       00000000 (0)\n+53915C Uncompressed Size     00000000 (0)\n+539160 Filename Length       005E (94)\n+539162 Extra Length          0009 (9)\n+539164 Comment Length        0000 (0)\n+539166 Disk Start            0000 (0)\n+539168 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53916A Ext File Attributes   00000000 (0)\n+53916E Local Header Offset   000C01B0 (786864)\n+539172 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539172: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5391D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5391D2   Length              0005 (5)\n+5391D4   Flags               01 (1) 'Modification'\n+5391D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5391D9 CENTRAL HEADER #325   02014B50 (33639248)\n+5391DD Created Zip Spec      14 (20) '2.0'\n+5391DE Created OS            00 (0) 'MS-DOS'\n+5391DF Extract Zip Spec      14 (20) '2.0'\n+5391E0 Extract OS            00 (0) 'MS-DOS'\n+5391E1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5391E3 Compression Method    0000 (0) 'Stored'\n+5391E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5391E9 CRC                   E6BF62E0 (3871302368)\n+5391ED Compressed Size       000008F8 (2296)\n+5391F1 Uncompressed Size     000008F8 (2296)\n+5391F5 Filename Length       0074 (116)\n+5391F7 Extra Length          0009 (9)\n+5391F9 Comment Length        0000 (0)\n+5391FB Disk Start            0000 (0)\n+5391FD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5391FF Ext File Attributes   00000000 (0)\n+539203 Local Header Offset   000C0235 (786997)\n+539207 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539207: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53927B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53927D   Length              0005 (5)\n+53927F   Flags               01 (1) 'Modification'\n+539280   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539284 CENTRAL HEADER #326   02014B50 (33639248)\n+539288 Created Zip Spec      14 (20) '2.0'\n+539289 Created OS            00 (0) 'MS-DOS'\n+53928A Extract Zip Spec      14 (20) '2.0'\n+53928B Extract OS            00 (0) 'MS-DOS'\n+53928C General Purpose Flag  0000 (0)\n+53928E Compression Method    0000 (0) 'Stored'\n+539290 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539294 CRC                   00000000 (0)\n+539298 Compressed Size       00000000 (0)\n+53929C Uncompressed Size     00000000 (0)\n+5392A0 Filename Length       0065 (101)\n+5392A2 Extra Length          0009 (9)\n+5392A4 Comment Length        0000 (0)\n+5392A6 Disk Start            0000 (0)\n+5392A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5392AA Ext File Attributes   00000000 (0)\n+5392AE Local Header Offset   000C0BD8 (789464)\n+5392B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5392B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539317 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539319   Length              0005 (5)\n+53931B   Flags               01 (1) 'Modification'\n+53931C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539320 CENTRAL HEADER #327   02014B50 (33639248)\n+539324 Created Zip Spec      14 (20) '2.0'\n+539325 Created OS            00 (0) 'MS-DOS'\n+539326 Extract Zip Spec      14 (20) '2.0'\n+539327 Extract OS            00 (0) 'MS-DOS'\n+539328 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53932A Compression Method    0000 (0) 'Stored'\n+53932C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539330 CRC                   F05E2331 (4032701233)\n+539334 Compressed Size       00000831 (2097)\n+539338 Uncompressed Size     00000831 (2097)\n+53933C Filename Length       007B (123)\n+53933E Extra Length          0009 (9)\n+539340 Comment Length        0000 (0)\n+539342 Disk Start            0000 (0)\n+539344 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539346 Ext File Attributes   00000000 (0)\n+53934A Local Header Offset   000C0C64 (789604)\n+53934E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53934E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5393C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5393CB   Length              0005 (5)\n+5393CD   Flags               01 (1) 'Modification'\n+5393CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5393D2 CENTRAL HEADER #328   02014B50 (33639248)\n+5393D6 Created Zip Spec      14 (20) '2.0'\n+5393D7 Created OS            00 (0) 'MS-DOS'\n+5393D8 Extract Zip Spec      14 (20) '2.0'\n+5393D9 Extract OS            00 (0) 'MS-DOS'\n+5393DA General Purpose Flag  0000 (0)\n+5393DC Compression Method    0000 (0) 'Stored'\n+5393DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5393E2 CRC                   00000000 (0)\n+5393E6 Compressed Size       00000000 (0)\n+5393EA Uncompressed Size     00000000 (0)\n+5393EE Filename Length       0063 (99)\n+5393F0 Extra Length          0009 (9)\n+5393F2 Comment Length        0000 (0)\n+5393F4 Disk Start            0000 (0)\n+5393F6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5393F8 Ext File Attributes   00000000 (0)\n+5393FC Local Header Offset   000C1547 (791879)\n+539400 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539400: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539463 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539465   Length              0005 (5)\n+539467   Flags               01 (1) 'Modification'\n+539468   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53946C CENTRAL HEADER #329   02014B50 (33639248)\n+539470 Created Zip Spec      14 (20) '2.0'\n+539471 Created OS            00 (0) 'MS-DOS'\n+539472 Extract Zip Spec      14 (20) '2.0'\n+539473 Extract OS            00 (0) 'MS-DOS'\n+539474 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+539476 Compression Method    0000 (0) 'Stored'\n+539478 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53947C CRC                   80ED3BA4 (2163030948)\n+539480 Compressed Size       000015D0 (5584)\n+539484 Uncompressed Size     000015D0 (5584)\n+539488 Filename Length       0079 (121)\n+53948A Extra Length          0009 (9)\n+53948C Comment Length        0000 (0)\n+53948E Disk Start            0000 (0)\n+539490 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539492 Ext File Attributes   00000000 (0)\n+539496 Local Header Offset   000C15D1 (792017)\n+53949A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53949A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539513 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539515   Length              0005 (5)\n+539517   Flags               01 (1) 'Modification'\n+539518   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53951C CENTRAL HEADER #330   02014B50 (33639248)\n+539520 Created Zip Spec      14 (20) '2.0'\n+539521 Created OS            00 (0) 'MS-DOS'\n+539522 Extract Zip Spec      14 (20) '2.0'\n+539523 Extract OS            00 (0) 'MS-DOS'\n+539524 General Purpose Flag  0000 (0)\n+539526 Compression Method    0000 (0) 'Stored'\n+539528 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53952C CRC                   00000000 (0)\n+539530 Compressed Size       00000000 (0)\n+539534 Uncompressed Size     00000000 (0)\n+539538 Filename Length       0069 (105)\n+53953A Extra Length          0009 (9)\n+53953C Comment Length        0000 (0)\n+53953E Disk Start            0000 (0)\n+539540 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539542 Ext File Attributes   00000000 (0)\n+539546 Local Header Offset   000C2C51 (797777)\n+53954A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53954A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5395B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5395B5   Length              0005 (5)\n+5395B7   Flags               01 (1) 'Modification'\n+5395B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5395BC CENTRAL HEADER #331   02014B50 (33639248)\n+5395C0 Created Zip Spec      14 (20) '2.0'\n+5395C1 Created OS            00 (0) 'MS-DOS'\n+5395C2 Extract Zip Spec      14 (20) '2.0'\n+5395C3 Extract OS            00 (0) 'MS-DOS'\n+5395C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5395C6 Compression Method    0000 (0) 'Stored'\n+5395C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5395CC CRC                   7018E446 (1880679494)\n+5395D0 Compressed Size       00001FAE (8110)\n+5395D4 Uncompressed Size     00001FAE (8110)\n+5395D8 Filename Length       007F (127)\n+5395DA Extra Length          0009 (9)\n+5395DC Comment Length        0000 (0)\n+5395DE Disk Start            0000 (0)\n+5395E0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5395E2 Ext File Attributes   00000000 (0)\n+5395E6 Local Header Offset   000C2CE1 (797921)\n+5395EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5395EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539669 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53966B   Length              0005 (5)\n+53966D   Flags               01 (1) 'Modification'\n+53966E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539672 CENTRAL HEADER #332   02014B50 (33639248)\n+539676 Created Zip Spec      14 (20) '2.0'\n+539677 Created OS            00 (0) 'MS-DOS'\n+539678 Extract Zip Spec      14 (20) '2.0'\n+539679 Extract OS            00 (0) 'MS-DOS'\n+53967A General Purpose Flag  0000 (0)\n+53967C Compression Method    0000 (0) 'Stored'\n+53967E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539682 CRC                   00000000 (0)\n+539686 Compressed Size       00000000 (0)\n+53968A Uncompressed Size     00000000 (0)\n+53968E Filename Length       0060 (96)\n+539690 Extra Length          0009 (9)\n+539692 Comment Length        0000 (0)\n+539694 Disk Start            0000 (0)\n+539696 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539698 Ext File Attributes   00000000 (0)\n+53969C Local Header Offset   000C4D45 (806213)\n+5396A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5396A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539700 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539702   Length              0005 (5)\n+539704   Flags               01 (1) 'Modification'\n+539705   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539709 CENTRAL HEADER #333   02014B50 (33639248)\n+53970D Created Zip Spec      14 (20) '2.0'\n+53970E Created OS            00 (0) 'MS-DOS'\n+53970F Extract Zip Spec      14 (20) '2.0'\n+539710 Extract OS            00 (0) 'MS-DOS'\n+539711 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+539713 Compression Method    0000 (0) 'Stored'\n+539715 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539719 CRC                   61A0CE5A (1637928538)\n+53971D Compressed Size       000012FA (4858)\n+539721 Uncompressed Size     000012FA (4858)\n+539725 Filename Length       0076 (118)\n+539727 Extra Length          0009 (9)\n+539729 Comment Length        0000 (0)\n+53972B Disk Start            0000 (0)\n+53972D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53972F Ext File Attributes   00000000 (0)\n+539733 Local Header Offset   000C4DCC (806348)\n+539737 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539737: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5397AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5397AF   Length              0005 (5)\n+5397B1   Flags               01 (1) 'Modification'\n+5397B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5397B6 CENTRAL HEADER #334   02014B50 (33639248)\n+5397BA Created Zip Spec      14 (20) '2.0'\n+5397BB Created OS            00 (0) 'MS-DOS'\n+5397BC Extract Zip Spec      14 (20) '2.0'\n+5397BD Extract OS            00 (0) 'MS-DOS'\n+5397BE General Purpose Flag  0000 (0)\n+5397C0 Compression Method    0000 (0) 'Stored'\n+5397C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5397C6 CRC                   00000000 (0)\n+5397CA Compressed Size       00000000 (0)\n+5397CE Uncompressed Size     00000000 (0)\n+5397D2 Filename Length       0063 (99)\n+5397D4 Extra Length          0009 (9)\n+5397D6 Comment Length        0000 (0)\n+5397D8 Disk Start            0000 (0)\n+5397DA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5397DC Ext File Attributes   00000000 (0)\n+5397E0 Local Header Offset   000C6173 (811379)\n+5397E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5397E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539847 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539849   Length              0005 (5)\n+53984B   Flags               01 (1) 'Modification'\n+53984C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539850 CENTRAL HEADER #335   02014B50 (33639248)\n+539854 Created Zip Spec      14 (20) '2.0'\n+539855 Created OS            00 (0) 'MS-DOS'\n+539856 Extract Zip Spec      14 (20) '2.0'\n+539857 Extract OS            00 (0) 'MS-DOS'\n+539858 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53985A Compression Method    0000 (0) 'Stored'\n+53985C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539860 CRC                   5A804AEF (1518357231)\n+539864 Compressed Size       00001311 (4881)\n+539868 Uncompressed Size     00001311 (4881)\n+53986C Filename Length       0079 (121)\n+53986E Extra Length          0009 (9)\n+539870 Comment Length        0000 (0)\n+539872 Disk Start            0000 (0)\n+539874 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539876 Ext File Attributes   00000000 (0)\n+53987A Local Header Offset   000C61FD (811517)\n+53987E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53987E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5398F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5398F9   Length              0005 (5)\n+5398FB   Flags               01 (1) 'Modification'\n+5398FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539900 CENTRAL HEADER #336   02014B50 (33639248)\n+539904 Created Zip Spec      14 (20) '2.0'\n+539905 Created OS            00 (0) 'MS-DOS'\n+539906 Extract Zip Spec      14 (20) '2.0'\n+539907 Extract OS            00 (0) 'MS-DOS'\n+539908 General Purpose Flag  0000 (0)\n+53990A Compression Method    0000 (0) 'Stored'\n+53990C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539910 CRC                   00000000 (0)\n+539914 Compressed Size       00000000 (0)\n+539918 Uncompressed Size     00000000 (0)\n+53991C Filename Length       005F (95)\n+53991E Extra Length          0009 (9)\n+539920 Comment Length        0000 (0)\n+539922 Disk Start            0000 (0)\n+539924 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539926 Ext File Attributes   00000000 (0)\n+53992A Local Header Offset   000C75BE (816574)\n+53992E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53992E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53998D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53998F   Length              0005 (5)\n+539991   Flags               01 (1) 'Modification'\n+539992   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539996 CENTRAL HEADER #337   02014B50 (33639248)\n+53999A Created Zip Spec      14 (20) '2.0'\n+53999B Created OS            00 (0) 'MS-DOS'\n+53999C Extract Zip Spec      14 (20) '2.0'\n+53999D Extract OS            00 (0) 'MS-DOS'\n+53999E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5399A0 Compression Method    0000 (0) 'Stored'\n+5399A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5399A6 CRC                   F4A07CA3 (4104158371)\n+5399AA Compressed Size       000027E4 (10212)\n+5399AE Uncompressed Size     000027E4 (10212)\n+5399B2 Filename Length       0075 (117)\n+5399B4 Extra Length          0009 (9)\n+5399B6 Comment Length        0000 (0)\n+5399B8 Disk Start            0000 (0)\n+5399BA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5399BC Ext File Attributes   00000000 (0)\n+5399C0 Local Header Offset   000C7644 (816708)\n+5399C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5399C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539A39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539A3B   Length              0005 (5)\n+539A3D   Flags               01 (1) 'Modification'\n+539A3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539A42 CENTRAL HEADER #338   02014B50 (33639248)\n+539A46 Created Zip Spec      14 (20) '2.0'\n+539A47 Created OS            00 (0) 'MS-DOS'\n+539A48 Extract Zip Spec      14 (20) '2.0'\n+539A49 Extract OS            00 (0) 'MS-DOS'\n+539A4A General Purpose Flag  0000 (0)\n+539A4C Compression Method    0000 (0) 'Stored'\n+539A4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539A52 CRC                   00000000 (0)\n+539A56 Compressed Size       00000000 (0)\n+539A5A Uncompressed Size     00000000 (0)\n+539A5E Filename Length       0067 (103)\n+539A60 Extra Length          0009 (9)\n+539A62 Comment Length        0000 (0)\n+539A64 Disk Start            0000 (0)\n+539A66 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539A68 Ext File Attributes   00000000 (0)\n+539A6C Local Header Offset   000C9ED4 (827092)\n+539A70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539A70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539AD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539AD9   Length              0005 (5)\n+539ADB   Flags               01 (1) 'Modification'\n+539ADC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539AE0 CENTRAL HEADER #339   02014B50 (33639248)\n+539AE4 Created Zip Spec      14 (20) '2.0'\n+539AE5 Created OS            00 (0) 'MS-DOS'\n+539AE6 Extract Zip Spec      14 (20) '2.0'\n+539AE7 Extract OS            00 (0) 'MS-DOS'\n+539AE8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+539AEA Compression Method    0000 (0) 'Stored'\n+539AEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539AF0 CRC                   6E031E40 (1845698112)\n+539AF4 Compressed Size       00001276 (4726)\n+539AF8 Uncompressed Size     00001276 (4726)\n+539AFC Filename Length       007D (125)\n+539AFE Extra Length          0009 (9)\n+539B00 Comment Length        0000 (0)\n+539B02 Disk Start            0000 (0)\n+539B04 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539B06 Ext File Attributes   00000000 (0)\n+539B0A Local Header Offset   000C9F62 (827234)\n+539B0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539B0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539B8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539B8D   Length              0005 (5)\n+539B8F   Flags               01 (1) 'Modification'\n+539B90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539B94 CENTRAL HEADER #340   02014B50 (33639248)\n+539B98 Created Zip Spec      14 (20) '2.0'\n+539B99 Created OS            00 (0) 'MS-DOS'\n+539B9A Extract Zip Spec      14 (20) '2.0'\n+539B9B Extract OS            00 (0) 'MS-DOS'\n+539B9C General Purpose Flag  0000 (0)\n+539B9E Compression Method    0000 (0) 'Stored'\n+539BA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539BA4 CRC                   00000000 (0)\n+539BA8 Compressed Size       00000000 (0)\n+539BAC Uncompressed Size     00000000 (0)\n+539BB0 Filename Length       0066 (102)\n+539BB2 Extra Length          0009 (9)\n+539BB4 Comment Length        0000 (0)\n+539BB6 Disk Start            0000 (0)\n+539BB8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539BBA Ext File Attributes   00000000 (0)\n+539BBE Local Header Offset   000CB28C (832140)\n+539BC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539BC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539C28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539C2A   Length              0005 (5)\n+539C2C   Flags               01 (1) 'Modification'\n+539C2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539C31 CENTRAL HEADER #341   02014B50 (33639248)\n+539C35 Created Zip Spec      14 (20) '2.0'\n+539C36 Created OS            00 (0) 'MS-DOS'\n+539C37 Extract Zip Spec      14 (20) '2.0'\n+539C38 Extract OS            00 (0) 'MS-DOS'\n+539C39 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+539C3B Compression Method    0000 (0) 'Stored'\n+539C3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539C41 CRC                   5987930A (1502057226)\n+539C45 Compressed Size       00000BDE (3038)\n+539C49 Uncompressed Size     00000BDE (3038)\n+539C4D Filename Length       007C (124)\n+539C4F Extra Length          0009 (9)\n+539C51 Comment Length        0000 (0)\n+539C53 Disk Start            0000 (0)\n+539C55 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539C57 Ext File Attributes   00000000 (0)\n+539C5B Local Header Offset   000CB319 (832281)\n+539C5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539C5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539CDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539CDD   Length              0005 (5)\n+539CDF   Flags               01 (1) 'Modification'\n+539CE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539CE4 CENTRAL HEADER #342   02014B50 (33639248)\n+539CE8 Created Zip Spec      14 (20) '2.0'\n+539CE9 Created OS            00 (0) 'MS-DOS'\n+539CEA Extract Zip Spec      14 (20) '2.0'\n+539CEB Extract OS            00 (0) 'MS-DOS'\n+539CEC General Purpose Flag  0000 (0)\n+539CEE Compression Method    0000 (0) 'Stored'\n+539CF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539CF4 CRC                   00000000 (0)\n+539CF8 Compressed Size       00000000 (0)\n+539CFC Uncompressed Size     00000000 (0)\n+539D00 Filename Length       0067 (103)\n+539D02 Extra Length          0009 (9)\n+539D04 Comment Length        0000 (0)\n+539D06 Disk Start            0000 (0)\n+539D08 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539D0A Ext File Attributes   00000000 (0)\n+539D0E Local Header Offset   000CBFAA (835498)\n+539D12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539D12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539D79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539D7B   Length              0005 (5)\n+539D7D   Flags               01 (1) 'Modification'\n+539D7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539D82 CENTRAL HEADER #343   02014B50 (33639248)\n+539D86 Created Zip Spec      14 (20) '2.0'\n+539D87 Created OS            00 (0) 'MS-DOS'\n+539D88 Extract Zip Spec      14 (20) '2.0'\n+539D89 Extract OS            00 (0) 'MS-DOS'\n+539D8A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+539D8C Compression Method    0000 (0) 'Stored'\n+539D8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539D92 CRC                   CA93F7B9 (3398694841)\n+539D96 Compressed Size       000008CF (2255)\n+539D9A Uncompressed Size     000008CF (2255)\n+539D9E Filename Length       007D (125)\n+539DA0 Extra Length          0009 (9)\n+539DA2 Comment Length        0000 (0)\n+539DA4 Disk Start            0000 (0)\n+539DA6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539DA8 Ext File Attributes   00000000 (0)\n+539DAC Local Header Offset   000CC038 (835640)\n+539DB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539DB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539E2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539E2F   Length              0005 (5)\n+539E31   Flags               01 (1) 'Modification'\n+539E32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539E36 CENTRAL HEADER #344   02014B50 (33639248)\n+539E3A Created Zip Spec      14 (20) '2.0'\n+539E3B Created OS            00 (0) 'MS-DOS'\n+539E3C Extract Zip Spec      14 (20) '2.0'\n+539E3D Extract OS            00 (0) 'MS-DOS'\n+539E3E General Purpose Flag  0000 (0)\n+539E40 Compression Method    0000 (0) 'Stored'\n+539E42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539E46 CRC                   00000000 (0)\n+539E4A Compressed Size       00000000 (0)\n+539E4E Uncompressed Size     00000000 (0)\n+539E52 Filename Length       0065 (101)\n+539E54 Extra Length          0009 (9)\n+539E56 Comment Length        0000 (0)\n+539E58 Disk Start            0000 (0)\n+539E5A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539E5C Ext File Attributes   00000000 (0)\n+539E60 Local Header Offset   000CC9BB (838075)\n+539E64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539E64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539EC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539ECB   Length              0005 (5)\n+539ECD   Flags               01 (1) 'Modification'\n+539ECE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539ED2 CENTRAL HEADER #345   02014B50 (33639248)\n+539ED6 Created Zip Spec      14 (20) '2.0'\n+539ED7 Created OS            00 (0) 'MS-DOS'\n+539ED8 Extract Zip Spec      14 (20) '2.0'\n+539ED9 Extract OS            00 (0) 'MS-DOS'\n+539EDA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+539EDC Compression Method    0000 (0) 'Stored'\n+539EDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539EE2 CRC                   673E5975 (1732139381)\n+539EE6 Compressed Size       00000CA9 (3241)\n+539EEA Uncompressed Size     00000CA9 (3241)\n+539EEE Filename Length       007B (123)\n+539EF0 Extra Length          0009 (9)\n+539EF2 Comment Length        0000 (0)\n+539EF4 Disk Start            0000 (0)\n+539EF6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539EF8 Ext File Attributes   00000000 (0)\n+539EFC Local Header Offset   000CCA47 (838215)\n+539F00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539F00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+539F7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+539F7D   Length              0005 (5)\n+539F7F   Flags               01 (1) 'Modification'\n+539F80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+539F84 CENTRAL HEADER #346   02014B50 (33639248)\n+539F88 Created Zip Spec      14 (20) '2.0'\n+539F89 Created OS            00 (0) 'MS-DOS'\n+539F8A Extract Zip Spec      14 (20) '2.0'\n+539F8B Extract OS            00 (0) 'MS-DOS'\n+539F8C General Purpose Flag  0000 (0)\n+539F8E Compression Method    0000 (0) 'Stored'\n+539F90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+539F94 CRC                   00000000 (0)\n+539F98 Compressed Size       00000000 (0)\n+539F9C Uncompressed Size     00000000 (0)\n+539FA0 Filename Length       0063 (99)\n+539FA2 Extra Length          0009 (9)\n+539FA4 Comment Length        0000 (0)\n+539FA6 Disk Start            0000 (0)\n+539FA8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+539FAA Ext File Attributes   00000000 (0)\n+539FAE Local Header Offset   000CD7A2 (841634)\n+539FB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x539FB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A015 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A017   Length              0005 (5)\n+53A019   Flags               01 (1) 'Modification'\n+53A01A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A01E CENTRAL HEADER #347   02014B50 (33639248)\n+53A022 Created Zip Spec      14 (20) '2.0'\n+53A023 Created OS            00 (0) 'MS-DOS'\n+53A024 Extract Zip Spec      14 (20) '2.0'\n+53A025 Extract OS            00 (0) 'MS-DOS'\n+53A026 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A028 Compression Method    0000 (0) 'Stored'\n+53A02A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A02E CRC                   2D1E752C (756970796)\n+53A032 Compressed Size       00005038 (20536)\n+53A036 Uncompressed Size     00005038 (20536)\n+53A03A Filename Length       0079 (121)\n+53A03C Extra Length          0009 (9)\n+53A03E Comment Length        0000 (0)\n+53A040 Disk Start            0000 (0)\n+53A042 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A044 Ext File Attributes   00000000 (0)\n+53A048 Local Header Offset   000CD82C (841772)\n+53A04C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A04C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A0C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A0C7   Length              0005 (5)\n+53A0C9   Flags               01 (1) 'Modification'\n+53A0CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A0CE CENTRAL HEADER #348   02014B50 (33639248)\n+53A0D2 Created Zip Spec      14 (20) '2.0'\n+53A0D3 Created OS            00 (0) 'MS-DOS'\n+53A0D4 Extract Zip Spec      14 (20) '2.0'\n+53A0D5 Extract OS            00 (0) 'MS-DOS'\n+53A0D6 General Purpose Flag  0000 (0)\n+53A0D8 Compression Method    0000 (0) 'Stored'\n+53A0DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A0DE CRC                   00000000 (0)\n+53A0E2 Compressed Size       00000000 (0)\n+53A0E6 Uncompressed Size     00000000 (0)\n+53A0EA Filename Length       005C (92)\n+53A0EC Extra Length          0009 (9)\n+53A0EE Comment Length        0000 (0)\n+53A0F0 Disk Start            0000 (0)\n+53A0F2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A0F4 Ext File Attributes   00000000 (0)\n+53A0F8 Local Header Offset   000D2914 (862484)\n+53A0FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A0FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A158 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A15A   Length              0005 (5)\n+53A15C   Flags               01 (1) 'Modification'\n+53A15D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A161 CENTRAL HEADER #349   02014B50 (33639248)\n+53A165 Created Zip Spec      14 (20) '2.0'\n+53A166 Created OS            00 (0) 'MS-DOS'\n+53A167 Extract Zip Spec      14 (20) '2.0'\n+53A168 Extract OS            00 (0) 'MS-DOS'\n+53A169 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A16B Compression Method    0000 (0) 'Stored'\n+53A16D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A171 CRC                   DB187B38 (3675814712)\n+53A175 Compressed Size       00001A85 (6789)\n+53A179 Uncompressed Size     00001A85 (6789)\n+53A17D Filename Length       0072 (114)\n+53A17F Extra Length          0009 (9)\n+53A181 Comment Length        0000 (0)\n+53A183 Disk Start            0000 (0)\n+53A185 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A187 Ext File Attributes   00000000 (0)\n+53A18B Local Header Offset   000D2997 (862615)\n+53A18F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A18F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A201 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A203   Length              0005 (5)\n+53A205   Flags               01 (1) 'Modification'\n+53A206   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A20A CENTRAL HEADER #350   02014B50 (33639248)\n+53A20E Created Zip Spec      14 (20) '2.0'\n+53A20F Created OS            00 (0) 'MS-DOS'\n+53A210 Extract Zip Spec      14 (20) '2.0'\n+53A211 Extract OS            00 (0) 'MS-DOS'\n+53A212 General Purpose Flag  0000 (0)\n+53A214 Compression Method    0000 (0) 'Stored'\n+53A216 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A21A CRC                   00000000 (0)\n+53A21E Compressed Size       00000000 (0)\n+53A222 Uncompressed Size     00000000 (0)\n+53A226 Filename Length       005D (93)\n+53A228 Extra Length          0009 (9)\n+53A22A Comment Length        0000 (0)\n+53A22C Disk Start            0000 (0)\n+53A22E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A230 Ext File Attributes   00000000 (0)\n+53A234 Local Header Offset   000D44C5 (869573)\n+53A238 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A238: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A295 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A297   Length              0005 (5)\n+53A299   Flags               01 (1) 'Modification'\n+53A29A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A29E CENTRAL HEADER #351   02014B50 (33639248)\n+53A2A2 Created Zip Spec      14 (20) '2.0'\n+53A2A3 Created OS            00 (0) 'MS-DOS'\n+53A2A4 Extract Zip Spec      14 (20) '2.0'\n+53A2A5 Extract OS            00 (0) 'MS-DOS'\n+53A2A6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A2A8 Compression Method    0000 (0) 'Stored'\n+53A2AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A2AE CRC                   CD183667 (3440916071)\n+53A2B2 Compressed Size       00001A6E (6766)\n+53A2B6 Uncompressed Size     00001A6E (6766)\n+53A2BA Filename Length       0073 (115)\n+53A2BC Extra Length          0009 (9)\n+53A2BE Comment Length        0000 (0)\n+53A2C0 Disk Start            0000 (0)\n+53A2C2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A2C4 Ext File Attributes   00000000 (0)\n+53A2C8 Local Header Offset   000D4549 (869705)\n+53A2CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A2CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A33F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A341   Length              0005 (5)\n+53A343   Flags               01 (1) 'Modification'\n+53A344   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A348 CENTRAL HEADER #352   02014B50 (33639248)\n+53A34C Created Zip Spec      14 (20) '2.0'\n+53A34D Created OS            00 (0) 'MS-DOS'\n+53A34E Extract Zip Spec      14 (20) '2.0'\n+53A34F Extract OS            00 (0) 'MS-DOS'\n+53A350 General Purpose Flag  0000 (0)\n+53A352 Compression Method    0000 (0) 'Stored'\n+53A354 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A358 CRC                   00000000 (0)\n+53A35C Compressed Size       00000000 (0)\n+53A360 Uncompressed Size     00000000 (0)\n+53A364 Filename Length       005D (93)\n+53A366 Extra Length          0009 (9)\n+53A368 Comment Length        0000 (0)\n+53A36A Disk Start            0000 (0)\n+53A36C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A36E Ext File Attributes   00000000 (0)\n+53A372 Local Header Offset   000D6061 (876641)\n+53A376 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A376: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A3D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A3D5   Length              0005 (5)\n+53A3D7   Flags               01 (1) 'Modification'\n+53A3D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A3DC CENTRAL HEADER #353   02014B50 (33639248)\n+53A3E0 Created Zip Spec      14 (20) '2.0'\n+53A3E1 Created OS            00 (0) 'MS-DOS'\n+53A3E2 Extract Zip Spec      14 (20) '2.0'\n+53A3E3 Extract OS            00 (0) 'MS-DOS'\n+53A3E4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A3E6 Compression Method    0000 (0) 'Stored'\n+53A3E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A3EC CRC                   0C7DD276 (209572470)\n+53A3F0 Compressed Size       00001A92 (6802)\n+53A3F4 Uncompressed Size     00001A92 (6802)\n+53A3F8 Filename Length       0073 (115)\n+53A3FA Extra Length          0009 (9)\n+53A3FC Comment Length        0000 (0)\n+53A3FE Disk Start            0000 (0)\n+53A400 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A402 Ext File Attributes   00000000 (0)\n+53A406 Local Header Offset   000D60E5 (876773)\n+53A40A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A40A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A47D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A47F   Length              0005 (5)\n+53A481   Flags               01 (1) 'Modification'\n+53A482   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A486 CENTRAL HEADER #354   02014B50 (33639248)\n+53A48A Created Zip Spec      14 (20) '2.0'\n+53A48B Created OS            00 (0) 'MS-DOS'\n+53A48C Extract Zip Spec      14 (20) '2.0'\n+53A48D Extract OS            00 (0) 'MS-DOS'\n+53A48E General Purpose Flag  0000 (0)\n+53A490 Compression Method    0000 (0) 'Stored'\n+53A492 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A496 CRC                   00000000 (0)\n+53A49A Compressed Size       00000000 (0)\n+53A49E Uncompressed Size     00000000 (0)\n+53A4A2 Filename Length       005E (94)\n+53A4A4 Extra Length          0009 (9)\n+53A4A6 Comment Length        0000 (0)\n+53A4A8 Disk Start            0000 (0)\n+53A4AA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A4AC Ext File Attributes   00000000 (0)\n+53A4B0 Local Header Offset   000D7C21 (883745)\n+53A4B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A4B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A512 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A514   Length              0005 (5)\n+53A516   Flags               01 (1) 'Modification'\n+53A517   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A51B CENTRAL HEADER #355   02014B50 (33639248)\n+53A51F Created Zip Spec      14 (20) '2.0'\n+53A520 Created OS            00 (0) 'MS-DOS'\n+53A521 Extract Zip Spec      14 (20) '2.0'\n+53A522 Extract OS            00 (0) 'MS-DOS'\n+53A523 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A525 Compression Method    0000 (0) 'Stored'\n+53A527 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A52B CRC                   60EA12C2 (1625952962)\n+53A52F Compressed Size       00001733 (5939)\n+53A533 Uncompressed Size     00001733 (5939)\n+53A537 Filename Length       0074 (116)\n+53A539 Extra Length          0009 (9)\n+53A53B Comment Length        0000 (0)\n+53A53D Disk Start            0000 (0)\n+53A53F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A541 Ext File Attributes   00000000 (0)\n+53A545 Local Header Offset   000D7CA6 (883878)\n+53A549 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A549: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A5BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A5BF   Length              0005 (5)\n+53A5C1   Flags               01 (1) 'Modification'\n+53A5C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A5C6 CENTRAL HEADER #356   02014B50 (33639248)\n+53A5CA Created Zip Spec      14 (20) '2.0'\n+53A5CB Created OS            00 (0) 'MS-DOS'\n+53A5CC Extract Zip Spec      14 (20) '2.0'\n+53A5CD Extract OS            00 (0) 'MS-DOS'\n+53A5CE General Purpose Flag  0000 (0)\n+53A5D0 Compression Method    0000 (0) 'Stored'\n+53A5D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A5D6 CRC                   00000000 (0)\n+53A5DA Compressed Size       00000000 (0)\n+53A5DE Uncompressed Size     00000000 (0)\n+53A5E2 Filename Length       0061 (97)\n+53A5E4 Extra Length          0009 (9)\n+53A5E6 Comment Length        0000 (0)\n+53A5E8 Disk Start            0000 (0)\n+53A5EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A5EC Ext File Attributes   00000000 (0)\n+53A5F0 Local Header Offset   000D9484 (889988)\n+53A5F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A5F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A655 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A657   Length              0005 (5)\n+53A659   Flags               01 (1) 'Modification'\n+53A65A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A65E CENTRAL HEADER #357   02014B50 (33639248)\n+53A662 Created Zip Spec      14 (20) '2.0'\n+53A663 Created OS            00 (0) 'MS-DOS'\n+53A664 Extract Zip Spec      14 (20) '2.0'\n+53A665 Extract OS            00 (0) 'MS-DOS'\n+53A666 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A668 Compression Method    0000 (0) 'Stored'\n+53A66A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A66E CRC                   4BB1EABD (1269951165)\n+53A672 Compressed Size       0000167D (5757)\n+53A676 Uncompressed Size     0000167D (5757)\n+53A67A Filename Length       0077 (119)\n+53A67C Extra Length          0009 (9)\n+53A67E Comment Length        0000 (0)\n+53A680 Disk Start            0000 (0)\n+53A682 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A684 Ext File Attributes   00000000 (0)\n+53A688 Local Header Offset   000D950C (890124)\n+53A68C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A68C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A703 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A705   Length              0005 (5)\n+53A707   Flags               01 (1) 'Modification'\n+53A708   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A70C CENTRAL HEADER #358   02014B50 (33639248)\n+53A710 Created Zip Spec      14 (20) '2.0'\n+53A711 Created OS            00 (0) 'MS-DOS'\n+53A712 Extract Zip Spec      14 (20) '2.0'\n+53A713 Extract OS            00 (0) 'MS-DOS'\n+53A714 General Purpose Flag  0000 (0)\n+53A716 Compression Method    0000 (0) 'Stored'\n+53A718 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A71C CRC                   00000000 (0)\n+53A720 Compressed Size       00000000 (0)\n+53A724 Uncompressed Size     00000000 (0)\n+53A728 Filename Length       0061 (97)\n+53A72A Extra Length          0009 (9)\n+53A72C Comment Length        0000 (0)\n+53A72E Disk Start            0000 (0)\n+53A730 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A732 Ext File Attributes   00000000 (0)\n+53A736 Local Header Offset   000DAC37 (896055)\n+53A73A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A73A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A79B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A79D   Length              0005 (5)\n+53A79F   Flags               01 (1) 'Modification'\n+53A7A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A7A4 CENTRAL HEADER #359   02014B50 (33639248)\n+53A7A8 Created Zip Spec      14 (20) '2.0'\n+53A7A9 Created OS            00 (0) 'MS-DOS'\n+53A7AA Extract Zip Spec      14 (20) '2.0'\n+53A7AB Extract OS            00 (0) 'MS-DOS'\n+53A7AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A7AE Compression Method    0000 (0) 'Stored'\n+53A7B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A7B4 CRC                   A18A8EB9 (2710212281)\n+53A7B8 Compressed Size       0000328A (12938)\n+53A7BC Uncompressed Size     0000328A (12938)\n+53A7C0 Filename Length       0077 (119)\n+53A7C2 Extra Length          0009 (9)\n+53A7C4 Comment Length        0000 (0)\n+53A7C6 Disk Start            0000 (0)\n+53A7C8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A7CA Ext File Attributes   00000000 (0)\n+53A7CE Local Header Offset   000DACBF (896191)\n+53A7D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A7D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A849 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A84B   Length              0005 (5)\n+53A84D   Flags               01 (1) 'Modification'\n+53A84E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A852 CENTRAL HEADER #360   02014B50 (33639248)\n+53A856 Created Zip Spec      14 (20) '2.0'\n+53A857 Created OS            00 (0) 'MS-DOS'\n+53A858 Extract Zip Spec      14 (20) '2.0'\n+53A859 Extract OS            00 (0) 'MS-DOS'\n+53A85A General Purpose Flag  0000 (0)\n+53A85C Compression Method    0000 (0) 'Stored'\n+53A85E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A862 CRC                   00000000 (0)\n+53A866 Compressed Size       00000000 (0)\n+53A86A Uncompressed Size     00000000 (0)\n+53A86E Filename Length       0060 (96)\n+53A870 Extra Length          0009 (9)\n+53A872 Comment Length        0000 (0)\n+53A874 Disk Start            0000 (0)\n+53A876 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A878 Ext File Attributes   00000000 (0)\n+53A87C Local Header Offset   000DDFF7 (909303)\n+53A880 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A880: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A8E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A8E2   Length              0005 (5)\n+53A8E4   Flags               01 (1) 'Modification'\n+53A8E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A8E9 CENTRAL HEADER #361   02014B50 (33639248)\n+53A8ED Created Zip Spec      14 (20) '2.0'\n+53A8EE Created OS            00 (0) 'MS-DOS'\n+53A8EF Extract Zip Spec      14 (20) '2.0'\n+53A8F0 Extract OS            00 (0) 'MS-DOS'\n+53A8F1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53A8F3 Compression Method    0000 (0) 'Stored'\n+53A8F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A8F9 CRC                   B7B762D6 (3082248918)\n+53A8FD Compressed Size       00003879 (14457)\n+53A901 Uncompressed Size     00003879 (14457)\n+53A905 Filename Length       0076 (118)\n+53A907 Extra Length          0009 (9)\n+53A909 Comment Length        0000 (0)\n+53A90B Disk Start            0000 (0)\n+53A90D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A90F Ext File Attributes   00000000 (0)\n+53A913 Local Header Offset   000DE07E (909438)\n+53A917 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A917: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53A98D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53A98F   Length              0005 (5)\n+53A991   Flags               01 (1) 'Modification'\n+53A992   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53A996 CENTRAL HEADER #362   02014B50 (33639248)\n+53A99A Created Zip Spec      14 (20) '2.0'\n+53A99B Created OS            00 (0) 'MS-DOS'\n+53A99C Extract Zip Spec      14 (20) '2.0'\n+53A99D Extract OS            00 (0) 'MS-DOS'\n+53A99E General Purpose Flag  0000 (0)\n+53A9A0 Compression Method    0000 (0) 'Stored'\n+53A9A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53A9A6 CRC                   00000000 (0)\n+53A9AA Compressed Size       00000000 (0)\n+53A9AE Uncompressed Size     00000000 (0)\n+53A9B2 Filename Length       0064 (100)\n+53A9B4 Extra Length          0009 (9)\n+53A9B6 Comment Length        0000 (0)\n+53A9B8 Disk Start            0000 (0)\n+53A9BA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53A9BC Ext File Attributes   00000000 (0)\n+53A9C0 Local Header Offset   000E19A4 (924068)\n+53A9C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53A9C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AA28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AA2A   Length              0005 (5)\n+53AA2C   Flags               01 (1) 'Modification'\n+53AA2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AA31 CENTRAL HEADER #363   02014B50 (33639248)\n+53AA35 Created Zip Spec      14 (20) '2.0'\n+53AA36 Created OS            00 (0) 'MS-DOS'\n+53AA37 Extract Zip Spec      14 (20) '2.0'\n+53AA38 Extract OS            00 (0) 'MS-DOS'\n+53AA39 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53AA3B Compression Method    0000 (0) 'Stored'\n+53AA3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AA41 CRC                   A2B9D29A (2730087066)\n+53AA45 Compressed Size       00002150 (8528)\n+53AA49 Uncompressed Size     00002150 (8528)\n+53AA4D Filename Length       007A (122)\n+53AA4F Extra Length          0009 (9)\n+53AA51 Comment Length        0000 (0)\n+53AA53 Disk Start            0000 (0)\n+53AA55 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AA57 Ext File Attributes   00000000 (0)\n+53AA5B Local Header Offset   000E1A2F (924207)\n+53AA5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AA5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AAD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AADB   Length              0005 (5)\n+53AADD   Flags               01 (1) 'Modification'\n+53AADE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AAE2 CENTRAL HEADER #364   02014B50 (33639248)\n+53AAE6 Created Zip Spec      14 (20) '2.0'\n+53AAE7 Created OS            00 (0) 'MS-DOS'\n+53AAE8 Extract Zip Spec      14 (20) '2.0'\n+53AAE9 Extract OS            00 (0) 'MS-DOS'\n+53AAEA General Purpose Flag  0000 (0)\n+53AAEC Compression Method    0000 (0) 'Stored'\n+53AAEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AAF2 CRC                   00000000 (0)\n+53AAF6 Compressed Size       00000000 (0)\n+53AAFA Uncompressed Size     00000000 (0)\n+53AAFE Filename Length       005D (93)\n+53AB00 Extra Length          0009 (9)\n+53AB02 Comment Length        0000 (0)\n+53AB04 Disk Start            0000 (0)\n+53AB06 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AB08 Ext File Attributes   00000000 (0)\n+53AB0C Local Header Offset   000E3C30 (932912)\n+53AB10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AB10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AB6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AB6F   Length              0005 (5)\n+53AB71   Flags               01 (1) 'Modification'\n+53AB72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AB76 CENTRAL HEADER #365   02014B50 (33639248)\n+53AB7A Created Zip Spec      14 (20) '2.0'\n+53AB7B Created OS            00 (0) 'MS-DOS'\n+53AB7C Extract Zip Spec      14 (20) '2.0'\n+53AB7D Extract OS            00 (0) 'MS-DOS'\n+53AB7E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53AB80 Compression Method    0000 (0) 'Stored'\n+53AB82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AB86 CRC                   C4FC7EA2 (3304881826)\n+53AB8A Compressed Size       000011DC (4572)\n+53AB8E Uncompressed Size     000011DC (4572)\n+53AB92 Filename Length       0073 (115)\n+53AB94 Extra Length          0009 (9)\n+53AB96 Comment Length        0000 (0)\n+53AB98 Disk Start            0000 (0)\n+53AB9A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AB9C Ext File Attributes   00000000 (0)\n+53ABA0 Local Header Offset   000E3CB4 (933044)\n+53ABA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53ABA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AC17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AC19   Length              0005 (5)\n+53AC1B   Flags               01 (1) 'Modification'\n+53AC1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AC20 CENTRAL HEADER #366   02014B50 (33639248)\n+53AC24 Created Zip Spec      14 (20) '2.0'\n+53AC25 Created OS            00 (0) 'MS-DOS'\n+53AC26 Extract Zip Spec      14 (20) '2.0'\n+53AC27 Extract OS            00 (0) 'MS-DOS'\n+53AC28 General Purpose Flag  0000 (0)\n+53AC2A Compression Method    0000 (0) 'Stored'\n+53AC2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AC30 CRC                   00000000 (0)\n+53AC34 Compressed Size       00000000 (0)\n+53AC38 Uncompressed Size     00000000 (0)\n+53AC3C Filename Length       0060 (96)\n+53AC3E Extra Length          0009 (9)\n+53AC40 Comment Length        0000 (0)\n+53AC42 Disk Start            0000 (0)\n+53AC44 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AC46 Ext File Attributes   00000000 (0)\n+53AC4A Local Header Offset   000E4F3A (937786)\n+53AC4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AC4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53ACAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53ACB0   Length              0005 (5)\n+53ACB2   Flags               01 (1) 'Modification'\n+53ACB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53ACB7 CENTRAL HEADER #367   02014B50 (33639248)\n+53ACBB Created Zip Spec      14 (20) '2.0'\n+53ACBC Created OS            00 (0) 'MS-DOS'\n+53ACBD Extract Zip Spec      14 (20) '2.0'\n+53ACBE Extract OS            00 (0) 'MS-DOS'\n+53ACBF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53ACC1 Compression Method    0000 (0) 'Stored'\n+53ACC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53ACC7 CRC                   EE30A8D8 (3996166360)\n+53ACCB Compressed Size       000072FB (29435)\n+53ACCF Uncompressed Size     000072FB (29435)\n+53ACD3 Filename Length       0076 (118)\n+53ACD5 Extra Length          0009 (9)\n+53ACD7 Comment Length        0000 (0)\n+53ACD9 Disk Start            0000 (0)\n+53ACDB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53ACDD Ext File Attributes   00000000 (0)\n+53ACE1 Local Header Offset   000E4FC1 (937921)\n+53ACE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53ACE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AD5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AD5D   Length              0005 (5)\n+53AD5F   Flags               01 (1) 'Modification'\n+53AD60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AD64 CENTRAL HEADER #368   02014B50 (33639248)\n+53AD68 Created Zip Spec      14 (20) '2.0'\n+53AD69 Created OS            00 (0) 'MS-DOS'\n+53AD6A Extract Zip Spec      14 (20) '2.0'\n+53AD6B Extract OS            00 (0) 'MS-DOS'\n+53AD6C General Purpose Flag  0000 (0)\n+53AD6E Compression Method    0000 (0) 'Stored'\n+53AD70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AD74 CRC                   00000000 (0)\n+53AD78 Compressed Size       00000000 (0)\n+53AD7C Uncompressed Size     00000000 (0)\n+53AD80 Filename Length       0066 (102)\n+53AD82 Extra Length          0009 (9)\n+53AD84 Comment Length        0000 (0)\n+53AD86 Disk Start            0000 (0)\n+53AD88 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AD8A Ext File Attributes   00000000 (0)\n+53AD8E Local Header Offset   000EC369 (967529)\n+53AD92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AD92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53ADF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53ADFA   Length              0005 (5)\n+53ADFC   Flags               01 (1) 'Modification'\n+53ADFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AE01 CENTRAL HEADER #369   02014B50 (33639248)\n+53AE05 Created Zip Spec      14 (20) '2.0'\n+53AE06 Created OS            00 (0) 'MS-DOS'\n+53AE07 Extract Zip Spec      14 (20) '2.0'\n+53AE08 Extract OS            00 (0) 'MS-DOS'\n+53AE09 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53AE0B Compression Method    0000 (0) 'Stored'\n+53AE0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AE11 CRC                   EA36353C (3929421116)\n+53AE15 Compressed Size       0000480E (18446)\n+53AE19 Uncompressed Size     0000480E (18446)\n+53AE1D Filename Length       007C (124)\n+53AE1F Extra Length          0009 (9)\n+53AE21 Comment Length        0000 (0)\n+53AE23 Disk Start            0000 (0)\n+53AE25 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AE27 Ext File Attributes   00000000 (0)\n+53AE2B Local Header Offset   000EC3F6 (967670)\n+53AE2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AE2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AEAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AEAD   Length              0005 (5)\n+53AEAF   Flags               01 (1) 'Modification'\n+53AEB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AEB4 CENTRAL HEADER #370   02014B50 (33639248)\n+53AEB8 Created Zip Spec      14 (20) '2.0'\n+53AEB9 Created OS            00 (0) 'MS-DOS'\n+53AEBA Extract Zip Spec      14 (20) '2.0'\n+53AEBB Extract OS            00 (0) 'MS-DOS'\n+53AEBC General Purpose Flag  0000 (0)\n+53AEBE Compression Method    0000 (0) 'Stored'\n+53AEC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AEC4 CRC                   00000000 (0)\n+53AEC8 Compressed Size       00000000 (0)\n+53AECC Uncompressed Size     00000000 (0)\n+53AED0 Filename Length       0065 (101)\n+53AED2 Extra Length          0009 (9)\n+53AED4 Comment Length        0000 (0)\n+53AED6 Disk Start            0000 (0)\n+53AED8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AEDA Ext File Attributes   00000000 (0)\n+53AEDE Local Header Offset   000F0CB7 (986295)\n+53AEE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AEE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AF47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AF49   Length              0005 (5)\n+53AF4B   Flags               01 (1) 'Modification'\n+53AF4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53AF50 CENTRAL HEADER #371   02014B50 (33639248)\n+53AF54 Created Zip Spec      14 (20) '2.0'\n+53AF55 Created OS            00 (0) 'MS-DOS'\n+53AF56 Extract Zip Spec      14 (20) '2.0'\n+53AF57 Extract OS            00 (0) 'MS-DOS'\n+53AF58 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53AF5A Compression Method    0000 (0) 'Stored'\n+53AF5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53AF60 CRC                   CA474DE0 (3393670624)\n+53AF64 Compressed Size       000007B6 (1974)\n+53AF68 Uncompressed Size     000007B6 (1974)\n+53AF6C Filename Length       007B (123)\n+53AF6E Extra Length          0009 (9)\n+53AF70 Comment Length        0000 (0)\n+53AF72 Disk Start            0000 (0)\n+53AF74 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53AF76 Ext File Attributes   00000000 (0)\n+53AF7A Local Header Offset   000F0D43 (986435)\n+53AF7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53AF7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53AFF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53AFFB   Length              0005 (5)\n+53AFFD   Flags               01 (1) 'Modification'\n+53AFFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B002 CENTRAL HEADER #372   02014B50 (33639248)\n+53B006 Created Zip Spec      14 (20) '2.0'\n+53B007 Created OS            00 (0) 'MS-DOS'\n+53B008 Extract Zip Spec      14 (20) '2.0'\n+53B009 Extract OS            00 (0) 'MS-DOS'\n+53B00A General Purpose Flag  0000 (0)\n+53B00C Compression Method    0000 (0) 'Stored'\n+53B00E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B012 CRC                   00000000 (0)\n+53B016 Compressed Size       00000000 (0)\n+53B01A Uncompressed Size     00000000 (0)\n+53B01E Filename Length       0061 (97)\n+53B020 Extra Length          0009 (9)\n+53B022 Comment Length        0000 (0)\n+53B024 Disk Start            0000 (0)\n+53B026 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B028 Ext File Attributes   00000000 (0)\n+53B02C Local Header Offset   000F15AB (988587)\n+53B030 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B030: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B091 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B093   Length              0005 (5)\n+53B095   Flags               01 (1) 'Modification'\n+53B096   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B09A CENTRAL HEADER #373   02014B50 (33639248)\n+53B09E Created Zip Spec      14 (20) '2.0'\n+53B09F Created OS            00 (0) 'MS-DOS'\n+53B0A0 Extract Zip Spec      14 (20) '2.0'\n+53B0A1 Extract OS            00 (0) 'MS-DOS'\n+53B0A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B0A4 Compression Method    0000 (0) 'Stored'\n+53B0A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B0AA CRC                   A19F99D4 (2711591380)\n+53B0AE Compressed Size       000011CB (4555)\n+53B0B2 Uncompressed Size     000011CB (4555)\n+53B0B6 Filename Length       0077 (119)\n+53B0B8 Extra Length          0009 (9)\n+53B0BA Comment Length        0000 (0)\n+53B0BC Disk Start            0000 (0)\n+53B0BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B0C0 Ext File Attributes   00000000 (0)\n+53B0C4 Local Header Offset   000F1633 (988723)\n+53B0C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B0C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B13F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B141   Length              0005 (5)\n+53B143   Flags               01 (1) 'Modification'\n+53B144   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B148 CENTRAL HEADER #374   02014B50 (33639248)\n+53B14C Created Zip Spec      14 (20) '2.0'\n+53B14D Created OS            00 (0) 'MS-DOS'\n+53B14E Extract Zip Spec      14 (20) '2.0'\n+53B14F Extract OS            00 (0) 'MS-DOS'\n+53B150 General Purpose Flag  0000 (0)\n+53B152 Compression Method    0000 (0) 'Stored'\n+53B154 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B158 CRC                   00000000 (0)\n+53B15C Compressed Size       00000000 (0)\n+53B160 Uncompressed Size     00000000 (0)\n+53B164 Filename Length       005D (93)\n+53B166 Extra Length          0009 (9)\n+53B168 Comment Length        0000 (0)\n+53B16A Disk Start            0000 (0)\n+53B16C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B16E Ext File Attributes   00000000 (0)\n+53B172 Local Header Offset   000F28AC (993452)\n+53B176 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B176: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B1D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B1D5   Length              0005 (5)\n+53B1D7   Flags               01 (1) 'Modification'\n+53B1D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B1DC CENTRAL HEADER #375   02014B50 (33639248)\n+53B1E0 Created Zip Spec      14 (20) '2.0'\n+53B1E1 Created OS            00 (0) 'MS-DOS'\n+53B1E2 Extract Zip Spec      14 (20) '2.0'\n+53B1E3 Extract OS            00 (0) 'MS-DOS'\n+53B1E4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B1E6 Compression Method    0000 (0) 'Stored'\n+53B1E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B1EC CRC                   7573E84B (1970530379)\n+53B1F0 Compressed Size       0000284F (10319)\n+53B1F4 Uncompressed Size     0000284F (10319)\n+53B1F8 Filename Length       0073 (115)\n+53B1FA Extra Length          0009 (9)\n+53B1FC Comment Length        0000 (0)\n+53B1FE Disk Start            0000 (0)\n+53B200 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B202 Ext File Attributes   00000000 (0)\n+53B206 Local Header Offset   000F2930 (993584)\n+53B20A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B20A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B27D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B27F   Length              0005 (5)\n+53B281   Flags               01 (1) 'Modification'\n+53B282   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B286 CENTRAL HEADER #376   02014B50 (33639248)\n+53B28A Created Zip Spec      14 (20) '2.0'\n+53B28B Created OS            00 (0) 'MS-DOS'\n+53B28C Extract Zip Spec      14 (20) '2.0'\n+53B28D Extract OS            00 (0) 'MS-DOS'\n+53B28E General Purpose Flag  0000 (0)\n+53B290 Compression Method    0000 (0) 'Stored'\n+53B292 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B296 CRC                   00000000 (0)\n+53B29A Compressed Size       00000000 (0)\n+53B29E Uncompressed Size     00000000 (0)\n+53B2A2 Filename Length       0061 (97)\n+53B2A4 Extra Length          0009 (9)\n+53B2A6 Comment Length        0000 (0)\n+53B2A8 Disk Start            0000 (0)\n+53B2AA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B2AC Ext File Attributes   00000000 (0)\n+53B2B0 Local Header Offset   000F5229 (1004073)\n+53B2B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B2B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B315 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B317   Length              0005 (5)\n+53B319   Flags               01 (1) 'Modification'\n+53B31A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B31E CENTRAL HEADER #377   02014B50 (33639248)\n+53B322 Created Zip Spec      14 (20) '2.0'\n+53B323 Created OS            00 (0) 'MS-DOS'\n+53B324 Extract Zip Spec      14 (20) '2.0'\n+53B325 Extract OS            00 (0) 'MS-DOS'\n+53B326 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B328 Compression Method    0000 (0) 'Stored'\n+53B32A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B32E CRC                   131CB9D8 (320649688)\n+53B332 Compressed Size       00002777 (10103)\n+53B336 Uncompressed Size     00002777 (10103)\n+53B33A Filename Length       0077 (119)\n+53B33C Extra Length          0009 (9)\n+53B33E Comment Length        0000 (0)\n+53B340 Disk Start            0000 (0)\n+53B342 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B344 Ext File Attributes   00000000 (0)\n+53B348 Local Header Offset   000F52B1 (1004209)\n+53B34C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B34C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B3C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B3C5   Length              0005 (5)\n+53B3C7   Flags               01 (1) 'Modification'\n+53B3C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B3CC CENTRAL HEADER #378   02014B50 (33639248)\n+53B3D0 Created Zip Spec      14 (20) '2.0'\n+53B3D1 Created OS            00 (0) 'MS-DOS'\n+53B3D2 Extract Zip Spec      14 (20) '2.0'\n+53B3D3 Extract OS            00 (0) 'MS-DOS'\n+53B3D4 General Purpose Flag  0000 (0)\n+53B3D6 Compression Method    0000 (0) 'Stored'\n+53B3D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B3DC CRC                   00000000 (0)\n+53B3E0 Compressed Size       00000000 (0)\n+53B3E4 Uncompressed Size     00000000 (0)\n+53B3E8 Filename Length       0060 (96)\n+53B3EA Extra Length          0009 (9)\n+53B3EC Comment Length        0000 (0)\n+53B3EE Disk Start            0000 (0)\n+53B3F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B3F2 Ext File Attributes   00000000 (0)\n+53B3F6 Local Header Offset   000F7AD6 (1014486)\n+53B3FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B3FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B45A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B45C   Length              0005 (5)\n+53B45E   Flags               01 (1) 'Modification'\n+53B45F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B463 CENTRAL HEADER #379   02014B50 (33639248)\n+53B467 Created Zip Spec      14 (20) '2.0'\n+53B468 Created OS            00 (0) 'MS-DOS'\n+53B469 Extract Zip Spec      14 (20) '2.0'\n+53B46A Extract OS            00 (0) 'MS-DOS'\n+53B46B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B46D Compression Method    0000 (0) 'Stored'\n+53B46F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B473 CRC                   95FAB1DA (2516234714)\n+53B477 Compressed Size       0000110D (4365)\n+53B47B Uncompressed Size     0000110D (4365)\n+53B47F Filename Length       0076 (118)\n+53B481 Extra Length          0009 (9)\n+53B483 Comment Length        0000 (0)\n+53B485 Disk Start            0000 (0)\n+53B487 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B489 Ext File Attributes   00000000 (0)\n+53B48D Local Header Offset   000F7B5D (1014621)\n+53B491 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B491: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B507 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B509   Length              0005 (5)\n+53B50B   Flags               01 (1) 'Modification'\n+53B50C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B510 CENTRAL HEADER #380   02014B50 (33639248)\n+53B514 Created Zip Spec      14 (20) '2.0'\n+53B515 Created OS            00 (0) 'MS-DOS'\n+53B516 Extract Zip Spec      14 (20) '2.0'\n+53B517 Extract OS            00 (0) 'MS-DOS'\n+53B518 General Purpose Flag  0000 (0)\n+53B51A Compression Method    0000 (0) 'Stored'\n+53B51C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B520 CRC                   00000000 (0)\n+53B524 Compressed Size       00000000 (0)\n+53B528 Uncompressed Size     00000000 (0)\n+53B52C Filename Length       0063 (99)\n+53B52E Extra Length          0009 (9)\n+53B530 Comment Length        0000 (0)\n+53B532 Disk Start            0000 (0)\n+53B534 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B536 Ext File Attributes   00000000 (0)\n+53B53A Local Header Offset   000F8D17 (1019159)\n+53B53E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B53E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B5A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B5A3   Length              0005 (5)\n+53B5A5   Flags               01 (1) 'Modification'\n+53B5A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B5AA CENTRAL HEADER #381   02014B50 (33639248)\n+53B5AE Created Zip Spec      14 (20) '2.0'\n+53B5AF Created OS            00 (0) 'MS-DOS'\n+53B5B0 Extract Zip Spec      14 (20) '2.0'\n+53B5B1 Extract OS            00 (0) 'MS-DOS'\n+53B5B2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B5B4 Compression Method    0000 (0) 'Stored'\n+53B5B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B5BA CRC                   B1E82858 (2984781912)\n+53B5BE Compressed Size       000019D6 (6614)\n+53B5C2 Uncompressed Size     000019D6 (6614)\n+53B5C6 Filename Length       0079 (121)\n+53B5C8 Extra Length          0009 (9)\n+53B5CA Comment Length        0000 (0)\n+53B5CC Disk Start            0000 (0)\n+53B5CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B5D0 Ext File Attributes   00000000 (0)\n+53B5D4 Local Header Offset   000F8DA1 (1019297)\n+53B5D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B5D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B651 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B653   Length              0005 (5)\n+53B655   Flags               01 (1) 'Modification'\n+53B656   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B65A CENTRAL HEADER #382   02014B50 (33639248)\n+53B65E Created Zip Spec      14 (20) '2.0'\n+53B65F Created OS            00 (0) 'MS-DOS'\n+53B660 Extract Zip Spec      14 (20) '2.0'\n+53B661 Extract OS            00 (0) 'MS-DOS'\n+53B662 General Purpose Flag  0000 (0)\n+53B664 Compression Method    0000 (0) 'Stored'\n+53B666 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B66A CRC                   00000000 (0)\n+53B66E Compressed Size       00000000 (0)\n+53B672 Uncompressed Size     00000000 (0)\n+53B676 Filename Length       0060 (96)\n+53B678 Extra Length          0009 (9)\n+53B67A Comment Length        0000 (0)\n+53B67C Disk Start            0000 (0)\n+53B67E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B680 Ext File Attributes   00000000 (0)\n+53B684 Local Header Offset   000FA827 (1026087)\n+53B688 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B688: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B6E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B6EA   Length              0005 (5)\n+53B6EC   Flags               01 (1) 'Modification'\n+53B6ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B6F1 CENTRAL HEADER #383   02014B50 (33639248)\n+53B6F5 Created Zip Spec      14 (20) '2.0'\n+53B6F6 Created OS            00 (0) 'MS-DOS'\n+53B6F7 Extract Zip Spec      14 (20) '2.0'\n+53B6F8 Extract OS            00 (0) 'MS-DOS'\n+53B6F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B6FB Compression Method    0000 (0) 'Stored'\n+53B6FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B701 CRC                   EA13965E (3927152222)\n+53B705 Compressed Size       00000F7E (3966)\n+53B709 Uncompressed Size     00000F7E (3966)\n+53B70D Filename Length       0076 (118)\n+53B70F Extra Length          0009 (9)\n+53B711 Comment Length        0000 (0)\n+53B713 Disk Start            0000 (0)\n+53B715 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B717 Ext File Attributes   00000000 (0)\n+53B71B Local Header Offset   000FA8AE (1026222)\n+53B71F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B71F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B795 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B797   Length              0005 (5)\n+53B799   Flags               01 (1) 'Modification'\n+53B79A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B79E CENTRAL HEADER #384   02014B50 (33639248)\n+53B7A2 Created Zip Spec      14 (20) '2.0'\n+53B7A3 Created OS            00 (0) 'MS-DOS'\n+53B7A4 Extract Zip Spec      14 (20) '2.0'\n+53B7A5 Extract OS            00 (0) 'MS-DOS'\n+53B7A6 General Purpose Flag  0000 (0)\n+53B7A8 Compression Method    0000 (0) 'Stored'\n+53B7AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B7AE CRC                   00000000 (0)\n+53B7B2 Compressed Size       00000000 (0)\n+53B7B6 Uncompressed Size     00000000 (0)\n+53B7BA Filename Length       0059 (89)\n+53B7BC Extra Length          0009 (9)\n+53B7BE Comment Length        0000 (0)\n+53B7C0 Disk Start            0000 (0)\n+53B7C2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B7C4 Ext File Attributes   00000000 (0)\n+53B7C8 Local Header Offset   000FB8D9 (1030361)\n+53B7CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B7CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B825 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B827   Length              0005 (5)\n+53B829   Flags               01 (1) 'Modification'\n+53B82A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B82E CENTRAL HEADER #385   02014B50 (33639248)\n+53B832 Created Zip Spec      14 (20) '2.0'\n+53B833 Created OS            00 (0) 'MS-DOS'\n+53B834 Extract Zip Spec      14 (20) '2.0'\n+53B835 Extract OS            00 (0) 'MS-DOS'\n+53B836 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B838 Compression Method    0000 (0) 'Stored'\n+53B83A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B83E CRC                   C8903588 (3364894088)\n+53B842 Compressed Size       00002CD6 (11478)\n+53B846 Uncompressed Size     00002CD6 (11478)\n+53B84A Filename Length       006F (111)\n+53B84C Extra Length          0009 (9)\n+53B84E Comment Length        0000 (0)\n+53B850 Disk Start            0000 (0)\n+53B852 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B854 Ext File Attributes   00000000 (0)\n+53B858 Local Header Offset   000FB959 (1030489)\n+53B85C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B85C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B8CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B8CD   Length              0005 (5)\n+53B8CF   Flags               01 (1) 'Modification'\n+53B8D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B8D4 CENTRAL HEADER #386   02014B50 (33639248)\n+53B8D8 Created Zip Spec      14 (20) '2.0'\n+53B8D9 Created OS            00 (0) 'MS-DOS'\n+53B8DA Extract Zip Spec      14 (20) '2.0'\n+53B8DB Extract OS            00 (0) 'MS-DOS'\n+53B8DC General Purpose Flag  0000 (0)\n+53B8DE Compression Method    0000 (0) 'Stored'\n+53B8E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B8E4 CRC                   00000000 (0)\n+53B8E8 Compressed Size       00000000 (0)\n+53B8EC Uncompressed Size     00000000 (0)\n+53B8F0 Filename Length       006A (106)\n+53B8F2 Extra Length          0009 (9)\n+53B8F4 Comment Length        0000 (0)\n+53B8F6 Disk Start            0000 (0)\n+53B8F8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B8FA Ext File Attributes   00000000 (0)\n+53B8FE Local Header Offset   000FE6D5 (1042133)\n+53B902 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B902: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53B96C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53B96E   Length              0005 (5)\n+53B970   Flags               01 (1) 'Modification'\n+53B971   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53B975 CENTRAL HEADER #387   02014B50 (33639248)\n+53B979 Created Zip Spec      14 (20) '2.0'\n+53B97A Created OS            00 (0) 'MS-DOS'\n+53B97B Extract Zip Spec      14 (20) '2.0'\n+53B97C Extract OS            00 (0) 'MS-DOS'\n+53B97D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53B97F Compression Method    0000 (0) 'Stored'\n+53B981 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53B985 CRC                   D19560D0 (3516227792)\n+53B989 Compressed Size       00000A2F (2607)\n+53B98D Uncompressed Size     00000A2F (2607)\n+53B991 Filename Length       0080 (128)\n+53B993 Extra Length          0009 (9)\n+53B995 Comment Length        0000 (0)\n+53B997 Disk Start            0000 (0)\n+53B999 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53B99B Ext File Attributes   00000000 (0)\n+53B99F Local Header Offset   000FE766 (1042278)\n+53B9A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53B9A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BA23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BA25   Length              0005 (5)\n+53BA27   Flags               01 (1) 'Modification'\n+53BA28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BA2C CENTRAL HEADER #388   02014B50 (33639248)\n+53BA30 Created Zip Spec      14 (20) '2.0'\n+53BA31 Created OS            00 (0) 'MS-DOS'\n+53BA32 Extract Zip Spec      14 (20) '2.0'\n+53BA33 Extract OS            00 (0) 'MS-DOS'\n+53BA34 General Purpose Flag  0000 (0)\n+53BA36 Compression Method    0000 (0) 'Stored'\n+53BA38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BA3C CRC                   00000000 (0)\n+53BA40 Compressed Size       00000000 (0)\n+53BA44 Uncompressed Size     00000000 (0)\n+53BA48 Filename Length       002F (47)\n+53BA4A Extra Length          0009 (9)\n+53BA4C Comment Length        0000 (0)\n+53BA4E Disk Start            0000 (0)\n+53BA50 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BA52 Ext File Attributes   00000000 (0)\n+53BA56 Local Header Offset   000FF24C (1045068)\n+53BA5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BA5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BA89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BA8B   Length              0005 (5)\n+53BA8D   Flags               01 (1) 'Modification'\n+53BA8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BA92 CENTRAL HEADER #389   02014B50 (33639248)\n+53BA96 Created Zip Spec      14 (20) '2.0'\n+53BA97 Created OS            00 (0) 'MS-DOS'\n+53BA98 Extract Zip Spec      14 (20) '2.0'\n+53BA99 Extract OS            00 (0) 'MS-DOS'\n+53BA9A General Purpose Flag  0000 (0)\n+53BA9C Compression Method    0000 (0) 'Stored'\n+53BA9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BAA2 CRC                   00000000 (0)\n+53BAA6 Compressed Size       00000000 (0)\n+53BAAA Uncompressed Size     00000000 (0)\n+53BAAE Filename Length       0038 (56)\n+53BAB0 Extra Length          0009 (9)\n+53BAB2 Comment Length        0000 (0)\n+53BAB4 Disk Start            0000 (0)\n+53BAB6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BAB8 Ext File Attributes   00000000 (0)\n+53BABC Local Header Offset   000FF2A2 (1045154)\n+53BAC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BAC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BAF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BAFA   Length              0005 (5)\n+53BAFC   Flags               01 (1) 'Modification'\n+53BAFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BB01 CENTRAL HEADER #390   02014B50 (33639248)\n+53BB05 Created Zip Spec      14 (20) '2.0'\n+53BB06 Created OS            00 (0) 'MS-DOS'\n+53BB07 Extract Zip Spec      14 (20) '2.0'\n+53BB08 Extract OS            00 (0) 'MS-DOS'\n+53BB09 General Purpose Flag  0000 (0)\n+53BB0B Compression Method    0000 (0) 'Stored'\n+53BB0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BB11 CRC                   00000000 (0)\n+53BB15 Compressed Size       00000000 (0)\n+53BB19 Uncompressed Size     00000000 (0)\n+53BB1D Filename Length       006E (110)\n+53BB1F Extra Length          0009 (9)\n+53BB21 Comment Length        0000 (0)\n+53BB23 Disk Start            0000 (0)\n+53BB25 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BB27 Ext File Attributes   00000000 (0)\n+53BB2B Local Header Offset   000FF301 (1045249)\n+53BB2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BB2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BB9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BB9F   Length              0005 (5)\n+53BBA1   Flags               01 (1) 'Modification'\n+53BBA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BBA6 CENTRAL HEADER #391   02014B50 (33639248)\n+53BBAA Created Zip Spec      14 (20) '2.0'\n+53BBAB Created OS            00 (0) 'MS-DOS'\n+53BBAC Extract Zip Spec      14 (20) '2.0'\n+53BBAD Extract OS            00 (0) 'MS-DOS'\n+53BBAE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53BBB0 Compression Method    0000 (0) 'Stored'\n+53BBB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BBB6 CRC                   CB05D09B (3406155931)\n+53BBBA Compressed Size       00005230 (21040)\n+53BBBE Uncompressed Size     00005230 (21040)\n+53BBC2 Filename Length       0084 (132)\n+53BBC4 Extra Length          0009 (9)\n+53BBC6 Comment Length        0000 (0)\n+53BBC8 Disk Start            0000 (0)\n+53BBCA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BBCC Ext File Attributes   00000000 (0)\n+53BBD0 Local Header Offset   000FF396 (1045398)\n+53BBD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x53BC55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53BBD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53BCD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BCDB   Length              0005 (5)\n-53BCDD   Flags               01 (1) 'Modification'\n-53BCDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BCE2 CENTRAL HEADER #392   02014B50 (33639248)\n-53BCE6 Created Zip Spec      14 (20) '2.0'\n-53BCE7 Created OS            00 (0) 'MS-DOS'\n-53BCE8 Extract Zip Spec      14 (20) '2.0'\n-53BCE9 Extract OS            00 (0) 'MS-DOS'\n-53BCEA General Purpose Flag  0000 (0)\n-53BCEC Compression Method    0000 (0) 'Stored'\n-53BCEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BCF2 CRC                   00000000 (0)\n-53BCF6 Compressed Size       00000000 (0)\n-53BCFA Uncompressed Size     00000000 (0)\n-53BCFE Filename Length       0033 (51)\n-53BD00 Extra Length          0009 (9)\n-53BD02 Comment Length        0000 (0)\n-53BD04 Disk Start            0000 (0)\n-53BD06 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BD08 Ext File Attributes   00000000 (0)\n-53BD0C Local Header Offset   001046EA (1066730)\n-53BD10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BD10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BD43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BD45   Length              0005 (5)\n-53BD47   Flags               01 (1) 'Modification'\n-53BD48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BD4C CENTRAL HEADER #393   02014B50 (33639248)\n-53BD50 Created Zip Spec      14 (20) '2.0'\n-53BD51 Created OS            00 (0) 'MS-DOS'\n-53BD52 Extract Zip Spec      14 (20) '2.0'\n-53BD53 Extract OS            00 (0) 'MS-DOS'\n-53BD54 General Purpose Flag  0000 (0)\n-53BD56 Compression Method    0000 (0) 'Stored'\n-53BD58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BD5C CRC                   00000000 (0)\n-53BD60 Compressed Size       00000000 (0)\n-53BD64 Uncompressed Size     00000000 (0)\n-53BD68 Filename Length       003C (60)\n-53BD6A Extra Length          0009 (9)\n-53BD6C Comment Length        0000 (0)\n-53BD6E Disk Start            0000 (0)\n-53BD70 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BD72 Ext File Attributes   00000000 (0)\n-53BD76 Local Header Offset   00104744 (1066820)\n-53BD7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BD7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BDB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BDB8   Length              0005 (5)\n-53BDBA   Flags               01 (1) 'Modification'\n-53BDBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BDBF CENTRAL HEADER #394   02014B50 (33639248)\n-53BDC3 Created Zip Spec      14 (20) '2.0'\n-53BDC4 Created OS            00 (0) 'MS-DOS'\n-53BDC5 Extract Zip Spec      14 (20) '2.0'\n-53BDC6 Extract OS            00 (0) 'MS-DOS'\n-53BDC7 General Purpose Flag  0000 (0)\n-53BDC9 Compression Method    0000 (0) 'Stored'\n-53BDCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BDCF CRC                   00000000 (0)\n-53BDD3 Compressed Size       00000000 (0)\n-53BDD7 Uncompressed Size     00000000 (0)\n-53BDDB Filename Length       0072 (114)\n-53BDDD Extra Length          0009 (9)\n-53BDDF Comment Length        0000 (0)\n-53BDE1 Disk Start            0000 (0)\n-53BDE3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BDE5 Ext File Attributes   00000000 (0)\n-53BDE9 Local Header Offset   001047A7 (1066919)\n-53BDED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BDED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BE5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BE61   Length              0005 (5)\n-53BE63   Flags               01 (1) 'Modification'\n-53BE64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BE68 CENTRAL HEADER #395   02014B50 (33639248)\n-53BE6C Created Zip Spec      14 (20) '2.0'\n-53BE6D Created OS            00 (0) 'MS-DOS'\n-53BE6E Extract Zip Spec      14 (20) '2.0'\n-53BE6F Extract OS            00 (0) 'MS-DOS'\n-53BE70 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53BE72 Compression Method    0000 (0) 'Stored'\n-53BE74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BE78 CRC                   17E2323C (400699964)\n-53BE7C Compressed Size       00000904 (2308)\n-53BE80 Uncompressed Size     00000904 (2308)\n-53BE84 Filename Length       0088 (136)\n-53BE86 Extra Length          0009 (9)\n-53BE88 Comment Length        0000 (0)\n-53BE8A Disk Start            0000 (0)\n-53BE8C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BE8E Ext File Attributes   00000000 (0)\n-53BE92 Local Header Offset   00104840 (1067072)\n-53BE96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+53BC58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BC5A   Length              0005 (5)\n+53BC5C   Flags               01 (1) 'Modification'\n+53BC5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BC61 CENTRAL HEADER #392   02014B50 (33639248)\n+53BC65 Created Zip Spec      14 (20) '2.0'\n+53BC66 Created OS            00 (0) 'MS-DOS'\n+53BC67 Extract Zip Spec      14 (20) '2.0'\n+53BC68 Extract OS            00 (0) 'MS-DOS'\n+53BC69 General Purpose Flag  0000 (0)\n+53BC6B Compression Method    0000 (0) 'Stored'\n+53BC6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BC71 CRC                   00000000 (0)\n+53BC75 Compressed Size       00000000 (0)\n+53BC79 Uncompressed Size     00000000 (0)\n+53BC7D Filename Length       0033 (51)\n+53BC7F Extra Length          0009 (9)\n+53BC81 Comment Length        0000 (0)\n+53BC83 Disk Start            0000 (0)\n+53BC85 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BC87 Ext File Attributes   00000000 (0)\n+53BC8B Local Header Offset   00104681 (1066625)\n+53BC8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BC8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BCC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BCC4   Length              0005 (5)\n+53BCC6   Flags               01 (1) 'Modification'\n+53BCC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BCCB CENTRAL HEADER #393   02014B50 (33639248)\n+53BCCF Created Zip Spec      14 (20) '2.0'\n+53BCD0 Created OS            00 (0) 'MS-DOS'\n+53BCD1 Extract Zip Spec      14 (20) '2.0'\n+53BCD2 Extract OS            00 (0) 'MS-DOS'\n+53BCD3 General Purpose Flag  0000 (0)\n+53BCD5 Compression Method    0000 (0) 'Stored'\n+53BCD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BCDB CRC                   00000000 (0)\n+53BCDF Compressed Size       00000000 (0)\n+53BCE3 Uncompressed Size     00000000 (0)\n+53BCE7 Filename Length       003C (60)\n+53BCE9 Extra Length          0009 (9)\n+53BCEB Comment Length        0000 (0)\n+53BCED Disk Start            0000 (0)\n+53BCEF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BCF1 Ext File Attributes   00000000 (0)\n+53BCF5 Local Header Offset   001046DB (1066715)\n+53BCF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BCF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BD35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BD37   Length              0005 (5)\n+53BD39   Flags               01 (1) 'Modification'\n+53BD3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BD3E CENTRAL HEADER #394   02014B50 (33639248)\n+53BD42 Created Zip Spec      14 (20) '2.0'\n+53BD43 Created OS            00 (0) 'MS-DOS'\n+53BD44 Extract Zip Spec      14 (20) '2.0'\n+53BD45 Extract OS            00 (0) 'MS-DOS'\n+53BD46 General Purpose Flag  0000 (0)\n+53BD48 Compression Method    0000 (0) 'Stored'\n+53BD4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BD4E CRC                   00000000 (0)\n+53BD52 Compressed Size       00000000 (0)\n+53BD56 Uncompressed Size     00000000 (0)\n+53BD5A Filename Length       0072 (114)\n+53BD5C Extra Length          0009 (9)\n+53BD5E Comment Length        0000 (0)\n+53BD60 Disk Start            0000 (0)\n+53BD62 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BD64 Ext File Attributes   00000000 (0)\n+53BD68 Local Header Offset   0010473E (1066814)\n+53BD6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BD6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BDDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BDE0   Length              0005 (5)\n+53BDE2   Flags               01 (1) 'Modification'\n+53BDE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BDE7 CENTRAL HEADER #395   02014B50 (33639248)\n+53BDEB Created Zip Spec      14 (20) '2.0'\n+53BDEC Created OS            00 (0) 'MS-DOS'\n+53BDED Extract Zip Spec      14 (20) '2.0'\n+53BDEE Extract OS            00 (0) 'MS-DOS'\n+53BDEF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53BDF1 Compression Method    0000 (0) 'Stored'\n+53BDF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BDF7 CRC                   17E2323C (400699964)\n+53BDFB Compressed Size       00000904 (2308)\n+53BDFF Uncompressed Size     00000904 (2308)\n+53BE03 Filename Length       0088 (136)\n+53BE05 Extra Length          0009 (9)\n+53BE07 Comment Length        0000 (0)\n+53BE09 Disk Start            0000 (0)\n+53BE0B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BE0D Ext File Attributes   00000000 (0)\n+53BE11 Local Header Offset   001047D7 (1066967)\n+53BE15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x53BE96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53BE15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53BF1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BF20   Length              0005 (5)\n-53BF22   Flags               01 (1) 'Modification'\n-53BF23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BF27 CENTRAL HEADER #396   02014B50 (33639248)\n-53BF2B Created Zip Spec      14 (20) '2.0'\n-53BF2C Created OS            00 (0) 'MS-DOS'\n-53BF2D Extract Zip Spec      14 (20) '2.0'\n-53BF2E Extract OS            00 (0) 'MS-DOS'\n-53BF2F General Purpose Flag  0000 (0)\n-53BF31 Compression Method    0000 (0) 'Stored'\n-53BF33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BF37 CRC                   00000000 (0)\n-53BF3B Compressed Size       00000000 (0)\n-53BF3F Uncompressed Size     00000000 (0)\n-53BF43 Filename Length       0030 (48)\n-53BF45 Extra Length          0009 (9)\n-53BF47 Comment Length        0000 (0)\n-53BF49 Disk Start            0000 (0)\n-53BF4B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BF4D Ext File Attributes   00000000 (0)\n-53BF51 Local Header Offset   00105203 (1069571)\n-53BF55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BF55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BF85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BF87   Length              0005 (5)\n-53BF89   Flags               01 (1) 'Modification'\n-53BF8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BF8E CENTRAL HEADER #397   02014B50 (33639248)\n-53BF92 Created Zip Spec      14 (20) '2.0'\n-53BF93 Created OS            00 (0) 'MS-DOS'\n-53BF94 Extract Zip Spec      14 (20) '2.0'\n-53BF95 Extract OS            00 (0) 'MS-DOS'\n-53BF96 General Purpose Flag  0000 (0)\n-53BF98 Compression Method    0000 (0) 'Stored'\n-53BF9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BF9E CRC                   00000000 (0)\n-53BFA2 Compressed Size       00000000 (0)\n-53BFA6 Uncompressed Size     00000000 (0)\n-53BFAA Filename Length       0039 (57)\n-53BFAC Extra Length          0009 (9)\n-53BFAE Comment Length        0000 (0)\n-53BFB0 Disk Start            0000 (0)\n-53BFB2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53BFB4 Ext File Attributes   00000000 (0)\n-53BFB8 Local Header Offset   0010525A (1069658)\n-53BFBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BFBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BFF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BFF7   Length              0005 (5)\n-53BFF9   Flags               01 (1) 'Modification'\n-53BFFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BFFE CENTRAL HEADER #398   02014B50 (33639248)\n-53C002 Created Zip Spec      14 (20) '2.0'\n-53C003 Created OS            00 (0) 'MS-DOS'\n-53C004 Extract Zip Spec      14 (20) '2.0'\n-53C005 Extract OS            00 (0) 'MS-DOS'\n-53C006 General Purpose Flag  0000 (0)\n-53C008 Compression Method    0000 (0) 'Stored'\n-53C00A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C00E CRC                   00000000 (0)\n-53C012 Compressed Size       00000000 (0)\n-53C016 Uncompressed Size     00000000 (0)\n-53C01A Filename Length       007D (125)\n-53C01C Extra Length          0009 (9)\n-53C01E Comment Length        0000 (0)\n-53C020 Disk Start            0000 (0)\n-53C022 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C024 Ext File Attributes   00000000 (0)\n-53C028 Local Header Offset   001052BA (1069754)\n-53C02C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C02C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C0A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C0AB   Length              0005 (5)\n-53C0AD   Flags               01 (1) 'Modification'\n-53C0AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C0B2 CENTRAL HEADER #399   02014B50 (33639248)\n-53C0B6 Created Zip Spec      14 (20) '2.0'\n-53C0B7 Created OS            00 (0) 'MS-DOS'\n-53C0B8 Extract Zip Spec      14 (20) '2.0'\n-53C0B9 Extract OS            00 (0) 'MS-DOS'\n-53C0BA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53C0BC Compression Method    0000 (0) 'Stored'\n-53C0BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C0C2 CRC                   CC28EBBC (3425233852)\n-53C0C6 Compressed Size       00001036 (4150)\n-53C0CA Uncompressed Size     00001036 (4150)\n-53C0CE Filename Length       0093 (147)\n-53C0D0 Extra Length          0009 (9)\n-53C0D2 Comment Length        0000 (0)\n-53C0D4 Disk Start            0000 (0)\n-53C0D6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C0D8 Ext File Attributes   00000000 (0)\n-53C0DC Local Header Offset   0010535E (1069918)\n-53C0E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+53BE9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BE9F   Length              0005 (5)\n+53BEA1   Flags               01 (1) 'Modification'\n+53BEA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BEA6 CENTRAL HEADER #396   02014B50 (33639248)\n+53BEAA Created Zip Spec      14 (20) '2.0'\n+53BEAB Created OS            00 (0) 'MS-DOS'\n+53BEAC Extract Zip Spec      14 (20) '2.0'\n+53BEAD Extract OS            00 (0) 'MS-DOS'\n+53BEAE General Purpose Flag  0000 (0)\n+53BEB0 Compression Method    0000 (0) 'Stored'\n+53BEB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BEB6 CRC                   00000000 (0)\n+53BEBA Compressed Size       00000000 (0)\n+53BEBE Uncompressed Size     00000000 (0)\n+53BEC2 Filename Length       0030 (48)\n+53BEC4 Extra Length          0009 (9)\n+53BEC6 Comment Length        0000 (0)\n+53BEC8 Disk Start            0000 (0)\n+53BECA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BECC Ext File Attributes   00000000 (0)\n+53BED0 Local Header Offset   0010519A (1069466)\n+53BED4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BED4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BF04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BF06   Length              0005 (5)\n+53BF08   Flags               01 (1) 'Modification'\n+53BF09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BF0D CENTRAL HEADER #397   02014B50 (33639248)\n+53BF11 Created Zip Spec      14 (20) '2.0'\n+53BF12 Created OS            00 (0) 'MS-DOS'\n+53BF13 Extract Zip Spec      14 (20) '2.0'\n+53BF14 Extract OS            00 (0) 'MS-DOS'\n+53BF15 General Purpose Flag  0000 (0)\n+53BF17 Compression Method    0000 (0) 'Stored'\n+53BF19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BF1D CRC                   00000000 (0)\n+53BF21 Compressed Size       00000000 (0)\n+53BF25 Uncompressed Size     00000000 (0)\n+53BF29 Filename Length       0039 (57)\n+53BF2B Extra Length          0009 (9)\n+53BF2D Comment Length        0000 (0)\n+53BF2F Disk Start            0000 (0)\n+53BF31 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BF33 Ext File Attributes   00000000 (0)\n+53BF37 Local Header Offset   001051F1 (1069553)\n+53BF3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BF3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53BF74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53BF76   Length              0005 (5)\n+53BF78   Flags               01 (1) 'Modification'\n+53BF79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53BF7D CENTRAL HEADER #398   02014B50 (33639248)\n+53BF81 Created Zip Spec      14 (20) '2.0'\n+53BF82 Created OS            00 (0) 'MS-DOS'\n+53BF83 Extract Zip Spec      14 (20) '2.0'\n+53BF84 Extract OS            00 (0) 'MS-DOS'\n+53BF85 General Purpose Flag  0000 (0)\n+53BF87 Compression Method    0000 (0) 'Stored'\n+53BF89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53BF8D CRC                   00000000 (0)\n+53BF91 Compressed Size       00000000 (0)\n+53BF95 Uncompressed Size     00000000 (0)\n+53BF99 Filename Length       007D (125)\n+53BF9B Extra Length          0009 (9)\n+53BF9D Comment Length        0000 (0)\n+53BF9F Disk Start            0000 (0)\n+53BFA1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53BFA3 Ext File Attributes   00000000 (0)\n+53BFA7 Local Header Offset   00105251 (1069649)\n+53BFAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53BFAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C028 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C02A   Length              0005 (5)\n+53C02C   Flags               01 (1) 'Modification'\n+53C02D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C031 CENTRAL HEADER #399   02014B50 (33639248)\n+53C035 Created Zip Spec      14 (20) '2.0'\n+53C036 Created OS            00 (0) 'MS-DOS'\n+53C037 Extract Zip Spec      14 (20) '2.0'\n+53C038 Extract OS            00 (0) 'MS-DOS'\n+53C039 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53C03B Compression Method    0000 (0) 'Stored'\n+53C03D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C041 CRC                   CC28EBBC (3425233852)\n+53C045 Compressed Size       00001036 (4150)\n+53C049 Uncompressed Size     00001036 (4150)\n+53C04D Filename Length       0093 (147)\n+53C04F Extra Length          0009 (9)\n+53C051 Comment Length        0000 (0)\n+53C053 Disk Start            0000 (0)\n+53C055 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C057 Ext File Attributes   00000000 (0)\n+53C05B Local Header Offset   001052F5 (1069813)\n+53C05F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x53C0E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53C05F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53C173 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C175   Length              0005 (5)\n-53C177   Flags               01 (1) 'Modification'\n-53C178   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C17C CENTRAL HEADER #400   02014B50 (33639248)\n-53C180 Created Zip Spec      14 (20) '2.0'\n-53C181 Created OS            00 (0) 'MS-DOS'\n-53C182 Extract Zip Spec      14 (20) '2.0'\n-53C183 Extract OS            00 (0) 'MS-DOS'\n-53C184 General Purpose Flag  0000 (0)\n-53C186 Compression Method    0000 (0) 'Stored'\n-53C188 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C18C CRC                   00000000 (0)\n-53C190 Compressed Size       00000000 (0)\n-53C194 Uncompressed Size     00000000 (0)\n-53C198 Filename Length       0031 (49)\n-53C19A Extra Length          0009 (9)\n-53C19C Comment Length        0000 (0)\n-53C19E Disk Start            0000 (0)\n-53C1A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C1A2 Ext File Attributes   00000000 (0)\n-53C1A6 Local Header Offset   0010645E (1074270)\n-53C1AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C1AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C1DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C1DD   Length              0005 (5)\n-53C1DF   Flags               01 (1) 'Modification'\n-53C1E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C1E4 CENTRAL HEADER #401   02014B50 (33639248)\n-53C1E8 Created Zip Spec      14 (20) '2.0'\n-53C1E9 Created OS            00 (0) 'MS-DOS'\n-53C1EA Extract Zip Spec      14 (20) '2.0'\n-53C1EB Extract OS            00 (0) 'MS-DOS'\n-53C1EC General Purpose Flag  0000 (0)\n-53C1EE Compression Method    0000 (0) 'Stored'\n-53C1F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C1F4 CRC                   00000000 (0)\n-53C1F8 Compressed Size       00000000 (0)\n-53C1FC Uncompressed Size     00000000 (0)\n-53C200 Filename Length       003A (58)\n-53C202 Extra Length          0009 (9)\n-53C204 Comment Length        0000 (0)\n-53C206 Disk Start            0000 (0)\n-53C208 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C20A Ext File Attributes   00000000 (0)\n-53C20E Local Header Offset   001064B6 (1074358)\n-53C212 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C212: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C24C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C24E   Length              0005 (5)\n-53C250   Flags               01 (1) 'Modification'\n-53C251   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C255 CENTRAL HEADER #402   02014B50 (33639248)\n-53C259 Created Zip Spec      14 (20) '2.0'\n-53C25A Created OS            00 (0) 'MS-DOS'\n-53C25B Extract Zip Spec      14 (20) '2.0'\n-53C25C Extract OS            00 (0) 'MS-DOS'\n-53C25D General Purpose Flag  0000 (0)\n-53C25F Compression Method    0000 (0) 'Stored'\n-53C261 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C265 CRC                   00000000 (0)\n-53C269 Compressed Size       00000000 (0)\n-53C26D Uncompressed Size     00000000 (0)\n-53C271 Filename Length       006E (110)\n-53C273 Extra Length          0009 (9)\n-53C275 Comment Length        0000 (0)\n-53C277 Disk Start            0000 (0)\n-53C279 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C27B Ext File Attributes   00000000 (0)\n-53C27F Local Header Offset   00106517 (1074455)\n-53C283 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C283: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C2F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C2F3   Length              0005 (5)\n-53C2F5   Flags               01 (1) 'Modification'\n-53C2F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C2FA CENTRAL HEADER #403   02014B50 (33639248)\n-53C2FE Created Zip Spec      14 (20) '2.0'\n-53C2FF Created OS            00 (0) 'MS-DOS'\n-53C300 Extract Zip Spec      14 (20) '2.0'\n-53C301 Extract OS            00 (0) 'MS-DOS'\n-53C302 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53C304 Compression Method    0000 (0) 'Stored'\n-53C306 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C30A CRC                   3FC95820 (1070159904)\n-53C30E Compressed Size       00000AD4 (2772)\n-53C312 Uncompressed Size     00000AD4 (2772)\n-53C316 Filename Length       0084 (132)\n-53C318 Extra Length          0009 (9)\n-53C31A Comment Length        0000 (0)\n-53C31C Disk Start            0000 (0)\n-53C31E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C320 Ext File Attributes   00000000 (0)\n-53C324 Local Header Offset   001065AC (1074604)\n-53C328 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+53C0F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C0F4   Length              0005 (5)\n+53C0F6   Flags               01 (1) 'Modification'\n+53C0F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C0FB CENTRAL HEADER #400   02014B50 (33639248)\n+53C0FF Created Zip Spec      14 (20) '2.0'\n+53C100 Created OS            00 (0) 'MS-DOS'\n+53C101 Extract Zip Spec      14 (20) '2.0'\n+53C102 Extract OS            00 (0) 'MS-DOS'\n+53C103 General Purpose Flag  0000 (0)\n+53C105 Compression Method    0000 (0) 'Stored'\n+53C107 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C10B CRC                   00000000 (0)\n+53C10F Compressed Size       00000000 (0)\n+53C113 Uncompressed Size     00000000 (0)\n+53C117 Filename Length       0031 (49)\n+53C119 Extra Length          0009 (9)\n+53C11B Comment Length        0000 (0)\n+53C11D Disk Start            0000 (0)\n+53C11F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C121 Ext File Attributes   00000000 (0)\n+53C125 Local Header Offset   001063F5 (1074165)\n+53C129 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C129: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C15A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C15C   Length              0005 (5)\n+53C15E   Flags               01 (1) 'Modification'\n+53C15F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C163 CENTRAL HEADER #401   02014B50 (33639248)\n+53C167 Created Zip Spec      14 (20) '2.0'\n+53C168 Created OS            00 (0) 'MS-DOS'\n+53C169 Extract Zip Spec      14 (20) '2.0'\n+53C16A Extract OS            00 (0) 'MS-DOS'\n+53C16B General Purpose Flag  0000 (0)\n+53C16D Compression Method    0000 (0) 'Stored'\n+53C16F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C173 CRC                   00000000 (0)\n+53C177 Compressed Size       00000000 (0)\n+53C17B Uncompressed Size     00000000 (0)\n+53C17F Filename Length       003A (58)\n+53C181 Extra Length          0009 (9)\n+53C183 Comment Length        0000 (0)\n+53C185 Disk Start            0000 (0)\n+53C187 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C189 Ext File Attributes   00000000 (0)\n+53C18D Local Header Offset   0010644D (1074253)\n+53C191 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C191: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C1CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C1CD   Length              0005 (5)\n+53C1CF   Flags               01 (1) 'Modification'\n+53C1D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C1D4 CENTRAL HEADER #402   02014B50 (33639248)\n+53C1D8 Created Zip Spec      14 (20) '2.0'\n+53C1D9 Created OS            00 (0) 'MS-DOS'\n+53C1DA Extract Zip Spec      14 (20) '2.0'\n+53C1DB Extract OS            00 (0) 'MS-DOS'\n+53C1DC General Purpose Flag  0000 (0)\n+53C1DE Compression Method    0000 (0) 'Stored'\n+53C1E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C1E4 CRC                   00000000 (0)\n+53C1E8 Compressed Size       00000000 (0)\n+53C1EC Uncompressed Size     00000000 (0)\n+53C1F0 Filename Length       006E (110)\n+53C1F2 Extra Length          0009 (9)\n+53C1F4 Comment Length        0000 (0)\n+53C1F6 Disk Start            0000 (0)\n+53C1F8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C1FA Ext File Attributes   00000000 (0)\n+53C1FE Local Header Offset   001064AE (1074350)\n+53C202 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C202: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C270 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C272   Length              0005 (5)\n+53C274   Flags               01 (1) 'Modification'\n+53C275   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C279 CENTRAL HEADER #403   02014B50 (33639248)\n+53C27D Created Zip Spec      14 (20) '2.0'\n+53C27E Created OS            00 (0) 'MS-DOS'\n+53C27F Extract Zip Spec      14 (20) '2.0'\n+53C280 Extract OS            00 (0) 'MS-DOS'\n+53C281 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53C283 Compression Method    0000 (0) 'Stored'\n+53C285 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C289 CRC                   3FC95820 (1070159904)\n+53C28D Compressed Size       00000AD4 (2772)\n+53C291 Uncompressed Size     00000AD4 (2772)\n+53C295 Filename Length       0084 (132)\n+53C297 Extra Length          0009 (9)\n+53C299 Comment Length        0000 (0)\n+53C29B Disk Start            0000 (0)\n+53C29D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C29F Ext File Attributes   00000000 (0)\n+53C2A3 Local Header Offset   00106543 (1074499)\n+53C2A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x53C328: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53C2A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53C3AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C3AE   Length              0005 (5)\n-53C3B0   Flags               01 (1) 'Modification'\n-53C3B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C3B5 CENTRAL HEADER #404   02014B50 (33639248)\n-53C3B9 Created Zip Spec      14 (20) '2.0'\n-53C3BA Created OS            00 (0) 'MS-DOS'\n-53C3BB Extract Zip Spec      14 (20) '2.0'\n-53C3BC Extract OS            00 (0) 'MS-DOS'\n-53C3BD General Purpose Flag  0000 (0)\n-53C3BF Compression Method    0000 (0) 'Stored'\n-53C3C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C3C5 CRC                   00000000 (0)\n-53C3C9 Compressed Size       00000000 (0)\n-53C3CD Uncompressed Size     00000000 (0)\n-53C3D1 Filename Length       0026 (38)\n-53C3D3 Extra Length          0009 (9)\n-53C3D5 Comment Length        0000 (0)\n-53C3D7 Disk Start            0000 (0)\n-53C3D9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C3DB Ext File Attributes   00000000 (0)\n-53C3DF Local Header Offset   0010713B (1077563)\n-53C3E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C3E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C409 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C40B   Length              0005 (5)\n-53C40D   Flags               01 (1) 'Modification'\n-53C40E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C412 CENTRAL HEADER #405   02014B50 (33639248)\n-53C416 Created Zip Spec      14 (20) '2.0'\n-53C417 Created OS            00 (0) 'MS-DOS'\n-53C418 Extract Zip Spec      14 (20) '2.0'\n-53C419 Extract OS            00 (0) 'MS-DOS'\n-53C41A General Purpose Flag  0000 (0)\n-53C41C Compression Method    0000 (0) 'Stored'\n-53C41E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C422 CRC                   00000000 (0)\n-53C426 Compressed Size       00000000 (0)\n-53C42A Uncompressed Size     00000000 (0)\n-53C42E Filename Length       002F (47)\n-53C430 Extra Length          0009 (9)\n-53C432 Comment Length        0000 (0)\n-53C434 Disk Start            0000 (0)\n-53C436 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C438 Ext File Attributes   00000000 (0)\n-53C43C Local Header Offset   00107188 (1077640)\n-53C440 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C440: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C46F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C471   Length              0005 (5)\n-53C473   Flags               01 (1) 'Modification'\n-53C474   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C478 CENTRAL HEADER #406   02014B50 (33639248)\n-53C47C Created Zip Spec      14 (20) '2.0'\n-53C47D Created OS            00 (0) 'MS-DOS'\n-53C47E Extract Zip Spec      14 (20) '2.0'\n-53C47F Extract OS            00 (0) 'MS-DOS'\n-53C480 General Purpose Flag  0000 (0)\n-53C482 Compression Method    0000 (0) 'Stored'\n-53C484 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C488 CRC                   00000000 (0)\n-53C48C Compressed Size       00000000 (0)\n-53C490 Uncompressed Size     00000000 (0)\n-53C494 Filename Length       005D (93)\n-53C496 Extra Length          0009 (9)\n-53C498 Comment Length        0000 (0)\n-53C49A Disk Start            0000 (0)\n-53C49C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C49E Ext File Attributes   00000000 (0)\n-53C4A2 Local Header Offset   001071DE (1077726)\n-53C4A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C4A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C503 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C505   Length              0005 (5)\n-53C507   Flags               01 (1) 'Modification'\n-53C508   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C50C CENTRAL HEADER #407   02014B50 (33639248)\n-53C510 Created Zip Spec      14 (20) '2.0'\n-53C511 Created OS            00 (0) 'MS-DOS'\n-53C512 Extract Zip Spec      14 (20) '2.0'\n-53C513 Extract OS            00 (0) 'MS-DOS'\n-53C514 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53C516 Compression Method    0000 (0) 'Stored'\n-53C518 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C51C CRC                   41CBDE11 (1103879697)\n-53C520 Compressed Size       00000D2F (3375)\n-53C524 Uncompressed Size     00000D2F (3375)\n-53C528 Filename Length       0073 (115)\n-53C52A Extra Length          0009 (9)\n-53C52C Comment Length        0000 (0)\n-53C52E Disk Start            0000 (0)\n-53C530 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C532 Ext File Attributes   00000000 (0)\n-53C536 Local Header Offset   00107262 (1077858)\n-53C53A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C53A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C5AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C5AF   Length              0005 (5)\n-53C5B1   Flags               01 (1) 'Modification'\n-53C5B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C5B6 CENTRAL HEADER #408   02014B50 (33639248)\n-53C5BA Created Zip Spec      14 (20) '2.0'\n-53C5BB Created OS            00 (0) 'MS-DOS'\n-53C5BC Extract Zip Spec      14 (20) '2.0'\n-53C5BD Extract OS            00 (0) 'MS-DOS'\n-53C5BE General Purpose Flag  0000 (0)\n-53C5C0 Compression Method    0000 (0) 'Stored'\n-53C5C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C5C6 CRC                   00000000 (0)\n-53C5CA Compressed Size       00000000 (0)\n-53C5CE Uncompressed Size     00000000 (0)\n-53C5D2 Filename Length       0063 (99)\n-53C5D4 Extra Length          0009 (9)\n-53C5D6 Comment Length        0000 (0)\n-53C5D8 Disk Start            0000 (0)\n-53C5DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C5DC Ext File Attributes   00000000 (0)\n-53C5E0 Local Header Offset   0010803B (1081403)\n-53C5E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C5E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C647 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C649   Length              0005 (5)\n-53C64B   Flags               01 (1) 'Modification'\n-53C64C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C650 CENTRAL HEADER #409   02014B50 (33639248)\n-53C654 Created Zip Spec      14 (20) '2.0'\n-53C655 Created OS            00 (0) 'MS-DOS'\n-53C656 Extract Zip Spec      14 (20) '2.0'\n-53C657 Extract OS            00 (0) 'MS-DOS'\n-53C658 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53C65A Compression Method    0000 (0) 'Stored'\n-53C65C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C660 CRC                   1D768ED5 (494309077)\n-53C664 Compressed Size       00001C79 (7289)\n-53C668 Uncompressed Size     00001C79 (7289)\n-53C66C Filename Length       0079 (121)\n-53C66E Extra Length          0009 (9)\n-53C670 Comment Length        0000 (0)\n-53C672 Disk Start            0000 (0)\n-53C674 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C676 Ext File Attributes   00000000 (0)\n-53C67A Local Header Offset   001080C5 (1081541)\n-53C67E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C67E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C6F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C6F9   Length              0005 (5)\n-53C6FB   Flags               01 (1) 'Modification'\n-53C6FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C700 CENTRAL HEADER #410   02014B50 (33639248)\n-53C704 Created Zip Spec      14 (20) '2.0'\n-53C705 Created OS            00 (0) 'MS-DOS'\n-53C706 Extract Zip Spec      14 (20) '2.0'\n-53C707 Extract OS            00 (0) 'MS-DOS'\n-53C708 General Purpose Flag  0000 (0)\n-53C70A Compression Method    0000 (0) 'Stored'\n-53C70C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C710 CRC                   00000000 (0)\n-53C714 Compressed Size       00000000 (0)\n-53C718 Uncompressed Size     00000000 (0)\n-53C71C Filename Length       002F (47)\n-53C71E Extra Length          0009 (9)\n-53C720 Comment Length        0000 (0)\n-53C722 Disk Start            0000 (0)\n-53C724 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C726 Ext File Attributes   00000000 (0)\n-53C72A Local Header Offset   00109DEE (1089006)\n-53C72E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C72E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C75D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C75F   Length              0005 (5)\n-53C761   Flags               01 (1) 'Modification'\n-53C762   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C766 CENTRAL HEADER #411   02014B50 (33639248)\n-53C76A Created Zip Spec      14 (20) '2.0'\n-53C76B Created OS            00 (0) 'MS-DOS'\n-53C76C Extract Zip Spec      14 (20) '2.0'\n-53C76D Extract OS            00 (0) 'MS-DOS'\n-53C76E General Purpose Flag  0000 (0)\n-53C770 Compression Method    0000 (0) 'Stored'\n-53C772 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C776 CRC                   00000000 (0)\n-53C77A Compressed Size       00000000 (0)\n-53C77E Uncompressed Size     00000000 (0)\n-53C782 Filename Length       0038 (56)\n-53C784 Extra Length          0009 (9)\n-53C786 Comment Length        0000 (0)\n-53C788 Disk Start            0000 (0)\n-53C78A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C78C Ext File Attributes   00000000 (0)\n-53C790 Local Header Offset   00109E44 (1089092)\n-53C794 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C794: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C7CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C7CE   Length              0005 (5)\n-53C7D0   Flags               01 (1) 'Modification'\n-53C7D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C7D5 CENTRAL HEADER #412   02014B50 (33639248)\n-53C7D9 Created Zip Spec      14 (20) '2.0'\n-53C7DA Created OS            00 (0) 'MS-DOS'\n-53C7DB Extract Zip Spec      14 (20) '2.0'\n-53C7DC Extract OS            00 (0) 'MS-DOS'\n-53C7DD General Purpose Flag  0000 (0)\n-53C7DF Compression Method    0000 (0) 'Stored'\n-53C7E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C7E5 CRC                   00000000 (0)\n-53C7E9 Compressed Size       00000000 (0)\n-53C7ED Uncompressed Size     00000000 (0)\n-53C7F1 Filename Length       006B (107)\n-53C7F3 Extra Length          0009 (9)\n-53C7F5 Comment Length        0000 (0)\n-53C7F7 Disk Start            0000 (0)\n-53C7F9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C7FB Ext File Attributes   00000000 (0)\n-53C7FF Local Header Offset   00109EA3 (1089187)\n-53C803 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C803: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C86E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C870   Length              0005 (5)\n-53C872   Flags               01 (1) 'Modification'\n-53C873   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C877 CENTRAL HEADER #413   02014B50 (33639248)\n-53C87B Created Zip Spec      14 (20) '2.0'\n-53C87C Created OS            00 (0) 'MS-DOS'\n-53C87D Extract Zip Spec      14 (20) '2.0'\n-53C87E Extract OS            00 (0) 'MS-DOS'\n-53C87F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53C881 Compression Method    0000 (0) 'Stored'\n-53C883 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C887 CRC                   7A85C658 (2055587416)\n-53C88B Compressed Size       00001D19 (7449)\n-53C88F Uncompressed Size     00001D19 (7449)\n-53C893 Filename Length       0081 (129)\n-53C895 Extra Length          0009 (9)\n-53C897 Comment Length        0000 (0)\n-53C899 Disk Start            0000 (0)\n-53C89B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C89D Ext File Attributes   00000000 (0)\n-53C8A1 Local Header Offset   00109F35 (1089333)\n-53C8A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C8A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C926 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C928   Length              0005 (5)\n-53C92A   Flags               01 (1) 'Modification'\n-53C92B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C92F CENTRAL HEADER #414   02014B50 (33639248)\n-53C933 Created Zip Spec      14 (20) '2.0'\n-53C934 Created OS            00 (0) 'MS-DOS'\n-53C935 Extract Zip Spec      14 (20) '2.0'\n-53C936 Extract OS            00 (0) 'MS-DOS'\n-53C937 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-53C939 Compression Method    0000 (0) 'Stored'\n-53C93B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C93F CRC                   907F6F99 (2424270745)\n-53C943 Compressed Size       0042155F (4330847)\n-53C947 Uncompressed Size     0042155F (4330847)\n-53C94B Filename Length       001A (26)\n-53C94D Extra Length          0009 (9)\n-53C94F Comment Length        0000 (0)\n-53C951 Disk Start            0000 (0)\n-53C953 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-53C955 Ext File Attributes   00000000 (0)\n-53C959 Local Header Offset   0010BD06 (1096966)\n-53C95D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C95D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C977 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C979   Length              0005 (5)\n-53C97B   Flags               01 (1) 'Modification'\n-53C97C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C980 END CENTRAL HEADER    06054B50 (101010256)\n-53C984 Number of this disk   0000 (0)\n-53C986 Central Dir Disk no   0000 (0)\n-53C988 Entries in this disk  019E (414)\n-53C98A Total Entries         019E (414)\n-53C98C Size of Central Dir   0000F6CA (63178)\n-53C990 Offset to Central Dir 0052D2B6 (5427894)\n-53C994 Comment Length        0000 (0)\n+53C32B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C32D   Length              0005 (5)\n+53C32F   Flags               01 (1) 'Modification'\n+53C330   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C334 CENTRAL HEADER #404   02014B50 (33639248)\n+53C338 Created Zip Spec      14 (20) '2.0'\n+53C339 Created OS            00 (0) 'MS-DOS'\n+53C33A Extract Zip Spec      14 (20) '2.0'\n+53C33B Extract OS            00 (0) 'MS-DOS'\n+53C33C General Purpose Flag  0000 (0)\n+53C33E Compression Method    0000 (0) 'Stored'\n+53C340 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C344 CRC                   00000000 (0)\n+53C348 Compressed Size       00000000 (0)\n+53C34C Uncompressed Size     00000000 (0)\n+53C350 Filename Length       0026 (38)\n+53C352 Extra Length          0009 (9)\n+53C354 Comment Length        0000 (0)\n+53C356 Disk Start            0000 (0)\n+53C358 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C35A Ext File Attributes   00000000 (0)\n+53C35E Local Header Offset   001070D2 (1077458)\n+53C362 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C362: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C388 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C38A   Length              0005 (5)\n+53C38C   Flags               01 (1) 'Modification'\n+53C38D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C391 CENTRAL HEADER #405   02014B50 (33639248)\n+53C395 Created Zip Spec      14 (20) '2.0'\n+53C396 Created OS            00 (0) 'MS-DOS'\n+53C397 Extract Zip Spec      14 (20) '2.0'\n+53C398 Extract OS            00 (0) 'MS-DOS'\n+53C399 General Purpose Flag  0000 (0)\n+53C39B Compression Method    0000 (0) 'Stored'\n+53C39D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C3A1 CRC                   00000000 (0)\n+53C3A5 Compressed Size       00000000 (0)\n+53C3A9 Uncompressed Size     00000000 (0)\n+53C3AD Filename Length       002F (47)\n+53C3AF Extra Length          0009 (9)\n+53C3B1 Comment Length        0000 (0)\n+53C3B3 Disk Start            0000 (0)\n+53C3B5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C3B7 Ext File Attributes   00000000 (0)\n+53C3BB Local Header Offset   0010711F (1077535)\n+53C3BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C3BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C3EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C3F0   Length              0005 (5)\n+53C3F2   Flags               01 (1) 'Modification'\n+53C3F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C3F7 CENTRAL HEADER #406   02014B50 (33639248)\n+53C3FB Created Zip Spec      14 (20) '2.0'\n+53C3FC Created OS            00 (0) 'MS-DOS'\n+53C3FD Extract Zip Spec      14 (20) '2.0'\n+53C3FE Extract OS            00 (0) 'MS-DOS'\n+53C3FF General Purpose Flag  0000 (0)\n+53C401 Compression Method    0000 (0) 'Stored'\n+53C403 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C407 CRC                   00000000 (0)\n+53C40B Compressed Size       00000000 (0)\n+53C40F Uncompressed Size     00000000 (0)\n+53C413 Filename Length       005D (93)\n+53C415 Extra Length          0009 (9)\n+53C417 Comment Length        0000 (0)\n+53C419 Disk Start            0000 (0)\n+53C41B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C41D Ext File Attributes   00000000 (0)\n+53C421 Local Header Offset   00107175 (1077621)\n+53C425 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C425: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C482 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C484   Length              0005 (5)\n+53C486   Flags               01 (1) 'Modification'\n+53C487   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C48B CENTRAL HEADER #407   02014B50 (33639248)\n+53C48F Created Zip Spec      14 (20) '2.0'\n+53C490 Created OS            00 (0) 'MS-DOS'\n+53C491 Extract Zip Spec      14 (20) '2.0'\n+53C492 Extract OS            00 (0) 'MS-DOS'\n+53C493 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53C495 Compression Method    0000 (0) 'Stored'\n+53C497 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C49B CRC                   41CBDE11 (1103879697)\n+53C49F Compressed Size       00000D2F (3375)\n+53C4A3 Uncompressed Size     00000D2F (3375)\n+53C4A7 Filename Length       0073 (115)\n+53C4A9 Extra Length          0009 (9)\n+53C4AB Comment Length        0000 (0)\n+53C4AD Disk Start            0000 (0)\n+53C4AF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C4B1 Ext File Attributes   00000000 (0)\n+53C4B5 Local Header Offset   001071F9 (1077753)\n+53C4B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C4B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C52C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C52E   Length              0005 (5)\n+53C530   Flags               01 (1) 'Modification'\n+53C531   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C535 CENTRAL HEADER #408   02014B50 (33639248)\n+53C539 Created Zip Spec      14 (20) '2.0'\n+53C53A Created OS            00 (0) 'MS-DOS'\n+53C53B Extract Zip Spec      14 (20) '2.0'\n+53C53C Extract OS            00 (0) 'MS-DOS'\n+53C53D General Purpose Flag  0000 (0)\n+53C53F Compression Method    0000 (0) 'Stored'\n+53C541 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C545 CRC                   00000000 (0)\n+53C549 Compressed Size       00000000 (0)\n+53C54D Uncompressed Size     00000000 (0)\n+53C551 Filename Length       0063 (99)\n+53C553 Extra Length          0009 (9)\n+53C555 Comment Length        0000 (0)\n+53C557 Disk Start            0000 (0)\n+53C559 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C55B Ext File Attributes   00000000 (0)\n+53C55F Local Header Offset   00107FD2 (1081298)\n+53C563 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C563: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C5C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C5C8   Length              0005 (5)\n+53C5CA   Flags               01 (1) 'Modification'\n+53C5CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C5CF CENTRAL HEADER #409   02014B50 (33639248)\n+53C5D3 Created Zip Spec      14 (20) '2.0'\n+53C5D4 Created OS            00 (0) 'MS-DOS'\n+53C5D5 Extract Zip Spec      14 (20) '2.0'\n+53C5D6 Extract OS            00 (0) 'MS-DOS'\n+53C5D7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53C5D9 Compression Method    0000 (0) 'Stored'\n+53C5DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C5DF CRC                   1D768ED5 (494309077)\n+53C5E3 Compressed Size       00001C79 (7289)\n+53C5E7 Uncompressed Size     00001C79 (7289)\n+53C5EB Filename Length       0079 (121)\n+53C5ED Extra Length          0009 (9)\n+53C5EF Comment Length        0000 (0)\n+53C5F1 Disk Start            0000 (0)\n+53C5F3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C5F5 Ext File Attributes   00000000 (0)\n+53C5F9 Local Header Offset   0010805C (1081436)\n+53C5FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C5FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C676 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C678   Length              0005 (5)\n+53C67A   Flags               01 (1) 'Modification'\n+53C67B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C67F CENTRAL HEADER #410   02014B50 (33639248)\n+53C683 Created Zip Spec      14 (20) '2.0'\n+53C684 Created OS            00 (0) 'MS-DOS'\n+53C685 Extract Zip Spec      14 (20) '2.0'\n+53C686 Extract OS            00 (0) 'MS-DOS'\n+53C687 General Purpose Flag  0000 (0)\n+53C689 Compression Method    0000 (0) 'Stored'\n+53C68B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C68F CRC                   00000000 (0)\n+53C693 Compressed Size       00000000 (0)\n+53C697 Uncompressed Size     00000000 (0)\n+53C69B Filename Length       002F (47)\n+53C69D Extra Length          0009 (9)\n+53C69F Comment Length        0000 (0)\n+53C6A1 Disk Start            0000 (0)\n+53C6A3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C6A5 Ext File Attributes   00000000 (0)\n+53C6A9 Local Header Offset   00109D85 (1088901)\n+53C6AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C6AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C6DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C6DE   Length              0005 (5)\n+53C6E0   Flags               01 (1) 'Modification'\n+53C6E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C6E5 CENTRAL HEADER #411   02014B50 (33639248)\n+53C6E9 Created Zip Spec      14 (20) '2.0'\n+53C6EA Created OS            00 (0) 'MS-DOS'\n+53C6EB Extract Zip Spec      14 (20) '2.0'\n+53C6EC Extract OS            00 (0) 'MS-DOS'\n+53C6ED General Purpose Flag  0000 (0)\n+53C6EF Compression Method    0000 (0) 'Stored'\n+53C6F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C6F5 CRC                   00000000 (0)\n+53C6F9 Compressed Size       00000000 (0)\n+53C6FD Uncompressed Size     00000000 (0)\n+53C701 Filename Length       0038 (56)\n+53C703 Extra Length          0009 (9)\n+53C705 Comment Length        0000 (0)\n+53C707 Disk Start            0000 (0)\n+53C709 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C70B Ext File Attributes   00000000 (0)\n+53C70F Local Header Offset   00109DDB (1088987)\n+53C713 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C713: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C74B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C74D   Length              0005 (5)\n+53C74F   Flags               01 (1) 'Modification'\n+53C750   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C754 CENTRAL HEADER #412   02014B50 (33639248)\n+53C758 Created Zip Spec      14 (20) '2.0'\n+53C759 Created OS            00 (0) 'MS-DOS'\n+53C75A Extract Zip Spec      14 (20) '2.0'\n+53C75B Extract OS            00 (0) 'MS-DOS'\n+53C75C General Purpose Flag  0000 (0)\n+53C75E Compression Method    0000 (0) 'Stored'\n+53C760 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C764 CRC                   00000000 (0)\n+53C768 Compressed Size       00000000 (0)\n+53C76C Uncompressed Size     00000000 (0)\n+53C770 Filename Length       006B (107)\n+53C772 Extra Length          0009 (9)\n+53C774 Comment Length        0000 (0)\n+53C776 Disk Start            0000 (0)\n+53C778 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C77A Ext File Attributes   00000000 (0)\n+53C77E Local Header Offset   00109E3A (1089082)\n+53C782 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C782: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C7ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C7EF   Length              0005 (5)\n+53C7F1   Flags               01 (1) 'Modification'\n+53C7F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C7F6 CENTRAL HEADER #413   02014B50 (33639248)\n+53C7FA Created Zip Spec      14 (20) '2.0'\n+53C7FB Created OS            00 (0) 'MS-DOS'\n+53C7FC Extract Zip Spec      14 (20) '2.0'\n+53C7FD Extract OS            00 (0) 'MS-DOS'\n+53C7FE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53C800 Compression Method    0000 (0) 'Stored'\n+53C802 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C806 CRC                   7A85C658 (2055587416)\n+53C80A Compressed Size       00001D19 (7449)\n+53C80E Uncompressed Size     00001D19 (7449)\n+53C812 Filename Length       0081 (129)\n+53C814 Extra Length          0009 (9)\n+53C816 Comment Length        0000 (0)\n+53C818 Disk Start            0000 (0)\n+53C81A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C81C Ext File Attributes   00000000 (0)\n+53C820 Local Header Offset   00109ECC (1089228)\n+53C824 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C824: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C8A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C8A7   Length              0005 (5)\n+53C8A9   Flags               01 (1) 'Modification'\n+53C8AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C8AE CENTRAL HEADER #414   02014B50 (33639248)\n+53C8B2 Created Zip Spec      14 (20) '2.0'\n+53C8B3 Created OS            00 (0) 'MS-DOS'\n+53C8B4 Extract Zip Spec      14 (20) '2.0'\n+53C8B5 Extract OS            00 (0) 'MS-DOS'\n+53C8B6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+53C8B8 Compression Method    0000 (0) 'Stored'\n+53C8BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+53C8BE CRC                   9E31BAE2 (2654059234)\n+53C8C2 Compressed Size       00421547 (4330823)\n+53C8C6 Uncompressed Size     00421547 (4330823)\n+53C8CA Filename Length       001A (26)\n+53C8CC Extra Length          0009 (9)\n+53C8CE Comment Length        0000 (0)\n+53C8D0 Disk Start            0000 (0)\n+53C8D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+53C8D4 Ext File Attributes   00000000 (0)\n+53C8D8 Local Header Offset   0010BC9D (1096861)\n+53C8DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53C8DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+53C8F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+53C8F8   Length              0005 (5)\n+53C8FA   Flags               01 (1) 'Modification'\n+53C8FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+53C8FF END CENTRAL HEADER    06054B50 (101010256)\n+53C903 Number of this disk   0000 (0)\n+53C905 Central Dir Disk no   0000 (0)\n+53C907 Entries in this disk  019E (414)\n+53C909 Total Entries         019E (414)\n+53C90B Size of Central Dir   0000F6CA (63178)\n+53C90F Offset to Central Dir 0052D235 (5427765)\n+53C913 Comment Length        0000 (0)\n #\n # Warning Count: 828\n #\n # Done\n"}, {"source1": "build.properties", "source2": "build.properties", "unified_diff": "@@ -12,18 +12,18 @@\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 Project-Version:2.0.0-M4\n Build-Branch:UNKNOWN\n Build-Revision:19c5be0\n-Build-Timestamp:2024-06-28T01:28:38Z\n-Built-By:exceptionfactory\n-Maven-Home:/home/exceptionfactory/.m2/wrapper/dists/apache-maven-3.9.8/af622e91\n+Build-Timestamp:2025-01-29T22:11:12Z\n+Built-By:aman\n+Maven-Home:/usr/local/apache-maven\n Maven-Version:3.9.8\n Created-By:Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256)\n-Build-Java-Home:/home/exceptionfactory/Applications/zulu21.34.19-ca-jdk21.0.3-linux_x64\n-Build-Jdk:21.0.3\n-Build-Jdk-Vendor:Azul Systems, Inc.\n+Build-Java-Home:/usr/lib/jvm/java-21-openjdk-amd64\n+Build-Jdk:21.0.4\n+Build-Jdk-Vendor:Ubuntu\n Build-Arch:amd64\n Build-Os:Linux\n-Build-Os-Version:6.5.0-41-generic\n+Build-Os-Version:5.15.0-87-generic\n"}, {"source1": "nifi-runtime-manifest.json", "source2": "nifi-runtime-manifest.json", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9673471791434419%", "Differences: {\"'buildInfo'\": \"{'timestamp': 1738188672886, 'compiler': 'Ubuntu 21.0.4'}\",", " \"'bundles'\": \"{0: {'artifact': 'nifi-pgp-nar', 'componentManifest': {'controllerServices': [], \"", "              \"'processors': {0: {'artifact': 'nifi-pgp-nar', 'type': \"", "              \"'org.apache.nifi.processors.pgp.DecryptContentPGP', 'typeDescription': 'Decrypt \"", "              'contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves '", "              \"OpenPGP encoding to support subsequent signature verifica [\u2026]"], "unified_diff": "@@ -1,501 +1,342 @@\n {\n     \"agentType\": \"nifi\",\n     \"buildInfo\": {\n-        \"compiler\": \"Azul Systems, Inc. 21.0.3\",\n+        \"compiler\": \"Ubuntu 21.0.4\",\n         \"revision\": \"19c5be0\",\n-        \"timestamp\": 1719538118956,\n+        \"timestamp\": 1738188672886,\n         \"version\": \"2.0.0-M4\"\n     },\n     \"bundles\": [\n         {\n-            \"artifact\": \"nifi-redis-nar\",\n+            \"artifact\": \"nifi-pgp-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cluster Max Redirects\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The maximum number of redirects that can be performed when clustered.\",\n-                                \"displayName\": \"Cluster Max Redirects\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster Max Redirects\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communication Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout to use when attempting to communicate with Redis.\",\n-                                \"displayName\": \"Communication Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communication Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection String\": {\n-                                \"description\": \"The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.\",\n-                                \"displayName\": \"Connection String\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Connection String\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Index\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The database index to be used by connections created from this connection pool. See the databases property in redis.conf, by default databases 0-15 will be available.\",\n-                                \"displayName\": \"Database Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database Index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password used to authenticate to the Redis server. See the 'requirepass' property in redis.conf.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Pool - Block When Exhausted\": {\n+                            \"decryption-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n+                                        \"displayName\": \"DECRYPTED\",\n+                                        \"value\": \"DECRYPTED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n+                                        \"displayName\": \"PACKAGED\",\n+                                        \"value\": \"PACKAGED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.\",\n-                                \"displayName\": \"Pool - Block When Exhausted\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Block When Exhausted\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Max Idle\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.\",\n-                                \"displayName\": \"Pool - Max Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Max Total\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.\",\n-                                \"displayName\": \"Pool - Max Total\",\n+                                \"defaultValue\": \"DECRYPTED\",\n+                                \"description\": \"Strategy for writing files to success after decryption\",\n+                                \"displayName\": \"Decryption Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Total\",\n+                                \"name\": \"decryption-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Max Wait Time\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for an available connection when Block When Exhausted is set to true.\",\n-                                \"displayName\": \"Pool - Max Wait Time\",\n+                            \"passphrase\": {\n+                                \"description\": \"Passphrase used for decrypting data encrypted with Password-Based Encryption\",\n+                                \"displayName\": \"Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Pool - Min Evictable Idle Time\": {\n-                                \"defaultValue\": \"60 seconds\",\n-                                \"description\": \"The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Pool - Min Evictable Idle Time\",\n+                            \"private-key-service\": {\n+                                \"description\": \"PGP Private Key Service for decrypting data encrypted with Public Key Encryption\",\n+                                \"displayName\": \"Private Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Evictable Idle Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"private-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption Succeeded\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Pool - Min Idle\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.\",\n-                                \"displayName\": \"Pool - Min Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Decryption Failed\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                        \"typeDescription\": \"Decrypt contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves OpenPGP encoding to support subsequent signature verification.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Filename from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n                             },\n-                            \"Pool - Num Tests Per Eviction Run\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The number of connections to tests per eviction attempt. A negative value indicates to test all connections.\",\n-                                \"displayName\": \"Pool - Num Tests Per Eviction Run\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Modified Date from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.modified\"\n                             },\n-                            \"Pool - Test On Borrow\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n-                                \"displayName\": \"Pool - Test On Borrow\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Borrow\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n                             },\n-                            \"Pool - Test On Create\": {\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"file-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon creation.\",\n-                                \"displayName\": \"Pool - Test On Create\",\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"File Encoding for encryption\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Create\",\n+                                \"name\": \"file-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Return\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon returning to the pool.\",\n-                                \"displayName\": \"Pool - Test On Return\",\n+                            \"passphrase\": {\n+                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n+                                \"displayName\": \"Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Return\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Pool - Test While Idle\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"public-key-search\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"Public Key Service\",\n+                                        \"propertyName\": \"public-key-service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not connections should be tested while idle.\",\n-                                \"displayName\": \"Pool - Test While Idle\",\n+                                \"description\": \"PGP Public Key Search will be used to match against the User ID or Key ID when formatted as uppercase hexadecimal string of 16 characters\",\n+                                \"displayName\": \"Public Key Search\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test While Idle\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"public-key-search\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Time Between Eviction Runs\": {\n-                                \"defaultValue\": \"30 seconds\",\n-                                \"description\": \"The amount of time between attempting to evict idle connections from the pool.\",\n-                                \"displayName\": \"Pool - Time Between Eviction Runs\",\n+                            \"public-key-service\": {\n+                                \"description\": \"PGP Public Key Service for encrypting data with Public Key Encryption\",\n+                                \"displayName\": \"Public Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Time Between Eviction Runs\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"public-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Redis Mode\": {\n+                            \"symmetric-key-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A single standalone Redis instance.\",\n-                                        \"displayName\": \"Standalone\",\n-                                        \"value\": \"Standalone\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_128\",\n+                                        \"value\": \"AES_128\"\n                                     },\n                                     {\n-                                        \"description\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n-                                        \"displayName\": \"Sentinel\",\n-                                        \"value\": \"Sentinel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_192\",\n+                                        \"value\": \"AES_192\"\n                                     },\n                                     {\n-                                        \"description\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n-                                        \"displayName\": \"Cluster\",\n-                                        \"value\": \"Cluster\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_256\",\n+                                        \"value\": \"AES_256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standalone\",\n-                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n-                                \"displayName\": \"Redis Mode\",\n+                                \"defaultValue\": \"AES_256\",\n+                                \"description\": \"Symmetric-Key Algorithm for encryption\",\n+                                \"displayName\": \"Symmetric-Key Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Redis Mode\",\n+                                \"name\": \"symmetric-key-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Sentinel Master\": {\n-                                \"description\": \"The name of the sentinel master, require when Mode is set to Sentinel\",\n-                                \"displayName\": \"Sentinel Master\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sentinel Master\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Sentinel Password\": {\n-                                \"description\": \"The password used to authenticate to the Redis Sentinel server. See the 'requirepass' and 'sentinel sentinel-pass' properties in sentinel.conf.\",\n-                                \"displayName\": \"Sentinel Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sentinel Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Sentinel Username\": {\n-                                \"description\": \"The username used to authenticate to the Redis sentinel server.\",\n-                                \"displayName\": \"Sentinel Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sentinel Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"The username used to authenticate to the Redis server.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-redis-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Encryption Succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Encryption Failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"redis\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n                         ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n-                        \"typeDescription\": \"A service that provides connections to Redis.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"redis-cache-ttl\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n-                                \"displayName\": \"TTL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-cache-ttl\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                        \"typeDescription\": \"Encrypt contents using OpenPGP. The processor reads input and detects OpenPGP messages to avoid unnecessary additional wrapping in Literal Data packets.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm\",\n+                                \"name\": \"pgp.symmetric.key.algorithm\"\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"redis\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisDistributedMapCacheClientService\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service relies on the WATCH, MULTI, and EXEC commands in Redis, which are not fully supported when Redis is clustered. As a result, this service can only be used with a Redis Connection Pool that is configured for standalone or sentinel mode. Sentinel mode can be used to provide high-availability configurations.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"redis-cache-ttl\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n-                                \"displayName\": \"TTL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-cache-ttl\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"Symmetric-Key Algorithm Key Size\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.key.size\"\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"File Encoding\",\n+                                \"name\": \"pgp.file.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"Compression Algorithm\",\n+                                \"name\": \"pgp.compression.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"Compression Algorithm Identifier\",\n+                                \"name\": \"pgp.compression.algorithm.id\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"redis\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.redis.service.SimpleRedisDistributedMapCacheClientService\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service is intended to be used when a non-atomic DistributedMapCacheClient is required.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -508,134 +349,196 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set to use when storing record field values as strings. All fields will be converted to strings using this character set before being stored in Redis.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"file-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"File Encoding for signing\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"charset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"file-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"data-record-path\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"This property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to Redis instead of sending the entire incoming Record. The property defaults to the root '/' which corresponds to a 'flat' record (all fields/values at the top level of  the Record.\",\n-                                \"displayName\": \"Data Record Path\",\n+                            \"hash-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"SHA512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA512\",\n+                                \"description\": \"Hash Algorithm for signing\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"data-record-path\",\n+                                \"name\": \"hash-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash-value-record-path\": {\n-                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the hash value associated with all the record fields/values (see 'hset' in Redis documentation for more details). The RecordPath must point at exactly one field or an error will occur.\",\n-                                \"displayName\": \"Hash Value Record Path\",\n+                            \"private-key-id\": {\n+                                \"description\": \"PGP Private Key Identifier formatted as uppercase hexadecimal string of 16 characters used for signing\",\n+                                \"displayName\": \"Private Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-value-record-path\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"private-key-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"private-key-service\": {\n+                                \"description\": \"PGP Private Key Service for generating content signatures\",\n+                                \"displayName\": \"Private Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"private-key-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n+                            \"signing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n+                                        \"displayName\": \"SIGNED\",\n+                                        \"value\": \"SIGNED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n+                                        \"displayName\": \"DETACHED\",\n+                                        \"value\": \"DETACHED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SIGNED\",\n+                                \"description\": \"Strategy for writing files to success after signing\",\n+                                \"displayName\": \"Signing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n+                                \"name\": \"signing-strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles having all Records stored in Redis will be routed to this relationship\",\n+                                \"description\": \"Content signing succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles containing Records with processing errors will be routed to this relationship\",\n+                                \"description\": \"Content signing failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"hash\",\n-                            \"put\",\n-                            \"record\",\n-                            \"redis\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.redis.processor.PutRedisHashRecord\",\n-                        \"typeDescription\": \"Puts record field data into Redis using a specified hash value, which is determined by a RecordPath to a field in each record containing the hash value. The record fields and values are stored as key/value pairs associated by the hash value. NOTE: Neither the evaluated hash value nor any of the field values can be null. If the hash value is null, the FlowFile will be routed to failure. For each of the field values, if the value is null that field will be not set in Redis.\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to Redis\",\n-                                \"name\": \"redis.success.record.count\"\n+                                \"description\": \"Compression Algorithm\",\n+                                \"name\": \"pgp.compression.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"Compression Algorithm Identifier\",\n+                                \"name\": \"pgp.compression.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"File Encoding\",\n+                                \"name\": \"pgp.file.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n+                                \"name\": \"pgp.signature.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Hash Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.hash.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Key Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.key.algorithm.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Public Key Identifier\",\n+                                \"name\": \"pgp.signature.key.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Type Identifier\",\n+                                \"name\": \"pgp.signature.type.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Version Number\",\n+                                \"name\": \"pgp.signature.version\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -648,658 +551,622 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"public-key-service\": {\n+                                \"description\": \"PGP Public Key Service for verifying signatures with Public Key Encryption\",\n+                                \"displayName\": \"Public Key Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n+                                \"name\": \"public-key-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"box-file-id\": {\n-                                \"defaultValue\": \"${box.id}\",\n-                                \"description\": \"The ID of the File to fetch\",\n-                                \"displayName\": \"File ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"box-file-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.ListBoxFile\",\n-                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.SignContentPGP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"Signature Verification Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"description\": \"Signature Verification Failed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.VerifyContentPGP\",\n+                        \"typeDescription\": \"Verify signatures using OpenPGP Public Keys\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n+                                \"description\": \"Filename from Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Modified Date Time from Literal Data in milliseconds\",\n+                                \"name\": \"pgp.literal.data.modified\"\n                             },\n                             {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Signature Creation Time in milliseconds\",\n+                                \"name\": \"pgp.signature.created\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n+                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n+                                \"name\": \"pgp.signature.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n+                                \"description\": \"Signature Hash Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.hash.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"Signature Key Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.key.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"Signature Public Key Identifier\",\n+                                \"name\": \"pgp.signature.key.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Type Identifier\",\n+                                \"name\": \"pgp.signature.type.id\"\n+                            },\n+                            {\n+                                \"description\": \"Signature Version Number\",\n+                                \"name\": \"pgp.signature.version\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-prometheus-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"prometheus-reporting-task-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"box-folder-id\": {\n-                                \"description\": \"The ID of the folder from which to pull list of files.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"prometheus-reporting-task-instance-id\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"box-folder-id\",\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n+                                \"defaultValue\": \"9092\",\n+                                \"description\": \"The Port where prometheus metrics can be accessed\",\n+                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"prometheus-reporting-task-ssl-context\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"prometheus-reporting-task-ssl-context\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"listing-strategy\": {\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"prometheus\",\n+                            \"record\",\n+                            \"send\",\n+                            \"write\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusRecordSink\",\n+                        \"typeDescription\": \"Specifies a Record Sink Service that exposes data points to a Prometheus scraping service. Numeric fields are exposed as Gauges, String fields are the label values for the gauges, and all other fields are ignored.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"60 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"prometheus-reporting-task-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n+                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"prometheus-reporting-task-instance-id\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n+                                \"defaultValue\": \"9092\",\n+                                \"description\": \"The Port where prometheus metrics can be accessed\",\n+                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"recursive-search\": {\n+                            \"prometheus-reporting-task-metrics-send-jvm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When 'true', will include list of files from sub-folders. Otherwise, will return only files that are within the folder defined by the 'Folder ID' property.\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n+                                \"displayName\": \"Send JVM metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"prometheus-reporting-task-metrics-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Send rollup metrics for the entire root process group\",\n+                                        \"displayName\": \"Root Process Group\",\n+                                        \"value\": \"Root Process Group\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Send metrics for each process group\",\n+                                        \"displayName\": \"All Process Groups\",\n+                                        \"value\": \"All Process Groups\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Send metrics for each component in the system, to include processors, connections, controller services, etc.\",\n+                                        \"displayName\": \"All Components\",\n+                                        \"value\": \"All Components\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"All Components\",\n+                                \"description\": \"The granularity on which to report metrics. Options include only the root process group, all process groups, or all components\",\n+                                \"displayName\": \"Metrics Reporting Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prometheus-reporting-task-metrics-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"prometheus-reporting-task-ssl-context\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prometheus-reporting-task-ssl-context\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.PutBoxFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"storage\"\n+                            \"metrics\",\n+                            \"prometheus\",\n+                            \"reporting\",\n+                            \"time series data\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.ListBoxFile\",\n-                        \"typeDescription\": \"Lists files in a Box folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusReportingTask\",\n+                        \"typeDescription\": \"Reports metrics in Prometheus format by creating a /metrics HTTP(S) endpoint which can be used for external monitoring of the application. The reporting task reports a set of metrics regarding the JVM (optional) and the NiFi instance. Note that if the underlying Jetty server (i.e. the Prometheus endpoint) cannot be started (for example if two PrometheusReportingTask instances are started on the same port), this may cause a delay in shutting down NiFi while it waits for the server resources to be cleaned up.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"20 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"box-folder-id\": {\n-                                \"description\": \"The ID of the folder where the file is uploaded. Please see Additional Details to obtain Folder ID.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"zendesk-authentication-type-name\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Password of Zendesk login user.\",\n+                                        \"displayName\": \"Password\",\n+                                        \"value\": \"password\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n+                                        \"displayName\": \"Token\",\n+                                        \"value\": \"token\"\n+                                    }\n+                                ],\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"box-folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-authentication-type-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Chunked upload is allowed for files larger than 20 MB. It is recommended to use chunked upload for files exceeding 50 MB.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n+                            \"zendesk-authentication-value-name\": {\n+                                \"description\": \"Password or authentication token for Zendesk login user.\",\n+                                \"displayName\": \"Authentication Credential\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"zendesk-export-method\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"In cursor-based incremental exports, each page of results includes an \\\"after\\\" cursor pointer to use as the starting cursor for the next page of results.\",\n+                                        \"displayName\": \"Cursor Based\",\n+                                        \"value\": \"cursor\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"In time-based incremental exports, each page of results includes an end time to use as the start time for the next page of results.\",\n+                                        \"displayName\": \"Time Based\",\n+                                        \"value\": \"time\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Box folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"description\": \"Method for incremental export.\",\n+                                \"displayName\": \"Export Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"zendesk-export-method\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-folder\": {\n+                            \"zendesk-query-start-timestamp\": {\n+                                \"description\": \"Initial timestamp to query Zendesk API from in Unix timestamp seconds format.\",\n+                                \"displayName\": \"Query Start Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-resource\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n+                                        \"displayName\": \"Tickets\",\n+                                        \"value\": \"/api/v2/incremental/tickets\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Stream of changes that occurred on tickets. Each event is tied to an update on a ticket and contains all the fields that were updated in that change.\",\n+                                        \"displayName\": \"Ticket Events\",\n+                                        \"value\": \"/api/v2/incremental/ticket_events\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Subfolder Name\",\n-                                        \"propertyName\": \"subfolder-name\"\n+                                        \"description\": \"Ticket metric events API can be used to track reply times, agent work times, and requester wait times.\",\n+                                        \"displayName\": \"Ticket Metric Events\",\n+                                        \"value\": \"/api/v2/incremental/ticket_metric_events\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Zendesk Support has three types of users: end users (customers), agents, and administrators.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"/api/v2/incremental/users\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Just as agents can be segmented into groups in Zendesk Support, customers (end-users) can be segmented into organizations.\",\n+                                        \"displayName\": \"Organizations\",\n+                                        \"value\": \"/api/v2/incremental/organizations\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Articles are content items such as help topics or tech notes contained in sections.\",\n+                                        \"displayName\": \"Articles\",\n+                                        \"value\": \"/api/v2/help_center/incremental/articles\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When a recipient responds to an NPS survey, their rating, comment, and last survey date are captured.\",\n+                                        \"displayName\": \"NPS - Responses\",\n+                                        \"value\": \"/api/v2/nps/incremental/responses\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Every NPS survey is delivered to one or multiple recipients. For most businesses that use Zendesk Support, the recipients are customers. Agents and admins will never receive surveys.\",\n+                                        \"displayName\": \"NPS - Recipients\",\n+                                        \"value\": \"/api/v2/nps/incremental/recipients\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether to check if the subfolder exists and to automatically create it if it does not. Permission to list folders is required. \",\n-                                \"displayName\": \"Create Subfolder\",\n+                                \"description\": \"The particular Zendesk resource which is meant to be exported.\",\n+                                \"displayName\": \"Resource\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-folder\",\n+                                \"name\": \"zendesk-resource\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to upload to the specified Box folder.\",\n-                                \"displayName\": \"Filename\",\n+                            \"zendesk-subdomain\": {\n+                                \"description\": \"Name of the Zendesk subdomain.\",\n+                                \"displayName\": \"Subdomain Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"zendesk-subdomain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"subfolder-name\": {\n-                                \"description\": \"The name (path) of the subfolder where files are uploaded. The subfolder name is relative to the folder specified by 'Folder ID'. Example: subFolder, subFolder1/subfolder2\",\n-                                \"displayName\": \"Subfolder Name\",\n+                            \"zendesk-user\": {\n+                                \"description\": \"Login user to Zendesk subdomain.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"subfolder-name\",\n-                                \"required\": false,\n+                                \"name\": \"zendesk-user\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Box object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.ListBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Paging cursor for Zendesk API is stored. Cursor is updated after each successful request.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Box are transferred to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to Box for some reason are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"zendesk\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.PutBoxFile\",\n-                        \"typeDescription\": \"Puts content to a Box folder.\",\n+                        \"type\": \"org.apache.nifi.processors.zendesk.GetZendesk\",\n+                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The number of records fetched by the processor.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-aws-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-zendesk-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-services-nar\",\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional property to be added to the Zendesk request object.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The path in the request object to add. The value needs be a valid JsonPointer.\",\n+                                \"value\": \"The path in the incoming record to get the value from.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cache-expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Zendesk ticket that is cached should remain in the cache.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Zendesk ticket should be cached.\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"web-client-service-provider\": {\n                                 \"description\": \"Controller service for HTTP client operations.\",\n                                 \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"web-client-service-provider\",\n@@ -1341,54 +1208,94 @@\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-authentication-value-name\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n                             \"zendesk-comment-body\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\n                                 \"description\": \"The content or the path to the comment body in the incoming record.\",\n                                 \"displayName\": \"Comment Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-comment-body\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"zendesk-priority\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\n                                 \"description\": \"The content or the path to the priority in the incoming record.\",\n                                 \"displayName\": \"Priority\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-priority\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n+                            \"zendesk-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n                             \"zendesk-subdomain\": {\n                                 \"description\": \"Name of the Zendesk subdomain.\",\n                                 \"displayName\": \"Subdomain Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-subdomain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"zendesk-subject\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\n                                 \"description\": \"The content or the path to the subject in the incoming record.\",\n                                 \"displayName\": \"Subject\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-subject\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"zendesk-type\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\n                                 \"description\": \"The content or the path to the type in the incoming record.\",\n                                 \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-type\",\n                                 \"required\": false,\n@@ -1401,52 +1308,74 @@\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the operation failed and retrying the operation will also fail, such as an invalid data or schema.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"record\",\n-                            \"sink\",\n-                            \"zendesk\"\n+                            \"zendesk, ticket\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.zendesk.ZendeskRecordSink\",\n-                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.The service requires a Zendesk account with configured access.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.zendesk.PutZendeskTicket\",\n+                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of records processed.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error code of from the response.\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message of from the response.\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n                     }\n                 ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-groovyx-nar\",\n+            \"artifact\": \"nifi-language-translation-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-groovyx-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-language-translation-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -1456,387 +1385,438 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value. Use `CTL.` to access any controller services, `SQL.` to access any DBCPServices, `RecordReader.` to access RecordReaderFactory instances, or `RecordWriter.` to access any RecordSetWriterFactory instances.\",\n+                                \"description\": \"User-defined properties are used to translate arbitrary text based on attributes.\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A script engine property to update\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"name\": \"The name of an attribute to set that will contain the translated text of the value\",\n+                                \"value\": \"The value to translate\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"groovyx-additional-classpath\": {\n-                                \"description\": \"Classpath list separated by semicolon or comma. You can use masks like `*`, `*.jar` in file name.\",\n-                                \"displayName\": \"Additional classpath\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the data to be translated\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"groovyx-additional-classpath\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Input Language\": {\n+                                \"description\": \"The language of incoming data. If no language is set, Yandex will attempt to detect the incoming language automatically.\",\n+                                \"displayName\": \"Input Language\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Input Language\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"groovyx-failure-strategy\": {\n+                            \"Target Language\": {\n+                                \"defaultValue\": \"en\",\n+                                \"description\": \"The language to translate the text into\",\n+                                \"displayName\": \"Target Language\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Target Language\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Translate Content\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"rollback\",\n-                                        \"value\": \"rollback\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"transfer to failure\",\n-                                        \"value\": \"transfer to failure\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"rollback\",\n-                                \"description\": \"What to do with unhandled exceptions. If you want to manage exception by code then keep the default value `rollback`. If `transfer to failure` selected and unhandled exception occurred then all flowFiles received from incoming queues in this session will be transferred to `failure` relationship with additional attributes set: ERROR_MESSAGE and ERROR_STACKTRACE. If `rollback` selected and unhandled exception occurred then all flowFiles received from incoming queues will be penalized and returned. If the processor has no incoming connections then this parameter has no effect.\",\n-                                \"displayName\": \"Failure strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the content should be translated. If false, only the text specified by user-defined properties will be translated.\",\n+                                \"displayName\": \"Translate Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"groovyx-failure-strategy\",\n+                                \"name\": \"Translate Content\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"groovyx-script-body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Yandex API Key\": {\n+                                \"description\": \"The API Key that is registered with Yandex\",\n+                                \"displayName\": \"Yandex API Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"groovyx-script-body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"groovyx-script-file\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"groovyx-script-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Yandex API Key\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that were successfully processed\",\n+                                \"description\": \"This relationship is used if the translation cannot be performed for some reason other than communications failure\",\n+                                \"name\": \"translation.failure\"\n+                            },\n+                            {\n+                                \"description\": \"This relationship is used when the translation is successful\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to be processed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"This relationship is used when the translation fails due to a problem such as a network failure, and for which the translation should be attempted again\",\n+                                \"name\": \"comms.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"groovyx\",\n-                            \"script\"\n+                            \"language\",\n+                            \"translate\",\n+                            \"translation\",\n+                            \"yandex\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.groovyx.ExecuteGroovyScript\",\n-                        \"typeDescription\": \"Experimental Extended Groovy script processor. The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back.\",\n+                        \"type\": \"org.apache.nifi.processors.yandex.YandexTranslate\",\n+                        \"typeDescription\": \"Translates content and attributes from one language to another\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the text cannot be translated, this attribute will be set indicating the reason for the failure\",\n+                                \"name\": \"yandex.translate.failure.reason\"\n+                            },\n+                            {\n+                                \"description\": \"When the translation succeeds, if the content was translated, this attribute will be set indicating the new language of the content\",\n+                                \"name\": \"language\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-jms-cf-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jms-processors-nar\",\n+            \"artifact\": \"nifi-hashicorp-vault-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The properties that are set following Java Beans convention where a property name is derived from the 'set*' method of the vendor specific ConnectionFactory's implementation. For example, 'com.ibm.mq.jms.MQConnectionFactory.setChannel(String)' would imply 'channel' property and 'com.ibm.mq.jms.MQConnectionFactory.setTransportType(int)' would imply 'transportType' property.\",\n+                                \"description\": \"Allows any Spring Vault property keys to be specified, as described in (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). See Additional Details for more information.\",\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"name\": \"A Spring Vault configuration property name\",\n+                                \"value\": \"The property value\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"configuration-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use properties, including dynamic properties, configured directly in the Controller Service to configure the client\",\n+                                        \"displayName\": \"Direct Properties\",\n+                                        \"value\": \"direct-properties\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n+                                        \"displayName\": \"Properties Files\",\n+                                        \"value\": \"properties-files\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"direct-properties\",\n+                                \"description\": \"Specifies the source of the configuration properties.\",\n+                                \"displayName\": \"Configuration Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"configuration-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n+                            \"vault.authentication\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOKEN\",\n+                                        \"value\": \"TOKEN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"APPID\",\n+                                        \"value\": \"APPID\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"APPROLE\",\n+                                        \"value\": \"APPROLE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AWS_EC2\",\n+                                        \"value\": \"AWS_EC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AZURE\",\n+                                        \"value\": \"AZURE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CERT\",\n+                                        \"value\": \"CERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CUBBYHOLE\",\n+                                        \"value\": \"CUBBYHOLE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KUBERNETES\",\n+                                        \"value\": \"KUBERNETES\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"TOKEN\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n+                                \"displayName\": \"Vault Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.authentication\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                            \"vault.connection.timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The connection timeout for the HashiCorp Vault client\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cf\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n+                            \"vault.properties.files\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"properties-files\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of files containing HashiCorp Vault configuration properties, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). All of the Spring property keys and authentication-specific property keys are supported.\",\n+                                \"displayName\": \"Vault Properties Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.properties.files\",\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n+                            },\n+                            \"vault.read.timeout\": {\n+                                \"defaultValue\": \"15 sec\",\n+                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.read.timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"vault.ssl.context.service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections to the HashiCorp Vault server.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"vault.uri\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The URI of the HashiCorp Vault server (e.g., http://localhost:8200).  Required if not specified in the Bootstrap HashiCorp Vault Configuration File.\",\n+                                \"displayName\": \"Vault URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"vault.uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"client\",\n+                            \"hashicorp\",\n+                            \"vault\"\n                         ],\n-                        \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                        \"typeDescription\": \"Provides a generic service to create vendor specific javax.jms.ConnectionFactory implementations. The Connection Factory can be served once this service is configured successfully.\",\n+                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n+                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"In order to perform a JNDI Lookup, an Initial Context must be established. When this is done, an Environment can be established for the context. Any dynamic/user-defined property that is added to this Controller Service will be added as an Environment configuration/variable to this Context.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a JNDI Initial Context environment variable.\",\n-                                \"value\": \"The value of the JNDI Initial Context environment variable.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.factory.name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                            \"kv-path\": {\n+                                \"defaultValue\": \"kv\",\n+                                \"description\": \"The HashiCorp Vault path to the Key/Value Version 1 Secrets Engine\",\n+                                \"displayName\": \"Key/Value Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.factory.initial\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kv-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n+                            \"secret-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression indicating which Secrets to include as parameter groups to map to Parameter Contexts by name.\",\n+                                \"displayName\": \"Secret Name Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.provider.url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-name-pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n+                            \"vault-client-service\": {\n+                                \"description\": \"The service used to interact with HashiCorp Vault\",\n+                                \"displayName\": \"HashiCorp Vault Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"naming.factory.libraries\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"name\": \"vault-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"jndi\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"hashicorp\",\n+                            \"secret\",\n+                            \"vault\"\n                         ],\n-                        \"type\": \"org.apache.nifi.jms.cf.JndiJmsConnectionFactoryProvider\",\n-                        \"typeDescription\": \"Provides a service to lookup an existing JMS ConnectionFactory using the Java Naming and Directory Interface (JNDI).\",\n+                        \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultParameterProvider\",\n+                        \"typeDescription\": \"Provides parameters from HashiCorp Vault Key/Value Version 1 Secrets.  Each Secret represents a parameter group, which will map to a Parameter Context.  The keys and values in the Secret map to Parameters.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -1844,525 +1824,233 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Acknowledgement Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically acknowledges a client's receipt of a message, regardless if NiFi session has been commited. Can result in data loss in the event where NiFi abruptly stopped before session was commited.\",\n-                                        \"displayName\": \"AUTO_ACKNOWLEDGE (1)\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"(DEFAULT) Manually acknowledges a client's receipt of a message after NiFi Session was commited, thus ensuring no data loss\",\n-                                        \"displayName\": \"CLIENT_ACKNOWLEDGE (2)\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages. May result in both data duplication and data loss while achieving the best throughput.\",\n-                                        \"displayName\": \"DUPS_OK_ACKNOWLEDGE (3)\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n-                                \"displayName\": \"Acknowledgement Mode\",\n+                            \"websocket-client-controller-service\": {\n+                                \"description\": \"A WebSocket CLIENT Controller Service which can connect to a WebSocket server.\",\n+                                \"displayName\": \"WebSocket Client ControllerService\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n+                                \"name\": \"websocket-client-controller-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Client ID\": {\n-                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n-                                \"displayName\": \"Connection Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Connection Client ID\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Factory Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n-                                \"displayName\": \"Connection Factory Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n-                                \"displayName\": \"Destination Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"QUEUE\",\n-                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n-                                \"displayName\": \"Destination Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Durable subscription\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer durable. @see https://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createDurableConsumer-jakarta.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Durable Subscription\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Durable subscription\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Error Queue Name\": {\n-                                \"description\": \"The name of a JMS Queue where - if set - unprocessed messages will be routed. Usually provided by the administrator (e.g., 'queue://myErrorQueue' or 'myErrorQueue').Only applicable if 'Destination Type' is set to 'QUEUE'\",\n-                                \"displayName\": \"Error Queue Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Error Queue Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Selector\": {\n-                                \"description\": \"The JMS Message Selector to filter the messages that the processor will receive\",\n-                                \"displayName\": \"Message Selector\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Selector\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"websocket-client-id\": {\n+                                \"description\": \"The client ID to identify WebSocket session. It should be unique within the WebSocket Client Controller Service. Otherwise, it throws WebSocketConfigurationException when it gets started.\",\n+                                \"displayName\": \"WebSocket Client Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Shared subscription\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createSharedConsumer-jakarta.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Shared Subscription\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Shared subscription\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Subscription Name\": {\n-                                \"description\": \"The name of the subscription to use if destination is Topic and is shared or durable.\",\n-                                \"displayName\": \"Subscription Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Subscription Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"1 sec\",\n-                                \"description\": \"How long to wait to consume a message from the remote broker before giving up.\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"websocket-client-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n+                                \"name\": \"success\"\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cf\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\n                             },\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.factory.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.factory.initial\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.websocket.ConnectWebSocket\",\n+                        \"typeDescription\": \"Acts as a WebSocket client endpoint to interact with a remote WebSocket server. FlowFiles are transferred to downstream relationships according to received message types as WebSocket client configured with this processor receives messages from remote WebSocket server. If a new flowfile is passed to the processor, the previous sessions will be closed and any data being sent will be aborted.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n                             },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.provider.url\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n                             },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n                             },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.local.address\"\n                             },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"naming.factory.libraries\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.remote.address\"\n                             },\n-                            \"output-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Write only the message to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write the additional attributes into the FlowFile record on a separate leaf. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write the additional attributes into the FlowFile record prefixed with \\\"_\\\". (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Appender\",\n-                                        \"value\": \"USE_APPENDER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The format used to output the JMS message into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                            {\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"server-url-path\": {\n+                                \"description\": \"The WetSocket URL Path on which this processor listens to. Must starts with '/', e.g. '/example'.\",\n+                                \"displayName\": \"Server URL Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n+                                \"name\": \"server-url-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing received JMS Messages into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"websocket-server-controller-service\": {\n+                                \"description\": \"A WebSocket SERVER Controller Service which can accept WebSocket requests.\",\n+                                \"displayName\": \"WebSocket Server ControllerService\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"websocket-server-controller-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\n                             },\n                             {\n-                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n+                            \"WebSocket\",\n                             \"consume\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"message\",\n-                            \"receive\"\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                        \"typeDescription\": \"Consumes JMS Message of type BytesMessage, TextMessage, ObjectMessage, MapMessage or StreamMessage transforming its content to a FlowFile and transitioning it to 'success' relationship. JMS attributes such as headers and properties will be copied as FlowFile attributes. MapMessages will be transformed into JSONs and then into byte arrays. The other types will have their raw contents as byte array transferred into the flowfile.\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.ListenWebSocket\",\n+                        \"typeDescription\": \"Acts as a WebSocket server endpoint to accept client connections. FlowFiles are transferred to downstream relationships according to received message types as the WebSocket server configured with this processor receives client requests\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The JMSDeliveryMode from the message header.\",\n-                                \"name\": \"jms_deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSExpiration from the message header.\",\n-                                \"name\": \"jms_expiration\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSPriority from the message header.\",\n-                                \"name\": \"jms_priority\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSRedelivered from the message header.\",\n-                                \"name\": \"jms_redelivered\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSTimestamp from the message header.\",\n-                                \"name\": \"jms_timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSCorrelationID from the message header.\",\n-                                \"name\": \"jms_correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"The JMSMessageID from the message header.\",\n-                                \"name\": \"jms_messageId\"\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n                             },\n                             {\n-                                \"description\": \"The JMSType from the message header.\",\n-                                \"name\": \"jms_type\"\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n                             },\n                             {\n-                                \"description\": \"The JMSReplyTo from the message header.\",\n-                                \"name\": \"jms_replyTo\"\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n                             },\n                             {\n-                                \"description\": \"The JMSDestination from the message header.\",\n-                                \"name\": \"jms_destination\"\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.local.address\"\n                             },\n                             {\n-                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n-                                \"name\": \"jms.messagetype\"\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.remote.address\"\n                             },\n                             {\n-                                \"description\": \"Each message property is written to an attribute.\",\n-                                \"name\": \"other attributes\"\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -2370,1001 +2058,3370 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Connection Factory configuration property.\",\n-                                \"value\": \"The value of a given Connection Factory configuration property.\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Client ID\": {\n-                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n-                                \"displayName\": \"Connection Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Connection Client ID\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Factory Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n-                                \"displayName\": \"Connection Factory Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Destination Name\": {\n-                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n-                                \"displayName\": \"Destination Name\",\n+                            \"websocket-controller-service-id\": {\n+                                \"defaultValue\": \"${websocket.controller.service.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the id of a WebSocket ControllerService.\",\n+                                \"displayName\": \"WebSocket ControllerService Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"QUEUE\",\n-                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n-                                \"displayName\": \"Destination Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"allow-illegal-chars-in-jms-header-names\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n-                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n+                                \"name\": \"websocket-controller-service-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-send-as-jms-headers-regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as JMS Headers\",\n-                                \"displayName\": \"Attributes to Send as JMS Headers (Regex)\",\n+                            \"websocket-endpoint-id\": {\n+                                \"defaultValue\": \"${websocket.endpoint.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the endpoint id of a WebSocket ControllerService.\",\n+                                \"displayName\": \"WebSocket Endpoint Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"websocket-endpoint-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"broker\": {\n-                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n-                                \"displayName\": \"JMS Broker URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cf\": {\n-                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n-                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cf\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cflib\": {\n-                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n-                                \"displayName\": \"JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cflib\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"websocket-message-type\": {\n+                                \"defaultValue\": \"TEXT\",\n+                                \"description\": \"The type of message content: TEXT or BINARY\",\n+                                \"displayName\": \"WebSocket Message Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                                \"name\": \"websocket-message-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection.factory.name\": {\n-                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n-                                \"displayName\": \"JNDI Name of the Connection Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.factory.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.factory.initial\": {\n-                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n-                                \"displayName\": \"JNDI Initial Context Factory Class\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.factory.initial\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.provider.url\": {\n-                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n-                                \"displayName\": \"JNDI Provider URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.provider.url\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"java.naming.security.credentials\": {\n-                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n-                                \"displayName\": \"JNDI Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-body-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bytes\",\n-                                        \"value\": \"bytes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"bytes\",\n-                                \"description\": \"The type of JMS message body to construct.\",\n-                                \"displayName\": \"Message Body Type\",\n+                            \"websocket-session-id\": {\n+                                \"defaultValue\": \"${websocket.session.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n+                                \"displayName\": \"WebSocket Session Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-body-type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"websocket-session-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"naming.factory.libraries\": {\n-                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n-                                \"displayName\": \"JNDI / JMS Client Libraries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"naming.factory.libraries\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n-                                \"name\": \"jms_deliveryMode\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be a long.\",\n-                                \"name\": \"jms_expiration\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSPriority message header. Must be an integer.\",\n-                                \"name\": \"jms_priority\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSRedelivered message header.\",\n-                                \"name\": \"jms_redelivered\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSTimestamp message header. Must be a long.\",\n-                                \"name\": \"jms_timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSCorrelationID message header.\",\n-                                \"name\": \"jms_correlationId\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSType message header. Must be an integer.\",\n-                                \"name\": \"jms_type\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSReplyTo message header. Must be an integer.\",\n-                                \"name\": \"jms_replyTo\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute becomes the JMSDestination message header. Must be an integer.\",\n-                                \"name\": \"jms_destination\"\n-                            },\n-                            {\n-                                \"description\": \"All other attributes that do not start with jms_ are added as message properties.\",\n-                                \"name\": \"other attributes\"\n-                            },\n-                            {\n-                                \"description\": \"When an attribute will be added as a message property, a second attribute of the same name but with an extra `.type` at the end will cause the message property to be sent using that strong type. For example, attribute `delay` with value `12000` and another attribute `delay.type` with value `integer` will cause a JMS message property `delay` to be sent as an Integer rather than a String. Supported types are boolean, byte, short, integer, long, float, double, and string (which is the default).\",\n-                                \"name\": \"other attributes .type\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be sent to JMS destination are routed to this relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n                                 \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"jms\",\n-                            \"message\",\n+                            \"WebSocket\",\n                             \"publish\",\n-                            \"put\",\n                             \"send\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.jms.processors.PublishJMS\",\n-                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends it to a JMS Destination (queue or topic) as JMS BytesMessage or TextMessage. FlowFile attributes will be added as JMS headers and/or properties to the outgoing JMS message.\",\n+                        \"type\": \"org.apache.nifi.processors.websocket.PutWebSocket\",\n+                        \"typeDescription\": \"Sends messages to a WebSocket remote endpoint using a WebSocket session that is established by either ListenWebSocket or ConnectWebSocket.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n+                            },\n+                            {\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n+                            },\n+                            {\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.local.address\"\n+                            },\n+                            {\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.remote.address\"\n+                            },\n+                            {\n+                                \"description\": \"Detail of the failure.\",\n+                                \"name\": \"websocket.failure.detail\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-record-serialization-services-nar\",\n+            \"artifact\": \"nifi-dropbox-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-lookup-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n                                     },\n                                     {\n-                                        \"description\": \"The FlowFile has the Avro Schema embedded within the content, and this schema will be used.\",\n-                                        \"displayName\": \"Use Embedded Avro Schema\",\n-                                        \"value\": \"embedded-avro-schema\"\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"embedded-avro-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Comment Marker\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"name\": \"Comment Marker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n+                            \"Quote Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MINIMAL\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Quote Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-text-property\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Trim Fields\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"csv-file\": {\n+                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n+                                \"displayName\": \"CSV File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"csv-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"ignore-duplicates\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n+                                \"displayName\": \"Ignore Duplicates\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ignore-duplicates\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"lookup-key-column\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"comma\",\n-                            \"delimited\",\n-                            \"parse\",\n-                            \"reader\",\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n                             \"record\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"values\"\n+                            \"reloadable\",\n+                            \"value\"\n                         ],\n-                        \"type\": \"org.apache.nifi.avro.AvroReader\",\n-                        \"typeDescription\": \"Parses Avro data and returns each Avro record as an separate Record object. The Avro data may contain the schema itself, or the schema can be externalized and accessed by one of the methods offered by the 'Schema Access Strategy' property.\",\n+                        \"type\": \"org.apache.nifi.lookup.CSVRecordLookupService\",\n+                        \"typeDescription\": \"A reloadable CSV file-based lookup service. When the lookup key is found in the CSV file, the columns are returned as a Record. All returned fields will be strings. The first line of the csv file is considered as header.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Schema Reference Writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-writer\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n-                                \"displayName\": \"Schema Reference Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Reference Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceWriter\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Schema Write Strategy\": {\n+                            \"character-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The FlowFile will have the Avro schema embedded into the content, as is typical with Avro\",\n-                                        \"displayName\": \"Embed Avro Schema\",\n-                                        \"value\": \"avro-embedded\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n-                                        \"displayName\": \"Do Not Write Schema\",\n-                                        \"value\": \"no-schema\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n-                                        \"displayName\": \"Set 'schema.name' Attribute\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n-                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n-                                        \"value\": \"full-schema-attribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n-                                        \"displayName\": \"Schema Reference Writer\",\n-                                        \"value\": \"schema-reference-writer\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"avro-embedded\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression-format\": {\n-                                \"allowableValues\": [\n-                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies a character encoding to use.\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"encoder-pool-size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"Avro Writers require the use of an Encoder. Creation of Encoders is expensive, but once created, they can be reused. This property controls the maximum number of Encoders that can be pooled and reused. Setting this value too small can result in degraded performance, but setting it higher can result in more heap being used. This property is ignored if the Avro Writer is configured with a Schema Write Strategy of 'Embed Avro Schema'.\",\n-                                \"displayName\": \"Encoder Pool Size\",\n+                            \"distributed-map-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-map-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"map\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.DistributedMapCacheLookupService\",\n+                        \"typeDescription\": \"Allows to choose a distributed map cache client to retrieve the value associated to a key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"configuration-file\": {\n+                                \"description\": \"A configuration file\",\n+                                \"displayName\": \"Configuration File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"encoder-pool-size\",\n+                                \"name\": \"configuration-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n-                            \"schema-access-strategy\": {\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"properties\",\n+                            \"reloadable\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.PropertiesFileLookupService\",\n+                        \"typeDescription\": \"A reloadable properties file-based lookup service\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"All dynamic properties are added as HTTP headers with the name as the header name and the value as the header value.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"*\",\n+                                \"value\": \"*\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"rest-lookup-authentication-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n-                                        \"displayName\": \"Inherit Record Schema\",\n-                                        \"value\": \"inherit-record-schema\"\n+                                        \"description\": \"No Authentication\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n+                                        \"description\": \"Basic Authentication\",\n+                                        \"displayName\": \"Basic\",\n+                                        \"value\": \"BASIC\"\n                                     },\n                                     {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"OAuth2 Authentication\",\n+                                        \"displayName\": \"OAuth2\",\n+                                        \"value\": \"OAUTH2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"inherit-record-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Authentication strategy to use with REST service.\",\n+                                \"displayName\": \"Authentication Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"rest-lookup-authentication-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n+                            \"rest-lookup-basic-auth-password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"BASIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                                \"description\": \"The password to be used by the client to authenticate against the Remote URL.\",\n+                                \"displayName\": \"Basic Authentication Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"rest-lookup-basic-auth-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"rest-lookup-basic-auth-username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The username to be used by the client to authenticate against the Remote URL.  Cannot include control characters (0-31), ':', or DEL (127).\",\n+                                \"displayName\": \"Basic Authentication Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"rest-lookup-basic-auth-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-cache\": {\n-                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n-                                \"displayName\": \"Schema Cache\",\n+                            \"rest-lookup-connection-timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for connection to remote service.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"rest-lookup-connection-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"rest-lookup-digest-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"BASIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                                \"description\": \"Whether to communicate with the website using Digest Authentication. 'Basic Authentication Username' and 'Basic Authentication Password' are used for authentication.\",\n+                                \"displayName\": \"Use Digest Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rest-lookup-digest-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n+                            \"rest-lookup-oauth2-access-token-provider\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n+                                            \"OAUTH2\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n+                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-reader\",\n+                                \"name\": \"rest-lookup-oauth2-access-token-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"rest-lookup-read-timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for response from remote service.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"rest-lookup-read-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"rest-lookup-record-path\": {\n+                                \"description\": \"An optional record path that can be used to define where in a record to get the real data to merge into the record set to be enriched. See documentation for examples of when this might be useful.\",\n+                                \"displayName\": \"Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"rest-lookup-record-path\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"rest-lookup-record-reader\": {\n+                                \"description\": \"The record reader to use for loading the payload and handling it as a record set.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rest-lookup-record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                            \"rest-lookup-response-handling-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"Successful and unsuccessful HTTP responses are returned.\",\n+                                        \"displayName\": \"Returned\",\n+                                        \"value\": \"RETURNED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Successful HTTP responses are returned and unsuccessful HTTP responses generate an exception.\",\n+                                        \"displayName\": \"Evaluated\",\n+                                        \"value\": \"EVALUATED\"\n                                     }\n                                 ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                                \"defaultValue\": \"RETURNED\",\n+                                \"description\": \"Whether to return all responses or throw errors for unsuccessful HTTP status codes.\",\n+                                \"displayName\": \"Response Handling Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rest-lookup-response-handling-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"rest-lookup-ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rest-lookup-ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"rest-lookup-url\": {\n+                                \"description\": \"The URL for the REST endpoint. Expression language is evaluated against the lookup key/value pairs, not flowfile attributes.\",\n+                                \"displayName\": \"URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"rest-lookup-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n+                            \"http\",\n+                            \"json\",\n+                            \"lookup\",\n+                            \"rest\",\n+                            \"xml\"\n                         ],\n-                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n+                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n+                        \"typeDescription\": \"Use a REST service to look up values.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"accept-empty-extensions\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n+                                        \"displayName\": \"Custom Format\",\n+                                        \"value\": \"custom\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CSV Format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Comment Marker\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n+                                \"displayName\": \"Comment Marker\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n+                                \"displayName\": \"Escape Character\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n+                                \"displayName\": \"Quote Character\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Quote Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n+                                        \"displayName\": \"Quote Minimal\",\n+                                        \"value\": \"MINIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will be quoted unless the value is a number.\",\n+                                        \"displayName\": \"Quote Non-Numeric Values\",\n+                                        \"value\": \"NON_NUMERIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n+                                        \"displayName\": \"Do Not Quote Values\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MINIMAL\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how fields should be quoted when they are written\",\n+                                \"displayName\": \"Quote Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Quote Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Trim Fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n+                                \"displayName\": \"Trim Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Trim Fields\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n+                                \"displayName\": \"Value Separator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"csv-file\": {\n+                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n+                                \"displayName\": \"CSV File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"csv-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"ignore-duplicates\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n+                                \"displayName\": \"Ignore Duplicates\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ignore-duplicates\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"lookup-key-column\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-value-column\": {\n+                                \"description\": \"Lookup value column.\",\n+                                \"displayName\": \"Lookup Value Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"lookup-value-column\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"reloadable\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.SimpleCsvFileLookupService\",\n+                        \"typeDescription\": \"A reloadable CSV file-based lookup service. The first line of the csv file is considered as header.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"A key that can be looked up\",\n+                                \"value\": \"The value for the key\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n+                        \"typeDescription\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"configuration-file\": {\n+                                \"description\": \"A configuration file\",\n+                                \"displayName\": \"Configuration File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"configuration-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"reloadable\",\n+                            \"value\",\n+                            \"xml\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.XMLFileLookupService\",\n+                        \"typeDescription\": \"A reloadable XML file-based lookup service. This service uses Apache Commons Configuration. Example XML configuration file and how to access specific configuration can be found at http://commons.apache.org/proper/commons-configuration/userguide/howto_hierarchical.html. External entity processing is disabled.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Cache Expiration\": {\n+                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n+                                \"displayName\": \"Cache Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n+                                \"displayName\": \"Clear Cache on Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"dbrecord-lookup-key-column\": {\n+                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbrecord-lookup-key-column\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-table-name\": {\n+                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-value-columns\": {\n+                                \"description\": \"A comma-delimited list of columns in the table that will be returned when the lookup key matches. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Value Columns\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-value-columns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"database\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"rdbms\",\n+                            \"record\",\n+                            \"reloadable\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n+                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified columns (or all if Lookup Value Columns are not specified) are returned as a Record. Only one row will be returned for each lookup, duplicate database entries are ignored.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Cache Expiration\": {\n+                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n+                                \"displayName\": \"Cache Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n+                                \"displayName\": \"Clear Cache on Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"dbrecord-lookup-key-column\": {\n+                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbrecord-lookup-key-column\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbrecord-lookup-table-name\": {\n+                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-value-column\": {\n+                                \"description\": \"The column whose value will be returned when the Lookup value is matched\",\n+                                \"displayName\": \"Lookup Value Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"lookup-value-column\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"database\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"rdbms\",\n+                            \"reloadable\",\n+                            \"value\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.db.SimpleDatabaseLookupService\",\n+                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified lookup value column is returned. Only one value will be returned for each lookup, duplicate database entries are ignored.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"database-file\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"database-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-anonymous-ip\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about whether or not the IP address belongs to an anonymous network should be returned.\",\n+                                \"displayName\": \"Lookup Anonymous IP Information\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-anonymous-ip\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-city\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not information about the geographic information, such as cities, corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup Geo Enrichment\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-city\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-connection-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Connection Type corresponding to the IP address should be returned. If true, the lookup will contain a 'connectionType' field that (if populated) will contain a value of 'Dialup', 'Cable/DSL', 'Corporate', or 'Cellular'\",\n+                                \"displayName\": \"Lookup Connection Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-connection-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-domain\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Domain Name corresponding to the IP address should be returned. If true, the lookup will contain second-level domain information, such as foo.com but will not contain bar.foo.com\",\n+                                \"displayName\": \"Lookup Domain Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-domain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-isp\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup ISP\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-isp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"anonymous\",\n+                            \"cellular\",\n+                            \"domain\",\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"ipgeo\",\n+                            \"isp\",\n+                            \"lookup\",\n+                            \"maxmind\",\n+                            \"tor\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n+                        \"typeDescription\": \"A lookup service that provides several types of enrichment information for IP addresses. The service is configured by providing a MaxMind Database file and specifying which types of enrichment should be provided for an IP Address or Hostname. Each type of enrichment is a separate lookup, so configuring the service to provide all of the available enrichment data may be slower than returning only a portion of the available enrichments. In order to use this service, a lookup must be performed using key of 'ip' and a value that is a valid IP address or hostname. View the Usage of this component and choose to view Additional Details for more information, such as the Schema that pertains to the information that is returned.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-poi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-poi-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Date Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n+                                \"displayName\": \"Date Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PASSWORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protection Type\",\n+                                        \"propertyName\": \"Protection Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The password for a password protected Excel spreadsheet\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Protection Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n+                                        \"displayName\": \"Unprotected\",\n+                                        \"value\": \"UNPROTECTED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet protected by a password\",\n+                                        \"displayName\": \"Password Protected\",\n+                                        \"value\": \"PASSWORD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNPROTECTED\",\n+                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n+                                \"displayName\": \"Protection Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protection Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Required Sheets\": {\n+                                \"description\": \"Comma-separated list of Excel document sheet names whose rows should be extracted from the excel document. If this property is left blank then all the rows from all the sheets will be extracted from the Excel document. The list of names is case sensitive. Any sheets not specified in this value will be ignored. An exception will be thrown if a specified sheet(s) are not found.\",\n+                                \"displayName\": \"Required Sheets\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Required Sheets\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Starting Row\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The row number of the first row to start processing (One based). Use this to skip over rows of data at the top of a worksheet that are not part of the dataset.\",\n+                                \"displayName\": \"Starting Row\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Starting Row\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Time Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timestamp Format\": {\n+                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n+                                        \"displayName\": \"Infer Schema\",\n+                                        \"value\": \"infer-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cell\",\n+                            \"excel\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"spreadsheet\",\n+                            \"values\",\n+                            \"xlsx\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.excel.ExcelReader\",\n+                        \"typeDescription\": \"Parses a Microsoft Excel document returning each row in each sheet as a separate record. This reader allows for inferring a schema from all the required sheets or providing an explicit schema for interpreting the values.See Controller Service's Usage for further documentation. This reader is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-poi-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PASSWORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protection Type\",\n+                                        \"propertyName\": \"Protection Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The password for a password protected Excel spreadsheet\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Protection Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n+                                        \"displayName\": \"Unprotected\",\n+                                        \"value\": \"UNPROTECTED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet protected by a password\",\n+                                        \"displayName\": \"Password Protected\",\n+                                        \"value\": \"PASSWORD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNPROTECTED\",\n+                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n+                                \"displayName\": \"Protection Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protection Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The individual Excel 'segments' of the original Excel FlowFile will be routed to this relationship.\",\n+                                \"name\": \"split\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"split\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.excel.SplitExcel\",\n+                        \"typeDescription\": \"Splits a multi sheet Microsoft Excel spreadsheet into multiple Microsoft Excel spreadsheets where each sheet from the original file is converted to an individual spreadsheet in its own flow file.  This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split Excel FlowFiles produced from the same parent Excel FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split Excel FlowFiles that were created from a single parent Excel FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split Excel FlowFiles generated from the parent Excel FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent Excel FlowFile\",\n+                                \"name\": \"segment.original.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Excel sheet from the original spreadsheet.\",\n+                                \"name\": \"sheetname\"\n+                            },\n+                            {\n+                                \"description\": \"The number of rows in the Excel sheet from the original spreadsheet.\",\n+                                \"name\": \"total.rows\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jolt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jolt-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Custom Module Directory\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\n+                                        \"propertyName\": \"Jolt Transform\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n+                                \"displayName\": \"Custom Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Custom Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Custom Transformation Class Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\n+                                        \"propertyName\": \"Jolt Transform\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n+                                \"displayName\": \"Custom Transformation Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Custom Transformation Class Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Jolt Specification\": {\n+                                \"description\": \"Jolt Specification for transformation of JSON data. The value for this property may be the text of a Jolt specification or the path to a file containing a Jolt specification. 'Jolt Specification' must be set, or the value is ignored if the Jolt Sort Transformation is selected.\",\n+                                \"displayName\": \"Jolt Specification\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Jolt Specification\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Jolt Transform\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Apply default values to the output JSON.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Remove values from input data to create the output JSON.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"jolt-transform-remove\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n+                                        \"displayName\": \"Sort\",\n+                                        \"value\": \"jolt-transform-sort\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n+                                        \"displayName\": \"Custom\",\n+                                        \"value\": \"jolt-transform-custom\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transform\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Jolt Transform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Pretty Print\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Apply pretty print formatting to the output of the Jolt transform\",\n+                                \"displayName\": \"Pretty Print\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pretty Print\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transform Cache Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transform Cache Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cardinality\",\n+                            \"chainr\",\n+                            \"defaultr\",\n+                            \"jolt\",\n+                            \"json\",\n+                            \"removr\",\n+                            \"shiftr\",\n+                            \"sort\",\n+                            \"transform\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.jolt.JoltTransformJSON\",\n+                        \"typeDescription\": \"Applies a list of Jolt specifications to the flowfile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSON transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Always set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-jolt-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Custom Module Directory\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\n+                                        \"propertyName\": \"Jolt Transform\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n+                                \"displayName\": \"Custom Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Custom Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Custom Transformation Class Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\n+                                        \"propertyName\": \"Jolt Transform\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n+                                \"displayName\": \"Custom Transformation Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Custom Transformation Class Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Jolt Specification\": {\n+                                \"description\": \"Jolt Specification for transformation of JSON data. The value for this property may be the text of a Jolt specification or the path to a file containing a Jolt specification. 'Jolt Specification' must be set, or the value is ignored if the Jolt Sort Transformation is selected.\",\n+                                \"displayName\": \"Jolt Specification\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Jolt Specification\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Jolt Transform\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Apply default values to the output JSON.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Remove values from input data to create the output JSON.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"jolt-transform-remove\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n+                                        \"displayName\": \"Sort\",\n+                                        \"value\": \"jolt-transform-sort\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n+                                        \"displayName\": \"Custom\",\n+                                        \"value\": \"jolt-transform-custom\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transform\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Jolt Transform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transform Cache Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transform Cache Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"jolt-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-record-record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"jolt-record-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-record-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cardinality\",\n+                            \"chainr\",\n+                            \"defaultr\",\n+                            \"jolt\",\n+                            \"record\",\n+                            \"removr\",\n+                            \"shiftr\",\n+                            \"sort\",\n+                            \"transform\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.jolt.JoltTransformRecord\",\n+                        \"typeDescription\": \"Applies a JOLT specification to each record in the FlowFile payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-key-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-key-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"key\": {\n+                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n+                                \"displayName\": \"Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"key-file\": {\n+                                \"description\": \"File path to Private Key structured using PKCS8 and encoded as PEM\",\n+                                \"displayName\": \"Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"key-password\": {\n+                                \"description\": \"Password used for decrypting Private Keys\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.key.service.api.PrivateKeyService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"PEM\",\n+                            \"PKCS8\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.key.service.StandardPrivateKeyService\",\n+                        \"typeDescription\": \"Private Key Service provides access to a Private Key loaded from configured sources\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-record-serialization-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile has the Avro Schema embedded within the content, and this schema will be used.\",\n+                                        \"displayName\": \"Use Embedded Avro Schema\",\n+                                        \"value\": \"embedded-avro-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"embedded-avro-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"comma\",\n+                            \"delimited\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"values\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.avro.AvroReader\",\n+                        \"typeDescription\": \"Parses Avro data and returns each Avro record as an separate Record object. The Avro data may contain the schema itself, or the schema can be externalized and accessed by one of the methods offered by the 'Schema Access Strategy' property.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Schema Reference Writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-writer\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n+                                \"displayName\": \"Schema Reference Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Reference Writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceWriter\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Schema Write Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The FlowFile will have the Avro schema embedded into the content, as is typical with Avro\",\n+                                        \"displayName\": \"Embed Avro Schema\",\n+                                        \"value\": \"avro-embedded\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Do not add any schema-related information to the FlowFile.\",\n+                                        \"displayName\": \"Do Not Write Schema\",\n+                                        \"value\": \"no-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'schema.name' and this attribute will indicate the name of the schema in the Schema Registry. Note that ifthe schema for a record is not obtained from a Schema Registry, then no attribute will be added.\",\n+                                        \"displayName\": \"Set 'schema.name' Attribute\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be given an attribute named 'avro.schema' and this attribute will contain the Avro Schema that describes the records in the FlowFile. The contents of the FlowFile need not be Avro, but the text of the schema will be used.\",\n+                                        \"displayName\": \"Set 'avro.schema' Attribute\",\n+                                        \"value\": \"full-schema-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n+                                        \"displayName\": \"Schema Reference Writer\",\n+                                        \"value\": \"schema-reference-writer\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"avro-embedded\",\n+                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n+                                \"displayName\": \"Schema Write Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Write Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n+                                \"displayName\": \"Compression Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compression-format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"encoder-pool-size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"Avro Writers require the use of an Encoder. Creation of Encoders is expensive, but once created, they can be reused. This property controls the maximum number of Encoders that can be pooled and reused. Setting this value too small can result in degraded performance, but setting it higher can result in more heap being used. This property is ignored if the Avro Writer is configured with a Schema Write Strategy of 'Embed Avro Schema'.\",\n+                                \"displayName\": \"Encoder Pool Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"encoder-pool-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The schema used to write records will be the same schema that was given to the Record when the Record was created.\",\n+                                        \"displayName\": \"Inherit Record Schema\",\n+                                        \"value\": \"inherit-record-schema\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"inherit-record-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-cache\": {\n+                                \"description\": \"Specifies a Schema Cache to add the Record Schema to so that Record Readers can quickly lookup the schema.\",\n+                                \"displayName\": \"Schema Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"accept-empty-extensions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n                                 \"displayName\": \"Accept empty extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"accept-empty-extensions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n@@ -4876,16 +6933,16 @@\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Grok Expression\",\n                                 \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"TEXT\",\n                                         \"FILE\",\n+                                        \"TEXT\",\n                                         \"URL\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"Grok Pattern File\": {\n                                 \"description\": \"Grok Patterns to use for parsing logs. If not specified, a built-in default Pattern file will be used. If specified, all patterns specified will override the default patterns. See the Controller Service's Additional Details for a list of pre-defined patterns.\",\n@@ -4894,16 +6951,16 @@\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"Grok Pattern File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"TEXT\",\n                                         \"FILE\",\n+                                        \"TEXT\",\n                                         \"URL\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"no-match-behavior\": {\n                                 \"allowableValues\": [\n@@ -7725,970 +9782,1290 @@\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-mongodb-nar\",\n+            \"artifact\": \"nifi-shopify-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-shopify-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"CUSTOMERS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Customer resource stores information about a shop's customers, such as their contact details, their order history, and whether they've agreed to receive email marketing.\",\n+                                        \"displayName\": \"Customers\",\n+                                        \"value\": \"customers\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CUSTOMERS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Customer resource to query\",\n+                                \"displayName\": \"Customer Category\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CUSTOMERS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"DISCOUNTS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The PriceRule resource can be used to get discounts using conditions\",\n+                                        \"displayName\": \"Price Rules\",\n+                                        \"value\": \"price_rules\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"DISCOUNTS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Discount resource to query\",\n+                                \"displayName\": \"Discount Category\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DISCOUNTS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-delete-mode\": {\n+                            \"INVENTORY\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete only the first document that matches the query.\",\n-                                        \"displayName\": \"Delete One\",\n-                                        \"value\": \"one\"\n+                                        \"description\": \"A location represents a geographical location where your stores, pop-up stores, headquarters and warehouses exist.\",\n+                                        \"displayName\": \"Locations\",\n+                                        \"value\": \"locations\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"INVENTORY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Inventory resource to query\",\n+                                \"displayName\": \"Inventory Category\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"INVENTORY\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ONLINE_STORE\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.\",\n+                                        \"displayName\": \"Blogs\",\n+                                        \"value\": \"blogs\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete every document that matches the query.\",\n-                                        \"displayName\": \"Delete Many\",\n-                                        \"value\": \"many\"\n+                                        \"description\": \"A comment is a reader's response to an article in a blog.\",\n+                                        \"displayName\": \"Comments\",\n+                                        \"value\": \"comments\"\n                                     },\n                                     {\n-                                        \"description\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n-                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n-                                        \"value\": \"attr\"\n+                                        \"description\": \"Shopify stores come with a tool for creating basic HTML web pages.\",\n+                                        \"displayName\": \"Pages\",\n+                                        \"value\": \"pages\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A redirect causes a visitor on a specific path on the shop's site to be automatically sent to a different location.\",\n+                                        \"displayName\": \"Redirects\",\n+                                        \"value\": \"redirects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The ScriptTag resource represents remote JavaScript code that is loaded into the pages of a shop's storefront or the order status page of checkout.\",\n+                                        \"displayName\": \"Script Tags\",\n+                                        \"value\": \"script_tags\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A theme controls the look and feel of a Shopify online store.\",\n+                                        \"displayName\": \"Themes\",\n+                                        \"value\": \"themes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"one\",\n-                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n-                                \"displayName\": \"Delete Mode\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ONLINE_STORE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Online Store resource to query\",\n+                                \"displayName\": \"Online Store Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-mongo-delete-mode\",\n-                                \"required\": false,\n+                                \"name\": \"ONLINE_STORE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-fail-on-no-delete\": {\n+                            \"ORDERS\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail when no documents are deleted.\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase.\",\n+                                        \"displayName\": \"Abandoned Checkouts\",\n+                                        \"value\": \"checkouts\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not fail when nothing is deleted.\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Merchants can use draft orders to create orders on behalf of their customers.\",\n+                                        \"displayName\": \"Draft Orders\",\n+                                        \"value\": \"draft_orders\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An order is a customer's request to purchase one or more products from a shop.\",\n+                                        \"displayName\": \"Orders\",\n+                                        \"value\": \"orders\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether to send the flowfile to the success or failure relationship if nothing is successfully deleted.\",\n-                                \"displayName\": \"Fail When Nothing Is Deleted\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ORDERS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Order resource to query\",\n+                                \"displayName\": \"Order Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-mongo-fail-on-no-delete\",\n-                                \"required\": false,\n+                                \"name\": \"ORDERS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"PRODUCT\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Collects are meant for managing the relationship between products and custom collections.\",\n+                                        \"displayName\": \"Collects\",\n+                                        \"value\": \"collects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A custom collection is a grouping of products that a merchant can create to make their store easier to browse. \",\n+                                        \"displayName\": \"Custom Collections\",\n+                                        \"value\": \"custom_collections\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get products in a merchant's store \",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"products\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A smart collection is a grouping of products defined by rules that are set by the merchant.\",\n+                                        \"displayName\": \"Smart Collections\",\n+                                        \"value\": \"smart_collections\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PRODUCT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Product resource to query\",\n+                                \"displayName\": \"Product Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Configurable parameter for controlling delete mode on a per-flowfile basis. The process must be configured to use this option. Acceptable values are 'one' and 'many.'\",\n-                                \"name\": \"mongodb.delete.mode\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"delete\",\n-                            \"mongo\",\n-                            \"mongodb\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.DeleteMongo\",\n-                        \"typeDescription\": \"Executes a delete query against a MongoDB collection. The query is provided in the body of the flowfile and the user can select whether it will delete one or many documents that match it.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"description\": \"The number of elements to be returned from the server in one batch\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n+                                \"name\": \"PRODUCT\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\n+                            \"SALES_CHANNELS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A CollectionListing resource represents a product collection that a merchant has made available to your sales channel.\",\n+                                        \"displayName\": \"Collection Listings\",\n+                                        \"value\": \"collection_listings\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A ProductListing resource represents a Product which is available to your sales channel.\",\n+                                        \"displayName\": \"Product Listings\",\n+                                        \"value\": \"product_listings\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SALES_CHANNELS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Sales Channel resource to query\",\n+                                \"displayName\": \"Sales Channel Category\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SALES_CHANNELS\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"STORE_PROPERTIES\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Country resource represents the tax rates applied to orders from the different countries where a shop sells its products.\",\n+                                        \"displayName\": \"Countries\",\n+                                        \"value\": \"countries\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Merchants who use Shopify Payments can allow customers to pay in their local currency on the online store.\",\n+                                        \"displayName\": \"Currencies\",\n+                                        \"value\": \"currencies\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Policy resource can be used to access the policies that a merchant has configured for their shop, such as their refund and privacy policies.\",\n+                                        \"displayName\": \"Policies\",\n+                                        \"value\": \"policies\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ShippingZone resource can be used to view shipping zones and their countries, provinces, and shipping rates.\",\n+                                        \"displayName\": \"Shipping Zones\",\n+                                        \"value\": \"shipping_zones\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"STORE_PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Category\",\n+                                        \"propertyName\": \"object-category\"\n+                                    }\n+                                ],\n+                                \"description\": \"Store Property resource to query\",\n+                                \"displayName\": \"Store Property Category\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"STORE_PROPERTIES\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"access-token\": {\n+                                \"description\": \"Access Token to authenticate requests\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Projection\": {\n-                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n-                                \"displayName\": \"Projection\",\n+                            \"api-version\": {\n+                                \"defaultValue\": \"2022-10\",\n+                                \"description\": \"The Shopify REST API version\",\n+                                \"displayName\": \"API Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"api-version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Query\": {\n-                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n-                                \"displayName\": \"Query\",\n+                            \"incremental-delay\": {\n+                                \"defaultValue\": \"3 sec\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and Shopify servers' clock are not in sync.\",\n+                                \"displayName\": \"Incremental Delay\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"incremental-delay\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\n+                            \"incremental-initial-start-time\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property specifies the start time when running the first request. Represents an ISO 8601-encoded date and time string. For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is represented as \\\"2019-09-07T15:50:00Z\\\".\",\n+                                \"displayName\": \"Incremental Initial Start Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"incremental-initial-start-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"get-mongo-send-empty\": {\n+                            \"is-incremental\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If a query executes successfully, but returns no results, send an empty JSON document signifying no result.\",\n-                                \"displayName\": \"Send Empty Result\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects which were created or modified after the previous run time but before the current time.\",\n+                                \"displayName\": \"Incremental Loading\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-mongo-send-empty\",\n-                                \"required\": false,\n+                                \"name\": \"is-incremental\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"json-type\": {\n+                            \"object-category\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n-                                        \"displayName\": \"Extended JSON\",\n-                                        \"value\": \"Extended\"\n+                                        \"description\": \"Query a Customer resource\",\n+                                        \"displayName\": \"Customers\",\n+                                        \"value\": \"CUSTOMERS\"\n                                     },\n                                     {\n-                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n-                                        \"displayName\": \"Standard JSON\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Query a Discount resource\",\n+                                        \"displayName\": \"Discounts\",\n+                                        \"value\": \"DISCOUNTS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Inventory resource\",\n+                                        \"displayName\": \"Inventory\",\n+                                        \"value\": \"INVENTORY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Online Store resource\",\n+                                        \"displayName\": \"Online Store\",\n+                                        \"value\": \"ONLINE_STORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query an Order resource\",\n+                                        \"displayName\": \"Orders\",\n+                                        \"value\": \"ORDERS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Product resource\",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"PRODUCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Sales Channel resource\",\n+                                        \"displayName\": \"Sales Channels\",\n+                                        \"value\": \"SALES_CHANNELS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Query a Store Property resource\",\n+                                        \"displayName\": \"Store Properties\",\n+                                        \"value\": \"STORE_PROPERTIES\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Extended\",\n-                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n-                                \"displayName\": \"JSON Type\",\n+                                \"description\": \"Shopify object category\",\n+                                \"displayName\": \"Object Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n+                                \"name\": \"object-category\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"result-limit\": {\n+                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n+                                \"displayName\": \"Result Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"result-limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"store-domain\": {\n+                                \"description\": \"The domain of the Shopify store, e.g. nifistore.myshopify.com\",\n+                                \"displayName\": \"Store Domain\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"store-domain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n+                                \"name\": \"web-client-service-provider\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"mongo-date-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n-                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON.\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"results-per-flowfile\": {\n-                                \"description\": \"How many results to put into a FlowFile at once. The whole body will be treated as a JSON array of results.\",\n-                                \"displayName\": \"Results Per FlowFile\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"results-per-flowfile\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-pretty-printing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Choose whether or not to pretty print the JSON from the results of the query. Choosing 'True' can greatly increase the space requirements on disk depending on the complexity of the JSON document\",\n-                                \"displayName\": \"Pretty Print Results JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-pretty-printing\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"For a few resources the processor supports incremental loading. The list of the resources with the supported parameters can be found in the additional details.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"mongodb\",\n-                            \"read\"\n+                            \"shopify\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongo\",\n-                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n+                        \"type\": \"org.apache.nifi.processors.shopify.GetShopify\",\n+                        \"typeDescription\": \"Retrieves objects from a custom Shopify store. The processor yield time must be set to the account's rate limit accordingly.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n-                            },\n-                            {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\n+                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-zendesk-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"description\": \"The number of elements to be returned from the server in one batch\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"cache-expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Zendesk ticket that is cached should remain in the cache.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-expiration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Zendesk ticket should be cached.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"zendesk-authentication-type-name\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Password of Zendesk login user.\",\n+                                        \"displayName\": \"Password\",\n+                                        \"value\": \"password\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n+                                        \"displayName\": \"Token\",\n+                                        \"value\": \"token\"\n+                                    }\n+                                ],\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-authentication-type-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Projection\": {\n-                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n-                                \"displayName\": \"Projection\",\n+                            \"zendesk-authentication-value-name\": {\n+                                \"description\": \"Password or authentication token for Zendesk login user.\",\n+                                \"displayName\": \"Authentication Credential\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Query\": {\n-                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n-                                \"displayName\": \"Query\",\n+                            \"zendesk-comment-body\": {\n+                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n+                                \"displayName\": \"Comment Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n-                                \"required\": false,\n+                                \"name\": \"zendesk-comment-body\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\n+                            \"zendesk-priority\": {\n+                                \"description\": \"The content or the path to the priority in the incoming record.\",\n+                                \"displayName\": \"Priority\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n+                                \"name\": \"zendesk-priority\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"get-mongo-record-writer-factory\": {\n-                                \"description\": \"The record writer to use to write the result sets.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"zendesk-subdomain\": {\n+                                \"description\": \"Name of the Zendesk subdomain.\",\n+                                \"displayName\": \"Subdomain Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-mongo-record-writer-factory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subdomain\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"zendesk-subject\": {\n+                                \"description\": \"The content or the path to the subject in the incoming record.\",\n+                                \"displayName\": \"Subject\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subject\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n+                            \"zendesk-type\": {\n+                                \"description\": \"The content or the path to the type in the incoming record.\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n+                                \"name\": \"zendesk-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongodb-schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"description\": \"The name of the schema in the configured schema registry to use for the query results.\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"zendesk-user\": {\n+                                \"description\": \"Login user to Zendesk subdomain.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongodb-schema-name\",\n+                                \"name\": \"zendesk-user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"json\",\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"record\"\n+                            \"record\",\n+                            \"sink\",\n+                            \"zendesk\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongoRecord\",\n-                        \"typeDescription\": \"A record-based version of GetMongo that uses the Record writers to write the MongoDB result set.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n-                            },\n-                            {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.services.zendesk.ZendeskRecordSink\",\n+                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.The service requires a Zendesk account with configured access.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-scripting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the data is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"insert\",\n-                                        \"value\": \"insert\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"update\",\n-                                        \"value\": \"update\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"insert\",\n-                                \"description\": \"Indicates whether the processor should insert or update content\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.script.ScriptedLookupService\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Update Query Key\": {\n-                                \"description\": \"Key name used to build the update query criteria; this property is valid only when using update mode, otherwise it is ignored. Example: _id\",\n-                                \"displayName\": \"Update Query Key\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Update Query Key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Upsert\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When true, inserts a document if no document matches the update query criteria; this property is valid only when using update mode, otherwise it is ignored\",\n-                                \"displayName\": \"Upsert\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Upsert\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"lookup\",\n+                            \"script\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.lookup.script.SimpleScriptedLookupService\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. The script is expected to return an optional string value rather than an arbitrary object (record, e.g.). Also the scripted lookup service should implement StringLookupService, otherwise the getValueType() method must be implemented even though it will be ignored, as SimpleScriptedLookupService returns String as the value type on the script's behalf.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"put-mongo-update-mode\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With whole document\",\n-                                        \"value\": \"doc\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With operators enabled\",\n-                                        \"value\": \"operators\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"doc\",\n-                                \"description\": \"Choose an update mode. You can either supply a JSON document to use as a direct replacement or specify a document that contains update operators like $set, $unset, and $inc. When Operators mode is enabled, the flowfile content is expected to be the operator part for example: {$set:{\\\"key\\\": \\\"value\\\"},$inc:{\\\"count\\\":1234}} and the update query will come from the configured Update Query property.\",\n-                                \"displayName\": \"Update Mode\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-mongo-update-mode\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"putmongo-update-query\": {\n-                                \"description\": \"Specify a full MongoDB query to be used for the lookup query to do an update/upsert.\",\n-                                \"displayName\": \"Update Query\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putmongo-update-query\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\n+                            \"recordFactory\",\n+                            \"script\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.record.script.ScriptedReader\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordReaderFactory instance in order to read/parse/generate records from an incoming flow file.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the data is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"Script Engine\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\n+                            \"script\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.script.ScriptedRecordSetWriter\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordSetWriterFactory instance in order to write records to an outgoing flow file.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Ordered\": {\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Ordered execution of bulk-writes and break on error - otherwise arbitrary order and continue on error\",\n-                                \"displayName\": \"Ordered\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ordered\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"bulk\",\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\n+                            \"record sink\",\n+                            \"script\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoBulkOperations\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB as bulk-update\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.record.sink.script.ScriptedRecordSink\",\n+                        \"typeDescription\": \"Allows the user to provide a scripted RecordSinkService instance in order to transmit records to the desired target. The script must set a variable 'recordSink' to an implementation of RecordSinkService.\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -8696,217 +11073,147 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bypass-validation\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"        Enable or disable bypassing document schema validation during insert or update operations.\\n        Bypassing document validation is a Privilege Action in MongoDB.\\n        Enabling this property can result in authorization errors for users with limited privileges.\\n\",\n-                                \"displayName\": \"Bypass Validation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bypass-validation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"insert_count\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of records to group together for one single insert/upsert operation against MongoDB.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert_count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"ordered\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"Perform ordered or unordered operations\",\n-                                \"displayName\": \"Ordered\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ordered\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                                \"defaultValue\": \"Clojure\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"update-key-fields\": {\n-                                \"description\": \"Comma separated list of fields based on which to identify documents that need to be updated. If this property is set NiFi will attempt an upsert operation on all documents. If this property is not set all documents will be inserted.\",\n-                                \"displayName\": \"Update Key Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-key-fields\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"update-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Updates only the first document that matches the query.\",\n-                                        \"displayName\": \"Update One\",\n-                                        \"value\": \"one\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Updates every document that matches the query.\",\n-                                        \"displayName\": \"Update Many\",\n-                                        \"value\": \"many\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use the value of the 'mongodb.update.mode' attribute of the incoming flowfile. Acceptable values are 'one' and 'many'.\",\n-                                        \"displayName\": \"Use 'mongodb.update.mode' flowfile attribute.\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"one\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Update Key Fields\",\n-                                        \"propertyName\": \"update-key-fields\"\n-                                    }\n-                                ],\n-                                \"description\": \"Choose between updating a single document or multiple documents per incoming record.\",\n-                                \"displayName\": \"Update Mode\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Configurable parameter for controlling update mode on a per-flowfile basis. Acceptable values are 'one' and 'many' and controls whether a single incoming record should update a single or multiple Mongo documents.\",\n-                                \"name\": \"mongodb.update.mode\"\n-                            }\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.InvokeScriptedProcessor\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"FlowFiles that were successfully processed\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"description\": \"FlowFiles that failed to be processed\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"record\",\n-                            \"update\",\n-                            \"upsert\"\n+                            \"clojure\",\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoRecord\",\n-                        \"typeDescription\": \"This processor is a record-aware processor for inserting/upserting data into MongoDB. It uses a configured record reader and schema to read an incoming record set from the body of a flowfile and then inserts/upserts batches of those records into a configured MongoDB collection. This processor does not support deletes. The number of documents to insert/upsert at a time is controlled by the \\\"Batch Size\\\" configuration property. This value should be set to a reasonable size to ensure that MongoDB is not overloaded with too many operations at once.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ExecuteScript\",\n+                        \"typeDescription\": \"Experimental - Executes a script given the flow file and a process session.  The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back. Experimental: Impact of sustained usage not yet verified.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -8914,205 +11221,131 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of elements returned from the server in one batch.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"allow-disk-use\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Set this to true to enable writing data to temporary files to prevent exceeding the maximum memory use limit during aggregation pipeline staged when handling large datasets.\",\n-                                \"displayName\": \"Allow Disk Use\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-disk-use\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"json-type\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n-                                        \"displayName\": \"Extended JSON\",\n-                                        \"value\": \"Extended\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n-                                        \"displayName\": \"Standard JSON\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Extended\",\n-                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n-                                \"displayName\": \"JSON Type\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-agg-query\": {\n-                                \"description\": \"The aggregation query to be executed.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-agg-query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"mongo-date-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n-                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON.\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"results-per-flowfile\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"How many results to put into a flowfile at once. The whole body will be treated as a JSON array of results.\",\n-                                \"displayName\": \"Results Per FlowFile\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"results-per-flowfile\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n-                                \"name\": \"results\"\n-                            },\n-                            {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n-                                \"name\": \"original\"\n-                            }\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ExecuteScript\"\n                         ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"aggregate\",\n-                            \"aggregation\",\n-                            \"mongo\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.RunMongoAggregation\",\n-                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n+                        \"type\": \"org.apache.nifi.processors.script.InvokeScriptedProcessor\",\n+                        \"typeDescription\": \"Experimental - Invokes a script engine for a Processor defined in the given script. The script must define a valid class that implements the Processor interface, and it must set a variable 'processor' to an instance of the class. Processor methods such as onTrigger() will be delegated to the scripted Processor instance. Also any Relationships or PropertyDescriptors defined by the scripted processor will be added to the configuration dialog. The scripted processor can implement public void setLogger(ComponentLog logger) to get access to the parent logger, as well as public void onScheduled(ProcessContext context) and public void onStopped(ProcessContext context) methods to be invoked when the parent InvokeScriptedProcessor is scheduled or stopped, respectively.  NOTE: The script will be loaded when the processor is populated with property values, see the Restrictions section for more security implications.  Experimental: Impact of sustained usage not yet verified.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -9120,276 +11353,184 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"delete-gridfs-query\": {\n-                                \"description\": \"A valid MongoDB query to use to find and delete one or more files from GridFS.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"delete-gridfs-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"delete\",\n-                            \"gridfs\",\n-                            \"mongodb\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.DeleteGridFS\",\n-                        \"typeDescription\": \"Deletes a file from GridFS using a file name or a query.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor.\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-query\": {\n-                                \"description\": \"A valid MongoDB query to use to fetch one or more files from GridFS.\",\n-                                \"displayName\": \"Query\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-operation-mode\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fetch the entire query result and then make it available to downstream processors.\",\n-                                        \"displayName\": \"Full Query Fetch\",\n-                                        \"value\": \"all-at-once\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n-                                        \"description\": \"As soon as the query start sending results to the downstream processors at regular intervals.\",\n-                                        \"displayName\": \"Stream Query Results\",\n-                                        \"value\": \"streaming\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all-at-once\",\n-                                \"description\": \"This option controls when results are made available to downstream processors. If Stream Query Results is enabled, provenance will not be tracked relative to the input flowfile if an input flowfile is received and starts the query. In Stream Query Results mode errors will be handled by sending a new flowfile with the original content and attributes of the input flowfile to the failure relationship. Streaming should only be used if there is reliable connectivity between MongoDB and NiFi.\",\n-                                \"displayName\": \"Operation Mode\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-operation-mode\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-query-attribute\": {\n-                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n-                                \"displayName\": \"Query Output Attribute\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"description\": \"Matching records of the original FlowFile will be routed to this relationship. If there are no matching records, no FlowFile will be routed here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"description\": \"In case of any issue during processing the incoming FlowFile, the incoming FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\n+                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the number of filtered or remaining records.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"gridfs\",\n-                            \"mongo\"\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"record\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.FetchGridFS\",\n-                        \"typeDescription\": \"Retrieves one or more files from a GridFS bucket by file name or by a user-defined query.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                        \"typeDescription\": \"This processor provides the ability to filter records out from FlowFiles using the user-provided script. Every record will be evaluated by the script which must return with a boolean value. Records with \\\"true\\\" result will be routed to the \\\"matching\\\" relationship in a batch. Other records will be filtered out.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The custom metadata stored with a file is attached to this property if it exists.\",\n-                                \"name\": \"gridfs.file.metadata\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -9397,1419 +11538,973 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gridfs-bucket-name\": {\n-                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n-                                \"displayName\": \"Bucket Name\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gridfs-file-name\": {\n-                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n-                                \"displayName\": \"File Name\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"putgridfs-chunk-size\": {\n-                                \"defaultValue\": \"256 KB\",\n-                                \"description\": \"Controls the maximum size of each chunk of a file uploaded into GridFS.\",\n-                                \"displayName\": \"Chunk Size\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-chunk-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-enforce-uniqueness\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No uniqueness will be enforced.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Both the filename and hash must be unique.\",\n-                                        \"displayName\": \"Both\",\n-                                        \"value\": \"both\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Only the filename must be unique.\",\n-                                        \"displayName\": \"Name\",\n-                                        \"value\": \"name\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n-                                        \"description\": \"Only the file hash must be unique.\",\n-                                        \"displayName\": \"Hash\",\n-                                        \"value\": \"hash\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"When enabled, this option will ensure that uniqueness is enforced on the bucket. It will do so by creating a MongoDB index that matches your selection. It should ideally be configured once when the bucket is created for the first time because it could take a long time to build on an existing bucket wit a lot of data.\",\n-                                \"displayName\": \"Enforce Uniqueness\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"putgridfs-enforce-uniqueness\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-hash-attribute\": {\n-                                \"defaultValue\": \"hash.value\",\n-                                \"description\": \"If uniquness enforcement is enabled and the file hash is part of the constraint, this must be set to an attribute that exists on all incoming flowfiles.\",\n-                                \"displayName\": \"Hash Attribute\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"putgridfs-hash-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"putgridfs-properties-prefix\": {\n-                                \"description\": \"Attributes that have this prefix will be added to the file stored in GridFS as metadata.\",\n-                                \"displayName\": \"File Properties Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-properties-prefix\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Flowfiles that fail the duplicate check are sent to this relationship.\",\n-                                \"name\": \"duplicate\"\n+                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"gridfs\",\n-                            \"mongo\",\n-                            \"put\",\n-                            \"store\"\n+                            \"groovy\",\n+                            \"group\",\n+                            \"organize\",\n+                            \"partition\",\n+                            \"record\",\n+                            \"script\",\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.PutGridFS\",\n-                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates the user provided script against each record in the incoming flow file. Each record is then grouped with other records sharing the same partition and a FlowFile is created for each groups of records. Two records shares the same partition if the evaluation of the script results the same return value for both. Those will be considered as part of the same partition.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-http-context-map-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-http-context-map-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Maximum Outstanding Requests\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The maximum number of HTTP requests that can be outstanding at any one time. Any attempt to register an additional HTTP Request will cause an error\",\n-                                \"displayName\": \"Maximum Outstanding Requests\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Outstanding Requests\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Request Expiration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n-                                \"displayName\": \"Request Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"http\",\n-                            \"request\",\n-                            \"response\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n-                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-slack-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-slack-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Bot OAuth Token used for authenticating and authorizing the Slack request sent by NiFi.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"description\": \"The partition of the outgoing flow file. If the script indicates that the partition has a null value, the attribute will be set to the literal string \\\"<null partition>\\\" (without quotes). Otherwise, the attribute is set to the String representation of whatever value is returned by the script.\",\n+                                \"name\": \"partition\"\n                             },\n-                            \"api-url\": {\n-                                \"defaultValue\": \"https://slack.com/api\",\n-                                \"description\": \"Slack Web API URL for posting text messages to channels. It only needs to be changed if Slack changes its API URL.\",\n-                                \"displayName\": \"API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n-                            \"channel-id\": {\n-                                \"description\": \"Slack channel, private group, or IM channel to send the message to. Use Channel ID instead of the name.\",\n-                                \"displayName\": \"Channel ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"channel-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n-                            \"input-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the records used to generate the Slack message.\",\n-                                \"displayName\": \"Input Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n-                            \"web-service-client-provider\": {\n-                                \"description\": \"Controller service to provide HTTP client for communicating with Slack API\",\n-                                \"displayName\": \"Web Service Client Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-service-client-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"record\",\n-                            \"sink\",\n-                            \"slack\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.slack.SlackRecordSink\",\n-                        \"typeDescription\": \"Format and send Records to a configured Channel using the Slack Post Message API. The service requires a Slack App with a Bot User configured for access to a Slack workspace. The Bot User OAuth Bearer Token is required for posting messages to Slack.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"3 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Access Token\": {\n-                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. It must be granted the channels:history, groups:history, im:history, or mpim:history scope, depending on the type of conversation being used.\",\n-                                \"displayName\": \"Access Token\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of messages to retrieve in a single request to Slack. The entire response will be parsed into memory, so it is important that this be kept in mind when setting this value.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Channels\": {\n-                                \"description\": \"A comma-separated list of Slack Channels to Retrieve Messages From. Each element in the list may be either a Channel ID, such as C0L9VCD47, or (for public channels only) the name of a channel, prefixed with a # sign, such as #general. If any channel name is provided instead,instead of an ID, the Access Token provided must be granted the channels:read scope in order to resolve the Channel ID. See the Processor's Additional Details for information on how to find a Channel ID.\",\n-                                \"displayName\": \"Channels\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Channels\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Include Message Blocks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the output JSON should include the value of the 'blocks' field for each Slack Message. This field includes information such as individual parts of a message that are formatted using rich text. This may be useful, for instance, for parsing. However, it often accounts for a significant portion of the data and as such may be set to null when it is not useful to you.\",\n-                                \"displayName\": \"Include Message Blocks\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Message Blocks\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Null Fields\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not fields that have null values should be included in the output JSON. If true, any field in a Slack Message that has a null value will be included in the JSON with a value of null. If false, the key omitted from the output JSON entirely. Omitting null values results in smaller messages that are generally more efficient to process, but including the values may provide a better understanding of the format, especially for schema inference.\",\n-                                \"displayName\": \"Include Null Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Null Fields\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Reply Monitor Frequency\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp falls between now and the amount of time specified by the <Reply Monitor Window> property. This property determines how frequently those messages are polled. Setting the value to a shorter duration may result in replies to messages being captured more quickly, providing a lower latency. However, it will also result in additional resource use and could trigger Rate Limiting to occur.\",\n-                                \"displayName\": \"Reply Monitor Frequency\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reply Monitor Frequency\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Reply Monitor Window\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp is between now and this amount of time in the past in order to check for any new replies. Setting this value to a larger value may result in additional resource use and may result in Rate Limiting. However, if a user replies to an old thread that was started outside of this window, the reply may not be captured.\",\n-                                \"displayName\": \"Reply Monitor Window\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reply Monitor Window\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Resolve Usernames\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not User IDs should be resolved to usernames. By default, Slack Messages provide the ID of the user that sends a message, such as U0123456789, but not the username, such as NiFiUser. The username may be resolved, but it may require additional calls to the Slack API and requires that the Token used be granted the users:read scope. If set to true, usernames will be resolved with a best-effort policy: if a username cannot be obtained, it will be skipped over. Also, note that when a username is obtained, the Message's <username> field is populated, and the <text> field is updated such that any mention will be output such as \\\"Hi @user\\\" instead of \\\"Hi <@U1234567>\\\".\",\n-                                \"displayName\": \"Resolve Usernames\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resolve Usernames\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.slack.ListenSlack\"\n+                            \"org.apache.nifi.processors.jolt.JoltTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ExecuteScript\",\n+                            \"org.apache.nifi.processors.standard.LookupRecord\",\n+                            \"org.apache.nifi.processors.standard.QueryRecord\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Maintains a mapping of Slack Channel IDs to the timestamp of the last message that was retrieved for that channel. This allows the processor to only retrieve messages that have been posted since the last time the processor was run. This state is stored in the cluster so that if the Primary Node changes, the new node will pick up where the previous node left off.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Slack messages that are successfully received will be routed to this relationship\",\n+                                \"description\": \"Each FlowFile that were successfully transformed will be routed to this Relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be transformed will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"conversation\",\n-                            \"conversation.history\",\n-                            \"slack\",\n-                            \"social media\",\n-                            \"team\",\n-                            \"text\",\n-                            \"unstructured\"\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"modify\",\n+                            \"record\",\n+                            \"script\",\n+                            \"transform\",\n+                            \"update\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.ConsumeSlack\",\n-                        \"typeDescription\": \"Retrieves messages from one or more configured Slack channels. The messages are written out in JSON format. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages from Slack.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                        \"typeDescription\": \"Provides the ability to evaluate a simple script against each record in an incoming FlowFile. The script may transform the record in some way, filter the record, or fork additional records. See Processor's Additional Details for more information.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n-                                \"name\": \"slack.channel.id\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of slack messages that are included in the FlowFile\",\n-                                \"name\": \"slack.message.count\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"250 millis\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"App Token\": {\n-                                \"description\": \"The Application Token that is registered to your Slack application\",\n-                                \"displayName\": \"App Token\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"App Token\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Bot Token\": {\n-                                \"description\": \"The Bot Token that is registered to your Slack application\",\n-                                \"displayName\": \"Bot Token\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Bot Token\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Event Type to Receive\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Processor is to receive only slack messages that mention the bot user (App Mention Events)\",\n-                                        \"displayName\": \"Receive App Mention Events\",\n-                                        \"value\": \"Receive App Mention Events\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Processor is to receive Slack Message Events\",\n-                                        \"displayName\": \"Receive Message Events\",\n-                                        \"value\": \"Receive Message Events\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Processor is to receive Commands from Slack that are specific to your application. The Processor will not receive Message Events.\",\n-                                        \"displayName\": \"Receive Commands\",\n-                                        \"value\": \"Receive Commands\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Receive App Mention Events\",\n-                                \"description\": \"Specifies the type of Event that the Processor should respond to\",\n-                                \"displayName\": \"Event Type to Receive\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Type to Receive\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Resolve User Details\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Receive App Mention Events\",\n-                                            \"Receive Message Events\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Event Type to Receive\",\n-                                        \"propertyName\": \"Event Type to Receive\"\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether the Processor should lookup details about the Slack User who sent the received message. If true, the output JSON will contain an additional field named 'userDetails'. The 'user' field will still contain the ID of the user. In order to enable this capability, the Bot Token must be granted the 'users:read' and optionally the 'users.profile:read' Bot Token Scope. If the rate limit is exceeded when retrieving this information, the received message will be rejected and must be re-delivered.\",\n-                                \"displayName\": \"Resolve User Details\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"The Language to use for the script\",\n+                                \"displayName\": \"Script Language\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resolve User Details\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.slack.ConsumeSlack\"\n+                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are created will be sent to this Relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFile containing the valid records from the incoming FlowFile will be routed to this relationship. If there are no valid records, no FlowFile will be routed to this Relationship.\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFile containing the invalid records from the incoming FlowFile will be routed to this relationship. If there are no invalid records, no FlowFile will be routed to this Relationship.\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"In case of any issue during processing the incoming flow file, the incoming FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the FlowFiles might routed to \\\"valid\\\" and \\\"invalid\\\" relationships.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"command\",\n-                            \"event\",\n-                            \"listen\",\n-                            \"message\",\n-                            \"real-time\",\n-                            \"receive\",\n-                            \"slack\",\n-                            \"social media\",\n-                            \"team\",\n-                            \"text\",\n-                            \"unstructured\"\n+                            \"groovy\",\n+                            \"record\",\n+                            \"script\",\n+                            \"validate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.ListenSlack\",\n-                        \"typeDescription\": \"Retrieves real-time messages or Slack commands from one or more Slack conversations. The messages are written out in JSON format. Note that this Processor should be used to obtain real-time messages and commands from Slack and does not provide a mechanism for obtaining historical messages. The ConsumeSlack Processor should be used for an initial load of messages from a channel. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages and commands from Slack.\",\n+                        \"type\": \"org.apache.nifi.processors.script.ScriptedValidateRecord\",\n+                        \"typeDescription\": \"This processor provides the ability to validate records in FlowFiles using the user-provided script. The script is expected to have a record as incoming argument and return with a boolean value. Based on this result, the processor categorizes the records as \\\"valid\\\" or \\\"invalid\\\" and routes them to the respective relationship in batch. Additionally the original FlowFile will be routed to the \\\"original\\\" relationship or in case of unsuccessful processing, to the \\\"failed\\\" relationship.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n                                 \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"3 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Set \\\"Destination\\\" to \\\"flowfile-attribute\\\"\\n\\nAdd a new property named \\\"thread.ts\\\" with a value of `$.threadTs`\\nAdd a new property named \\\"message.ts\\\" with a value of `$.ts`\\nAdd a new property named \\\"channel.id\\\" with a value of `$.channel`\\nAdd a new property named \\\"user.id\\\" with a value of `$.user`\\n\\nConnect the \\\"matched\\\" Relationship to PublishSlack.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to `${'channel.id'}`\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the response. If desired, you can reference the user of the original message by including the text `<@${'user.id'}>`.\\n    For example: `Hey, <@${'user.id'}>, thanks for asking...`\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"false\\\".\\nSet \\\"Thread Timestamp\\\" to `${'thread.ts':replaceEmpty( ${'message.ts'} )}`\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.slack.PublishSlack\"\n-                                    }\n-                                ],\n-                                \"description\": \"Respond to a Slack message in a thread.\",\n-                                \"keywords\": [\n-                                    \"slack\",\n-                                    \"respond\",\n-                                    \"reply\",\n-                                    \"thread\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"A script engine property to update\",\n+                                \"value\": \"The value to set it to\"\n                             }\n                         ],\n-                        \"primaryNodeOnly\": false,\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Access Token\": {\n-                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. The token must be granted the chat:write scope. Additionally, in order to upload FlowFile contents as an attachment, it must be granted files:write.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Channel\": {\n-                                \"description\": \"The name or identifier of the channel to send the message to. If using a channel name, it must be prefixed with the # character. For example, #general. This is valid only for public channels. Otherwise, the unique identifier of the channel to publish to must be provided.\",\n-                                \"displayName\": \"Channel\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Send FlowFile Content as Message\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the Character Set used to encode the FlowFile contents.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include FlowFile Content as Attachment\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use 'Message Text' Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether or not the contents of the FlowFile should be uploaded as an attachment to the Slack message.\",\n-                                \"displayName\": \"Include FlowFile Content as Attachment\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include FlowFile Content as Attachment\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Max FlowFile Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Include FlowFile Content as Attachment\",\n-                                        \"propertyName\": \"Include FlowFile Content as Attachment\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum size of a FlowFile that can be sent to Slack. If any FlowFile exceeds this size, it will be routed to failure. This plays an important role because the entire contents of the file must be loaded into NiFi's heap in order to send the data to Slack.\",\n-                                \"displayName\": \"Max FlowFile Size\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max FlowFile Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Text\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use 'Message Text' Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of the message to send to Slack.\",\n-                                \"displayName\": \"Message Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Text\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Publish Strategy\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The contents of the FlowFile will be sent as the message text.\",\n-                                        \"displayName\": \"Send FlowFile Content as Message\",\n-                                        \"value\": \"Send FlowFile Content as Message\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The value of the Message Text Property will be sent as the message text.\",\n-                                        \"displayName\": \"Use 'Message Text' Property\",\n-                                        \"value\": \"Use 'Message Text' Property\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Send FlowFile Content as Message\",\n-                                \"description\": \"Specifies how the Processor will send the message or file to Slack.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Publish Strategy\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Thread Timestamp\": {\n-                                \"description\": \"The Timestamp identifier for the thread that this message is to be a part of. If not specified, the message will be a top-level message instead of being in a thread.\",\n-                                \"displayName\": \"Thread Timestamp\",\n+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Thread Timestamp\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.slack.ConsumeSlack\",\n-                            \"org.apache.nifi.processors.slack.ListenSlack\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to 'failure' if unable to be sent to Slack for any other reason\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to 'rate limited' if the Rate Limit has been exceeded\",\n-                                \"name\": \"rate limited\"\n-                            }\n-                        ],\n+                        \"restricted\": true,\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"chat.postMessage\",\n-                            \"conversation\",\n-                            \"publish\",\n-                            \"send\",\n-                            \"slack\",\n-                            \"social media\",\n-                            \"team\",\n-                            \"text\",\n-                            \"unstructured\",\n-                            \"upload\",\n-                            \"write\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.PublishSlack\",\n-                        \"typeDescription\": \"Posts a message to the specified Slack channel. The content of the message can be either a user-defined message that makes use of Expression Language or\\nthe contents of the FlowFile can be sent as the message. If sending a user-defined message, the contents of the FlowFile may also be optionally uploaded as\\na file attachment.\\n\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the Slack message.\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"true\\\" if the FlowFile's contents should be attached as a file, or \\\"false\\\" to send just the message text without an attachment.\\n\",\n-                                \"description\": \"Send specific text as a message to Slack, optionally including the FlowFile's contents as an attached file.\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Send FlowFile Content as Message\\\".\\n\",\n-                                \"description\": \"Send the contents of the FlowFile as a message to Slack.\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"reporting\",\n+                            \"script\"\n                         ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n-                                \"name\": \"slack.channel.id\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the slack messages that was sent; this is used by Slack as a unique identifier\",\n-                                \"name\": \"slack.ts\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.reporting.script.ScriptedReportingTask\",\n+                        \"typeDescription\": \"Provides reporting and status information to a script. ReportingContext, ComponentLog, and VirtualMachineMetrics objects are made available as variables (context, log, and vmMetrics, respectively) to the script for further processing. The context makes various information available such as events, provenance, bulletins, controller services, process groups, Java Virtual Machine metrics, etc.\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n-                ],\n-                \"reportingTasks\": []\n+                ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-gcp-services-api-nar\",\n+            \"artifact\": \"nifi-smb-client-api-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-standard-services-api-nar\",\n+            \"artifact\": \"nifi-framework-kubernetes-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-record-sink-service-nar\",\n+            \"artifact\": \"nifi-email-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bcc\": {\n-                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"BCC\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bcc\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cc\": {\n-                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"CC\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cc\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"from\": {\n-                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"From\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"from\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Mark Messages as Read\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n+                                \"displayName\": \"Mark Messages as Read\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"smtp-auth\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Flag indicating whether authentication should be used\",\n-                                \"displayName\": \"SMTP Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-auth\",\n+                                \"name\": \"Mark Messages as Read\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-hostname\": {\n-                                \"description\": \"The hostname of the SMTP Server that is used to send Email Notifications\",\n-                                \"displayName\": \"SMTP Hostname\",\n+                            \"Use SSL\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies if IMAP connection must be obtained via SSL encrypted connection (i.e., IMAPS)\",\n+                                \"displayName\": \"Use SSL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smtp-hostname\",\n+                                \"name\": \"Use SSL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-password\": {\n-                                \"dependencies\": [\n+                            \"authorization-mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for the SMTP account\",\n-                                \"displayName\": \"SMTP Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"smtp-port\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The Port used for SMTP communications\",\n-                                \"displayName\": \"SMTP Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"smtp-ssl\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether SSL should be enabled\",\n-                                \"displayName\": \"SMTP SSL\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-ssl\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-starttls\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether STARTTLS should be enabled. If the server does not support STARTTLS, the connection continues without the use of TLS\",\n-                                \"displayName\": \"SMTP STARTTLS\",\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-starttls\",\n+                                \"name\": \"connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-username\": {\n-                                \"dependencies\": [\n+                            \"delete.messages\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Username for the SMTP account\",\n-                                \"displayName\": \"SMTP Username\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delete.messages\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-xmailer-header\": {\n-                                \"defaultValue\": \"NiFi\",\n-                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n-                                \"displayName\": \"SMTP X-Mailer Header\",\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-xmailer-header\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"subject\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"to\": {\n-                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"To\",\n+                            \"host\": {\n+                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n+                                \"displayName\": \"Host Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"to\",\n-                                \"required\": false,\n+                                \"name\": \"host\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"record\",\n-                            \"send\",\n-                            \"sink\",\n-                            \"smtp\",\n-                            \"write\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.EmailRecordSink\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to send records in email using the specified writer for formatting.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"logsink-log-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n+                            },\n+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"INFO\",\n-                                \"description\": \"The Log Level at which to log records (INFO, DEBUG, e.g.)\",\n-                                \"displayName\": \"Log Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"logsink-log-level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"log\",\n-                            \"record\",\n-                            \"sink\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.LoggingRecordSink\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to log records to the application log (nifi-app.log, e.g.) using the specified writer for formatting.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hostname\": {\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            },\n+                            \"password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"password-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hostname\",\n+                                \"name\": \"password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n                             \"port\": {\n-                                \"description\": \"Destination port number\",\n+                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n                                 \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"sender-threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n-                                \"displayName\": \"Sender Threads\",\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sender-threads\",\n+                                \"name\": \"user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"UDP\",\n-                            \"event\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"Consume\",\n+                            \"Email\",\n+                            \"Get\",\n+                            \"Imap\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.event.UDPEventRecordSink\",\n-                        \"typeDescription\": \"Format and send Records as UDP Datagram Packets to a configurable destination\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumeIMAP\",\n+                        \"typeDescription\": \"Consumes messages from Email Server using IMAP protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If 'record.sink.name' attribute contains the name of the dynamic property, then the RecordSinkService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register the specified RecordSinkService\",\n-                                \"value\": \"The RecordSinkService\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"lookup\",\n-                            \"record\",\n-                            \"sink\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.lookup.RecordSinkServiceLookup\",\n-                        \"typeDescription\": \"Provides a RecordSinkService that can be used to dynamically select another RecordSinkService. This service requires an attribute named 'record.sink.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'record.sink.name' will be used to select the RecordSinkService that has been registered with that name. This will allow multiple RecordSinkServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'record.sink.name' attribute. Note that this controller service is not intended for use in reporting tasks that employ RecordSinkService instances, such as QueryNiFiReportingTask.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cipher-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -10818,278 +12513,207 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cipher-algorithm-mode\": {\n+                            \"authorization-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Cipher Blocking Chaining Mode\",\n-                                        \"displayName\": \"CBC\",\n-                                        \"value\": \"CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Counter Mode\",\n-                                        \"displayName\": \"CTR\",\n-                                        \"value\": \"CTR\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n-                                        \"displayName\": \"GCM\",\n-                                        \"value\": \"GCM\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GCM\",\n-                                \"description\": \"Block cipher mode of operation for decryption using the Advanced Encryption Standard\",\n-                                \"displayName\": \"Cipher Algorithm Mode\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cipher-algorithm-mode\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cipher-algorithm-padding\": {\n+                            \"connection.timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"The amount of time to wait to connect to Email server\",\n+                                \"displayName\": \"Connection timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"connection.timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"delete.messages\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"NoPadding\",\n-                                        \"displayName\": \"NoPadding\",\n-                                        \"value\": \"NoPadding\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS5Padding\",\n-                                        \"displayName\": \"PKCS5Padding\",\n-                                        \"value\": \"PKCS5Padding\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NoPadding\",\n-                                \"description\": \"Padding specification used in cipher operation for decryption using the Advanced Encryption Standard\",\n-                                \"displayName\": \"Cipher Algorithm Padding\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cipher-algorithm-padding\",\n+                                \"name\": \"delete.messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-specification\": {\n-                                \"description\": \"Specification providing the raw secret key or a password from which to derive a secret key\",\n-                                \"displayName\": \"Key Specification\",\n+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"key-specification-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n-                                        \"displayName\": \"PASSWORD\",\n-                                        \"value\": \"PASSWORD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PASSWORD\",\n-                                \"description\": \"Format describing the configured Key Specification\",\n-                                \"displayName\": \"Key Specification Format\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification-format\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Decryption failed\",\n-                                \"name\": \"failure\"\n                             },\n-                            {\n-                                \"description\": \"Decryption succeeded\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AES\",\n-                            \"Argon2\",\n-                            \"PBKDF2\",\n-                            \"bcrypt\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\",\n-                            \"scrypt\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContent\",\n-                        \"typeDescription\": \"Decrypt content encrypted with AES and encoded according conventions added in NiFi 0.5.0 for the EncryptContent Processor. The Processor reads the first 256 bytes to determine the presence of a cryptographic salt based on finding the 'NiFiSALT' delimiter. The salt is not present for content encrypted with a raw hexadecimal key. The Processor determines the presence of the initialization vector based on finding the 'NiFiIV' delimiter.The salt format indicates the Key Derivation Function that the Processor uses to generate a secret key based on a configured password. The Processor derives keys with a size of 128 bits according to the conventions implemented in NiFi 0.5.0.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Private Key Identities\": {\n+                            \"host\": {\n+                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n+                                \"displayName\": \"Host Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"oauth2-access-token-provider\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PROPERTIES\"\n+                                            \"oauth-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Private Key Source\",\n-                                        \"propertyName\": \"Private Key Source\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"One or more X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n-                                \"displayName\": \"Private Key Identities\",\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Identities\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Private Key Identity Resources\": {\n+                            \"password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"RESOURCES\"\n+                                            \"password-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Private Key Source\",\n-                                        \"propertyName\": \"Private Key Source\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"One or more files or URLs containing X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n-                                \"displayName\": \"Private Key Identity Resources\",\n+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Identity Resources\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"port\": {\n+                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Load one or more keys from configured properties\",\n-                                        \"displayName\": \"PROPERTIES\",\n-                                        \"value\": \"PROPERTIES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Load one or more keys from files or URLs\",\n-                                        \"displayName\": \"RESOURCES\",\n-                                        \"value\": \"RESOURCES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PROPERTIES\",\n-                                \"description\": \"Source of information determines the loading strategy for X25519 Private Key Identities\",\n-                                \"displayName\": \"Private Key Source\",\n+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Source\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Failed\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Decryption Completed\",\n+                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ChaCha20-Poly1305\",\n-                            \"X25519\",\n-                            \"age\",\n-                            \"age-encryption.org\",\n-                            \"encryption\"\n+                            \"Consume\",\n+                            \"Email\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\",\n+                            \"POP3\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentAge\",\n-                        \"typeDescription\": \"Decrypt content using the age-encryption.org/v1 specification. Detects binary or ASCII armored content encoding using the initial file header bytes. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n+                        \"type\": \"org.apache.nifi.processors.email.ConsumePOP3\",\n+                        \"typeDescription\": \"Consumes messages from Email Server using POP3 protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -11101,213 +12725,70 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"encryption-scheme\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHMD5AND192BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with MD5 digest and Data Encryption Standard 64 bit keys. OID 1.2.840.113549.1.5.3\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_DES\",\n-                                        \"value\": \"PBEWITHMD5ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS Scheme 1 with MD5 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.6\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_RC2\",\n-                                        \"value\": \"PBEWITHMD5ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHAAND192BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHAAND256BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Data Encryption Standard. OID 1.2.840.113549.1.5.10\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DES\",\n-                                        \"value\": \"PBEWITHSHA1ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 128 bit keys. OID 1.2.840.113549.1.12.1.4\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_128\",\n-                                        \"value\": \"PBEWITHSHAAND2-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 192 bit keys. OID 1.2.840.113549.1.12.1.3\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_192\",\n-                                        \"value\": \"PBEWITHSHAAND3-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.11\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2\",\n-                                        \"value\": \"PBEWITHSHA1ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 128 bit keys. OID 1.2.840.113549.1.12.1.5\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 40 bit keys. OID 1.2.840.113549.1.12.1.6\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 128 bit keys. OID 1.2.840.113549.1.12.1.1\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 40 bit keys. OID 1.2.840.113549.1.12.1.2\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Twofish in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_TWOFISH\",\n-                                        \"value\": \"PBEWITHSHAANDTWOFISH-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHA256AND128BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHA256AND192BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHA256AND256BITAES-CBC-BC\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n-                                \"displayName\": \"Encryption Scheme\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-scheme\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"key-derivation-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"OpenSSL Envelope BytesToKey using a digest algorithm with one iteration and optional salt of eight bytes\",\n-                                        \"displayName\": \"OPENSSL_EVP_BYTES_TO_KEY\",\n-                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n-                                        \"displayName\": \"JASYPT_STANDARD\",\n-                                        \"value\": \"JASYPT_STANDARD\"\n-                                    }\n-                                ],\n-                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n-                                \"displayName\": \"Key Derivation Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-derivation-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption failed\",\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that could not be parsed\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Decryption succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Jasypt\",\n-                            \"OpenSSL\",\n-                            \"PBES1\",\n-                            \"PKCS5\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\"\n+                            \"email\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n-                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Password-Based Encryption Scheme\",\n-                                \"name\": \"pbe.scheme\"\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n                             {\n-                                \"description\": \"Password-Based Encryption Block Cipher\",\n-                                \"name\": \"pbe.symmetric.cipher\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.attachment.parent.filename \"\n                             },\n                             {\n-                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n-                                \"name\": \"pbe.digest.algorithm\"\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.attachment.parent.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"The mime type of the attachment.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -11320,152 +12801,121 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Binary encoding\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"ASCII Armor encoding\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"Output encoding for encrypted files. Binary encoding provides optimal processing performance.\",\n-                                \"displayName\": \"File Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Public Key Recipient Resources\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RESOURCES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Public Key Source\",\n-                                        \"propertyName\": \"Public Key Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more files or URLs containing X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n-                                \"displayName\": \"Public Key Recipient Resources\",\n+                            \"CAPTURED_HEADERS\": {\n+                                \"defaultValue\": \"x-mailer\",\n+                                \"description\": \"COLON separated list of additional headers to be extracted from the flowfile content.NOTE the header key is case insensitive and will be matched as lower-case. Values will respect email contents.\",\n+                                \"displayName\": \"Additional Header List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Public Key Recipient Resources\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n+                                \"name\": \"CAPTURED_HEADERS\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Public Key Recipients\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PROPERTIES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Public Key Source\",\n-                                        \"propertyName\": \"Public Key Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n-                                \"displayName\": \"Public Key Recipients\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Public Key Recipients\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": true\n-                            },\n-                            \"Public Key Source\": {\n+                            \"STRICT_ADDRESS_PARSING\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Load one or more keys from configured properties\",\n-                                        \"displayName\": \"PROPERTIES\",\n-                                        \"value\": \"PROPERTIES\"\n+                                        \"description\": \"Strict email address format will be enforced. FlowFiles will be transfered to the failure relationship if the email address is invalid.\",\n+                                        \"displayName\": \"Strict Address Parsing\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Load one or more keys from files or URLs\",\n-                                        \"displayName\": \"RESOURCES\",\n-                                        \"value\": \"RESOURCES\"\n+                                        \"description\": \"Accept emails, even if the address is poorly formed and doesn't strictly comply with RFC Validation.\",\n+                                        \"displayName\": \"Non-Strict Address Parsing\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PROPERTIES\",\n-                                \"description\": \"Source of information determines the loading strategy for X25519 Public Key Recipients\",\n-                                \"displayName\": \"Public Key Source\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If \\\"strict\\\", strict address format parsing rules are applied to mailbox and mailbox list fields, such as \\\"to\\\" and \\\"from\\\" headers, and FlowFiles with poorly formed addresses will be routed to the failure relationship, similar to messages that fail RFC compliant format validation. If \\\"non-strict\\\", the processor will extract the contents of mailbox list headers as comma-separated values without attempting to parse each value as well-formed Internet mailbox addresses. This is optional and defaults to Strict Address Parsing\",\n+                                \"displayName\": \"Email Address Parsing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Public Key Source\",\n-                                \"required\": true,\n+                                \"name\": \"STRICT_ADDRESS_PARSING\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.DecryptContentAge\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Encryption Failed\",\n+                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Encryption Completed\",\n+                                \"description\": \"Extraction was successful\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ChaCha20-Poly1305\",\n-                            \"X25519\",\n-                            \"age\",\n-                            \"age-encryption.org\",\n-                            \"encryption\"\n+                            \"email\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.EncryptContentAge\",\n-                        \"typeDescription\": \"Encrypt content using the age-encryption.org/v1 specification. Supports binary or ASCII armored content encoding using configurable properties. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailHeaders\",\n+                        \"typeDescription\": \"Using the flowfile content as source of data, extract header from an RFC compliant  email file adding the relevant attributes to the flowfile. This processor does not perform extensive RFC validation but still requires a bare minimum compliance with RFC 2822\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Each individual BCC recipient (if available)\",\n+                                \"name\": \"email.headers.bcc.*\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual CC recipient (if available)\",\n+                                \"name\": \"email.headers.cc.*\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual mailbox contained in the From  of the Email (array as per RFC-2822)\",\n+                                \"name\": \"email.headers.from.*\"\n+                            },\n+                            {\n+                                \"description\": \"The value of the Message-ID header (if available)\",\n+                                \"name\": \"email.headers.message-id\"\n+                            },\n+                            {\n+                                \"description\": \"The Received-Date of the message (if available)\",\n+                                \"name\": \"email.headers.received_date\"\n+                            },\n+                            {\n+                                \"description\": \"Date the message was sent\",\n+                                \"name\": \"email.headers.sent_date\"\n+                            },\n+                            {\n+                                \"description\": \"Subject of the message (if available)\",\n+                                \"name\": \"email.headers.subject\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual TO recipient (if available)\",\n+                                \"name\": \"email.headers.to.*\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attachments of the message\",\n+                                \"name\": \"email.attachment_count\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -11477,1009 +12927,431 @@\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"mac-algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA256\",\n-                                        \"value\": \"HmacSHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA512\",\n-                                        \"value\": \"HmacSHA512\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hashed Message Authentication Code Function\",\n-                                \"displayName\": \"Message Authentication Code Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mac-algorithm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-authentication-code\": {\n-                                \"description\": \"The MAC to compare with the calculated value\",\n-                                \"displayName\": \"Message Authentication Code\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-authentication-code\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-authentication-code-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Message Authentication Code\",\n-                                \"displayName\": \"Message Authentication Code Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-authentication-code-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"secret-key\": {\n-                                \"description\": \"Secret key to calculate the hash\",\n-                                \"displayName\": \"Secret Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"secret-key-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF8\",\n-                                        \"value\": \"UTF8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Secret Key\",\n-                                \"displayName\": \"Secret Key Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Each original flowfile (i.e. before extraction) will be routed to the original relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Signature Verification Failed\",\n+                                \"description\": \"Each individual flowfile that could not be parsed will be routed to the failure relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"HMAC\",\n-                            \"MAC\",\n-                            \"Signing\"\n+                            \"email\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.cipher.VerifyContentMAC\",\n-                        \"typeDescription\": \"Calculates a Message Authentication Code using the provided Secret Key and compares it with the provided MAC property\",\n+                        \"type\": \"org.apache.nifi.processors.email.ExtractTNEFAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n-                                \"name\": \"mac.calculated\"\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n                             {\n-                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n-                                \"name\": \"mac.encoding\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.tnef.attachment.parent.filename \"\n                             },\n                             {\n-                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n-                                \"name\": \"mac.algorithm\"\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.tnef.attachment.parent.uuid\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-file-resource-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-file-resource-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"file-path\": {\n-                                \"defaultValue\": \"${absolute.path}/${filename}\",\n-                                \"description\": \"Path to a file that can be accessed locally.\",\n-                                \"displayName\": \"File Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-path\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"file\",\n-                            \"resource\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.fileresource.service.StandardFileResourceService\",\n-                        \"typeDescription\": \"Provides a file resource for other components. The file needs to be available locally by Nifi (e.g. local disk or mounted storage). NiFi needs to have read permission to the file.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hazelcast-cache-manager\": {\n-                                \"description\": \"A Hazelcast Cache Manager which manages connections to Hazelcast and provides cache instances.\",\n-                                \"displayName\": \"Hazelcast Cache Manager\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-cache-manager\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"hazelcast-cache-name\": {\n-                                \"description\": \"The name of a given cache. A Hazelcast cluster may handle multiple independent caches, each identified by a name. Clients using caches with the same name are working on the same data structure within Hazelcast.\",\n-                                \"displayName\": \"Hazelcast Cache Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-cache-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-entry-ttl\": {\n-                                \"defaultValue\": \"5 min\",\n-                                \"description\": \"Indicates how long the written entries should exist in Hazelcast. Setting it to '0 secs' means that the datawill exists until its deletion or until the Hazelcast server is shut down. Using `EmbeddedHazelcastCacheManager` ascache manager will not provide policies to limit the size of the cache.\",\n-                                \"displayName\": \"Hazelcast Entry Lifetime\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-entry-ttl\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\",\n-                            \"map\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"hazelcast-cluster-name\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Name of the Hazelcast cluster.\",\n-                                \"displayName\": \"Hazelcast Cluster Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-cluster-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-clustering-strategy\": {\n+                            \"CLIENT_AUTH\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No high availability or data replication is provided, every node has access only to the data stored locally.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Creates Hazelcast cluster based on the NiFi cluster: It expects every NiFi nodes to have a running Hazelcast instance on the same port as specified in the Hazelcast Port property. No explicit listing of the instances is needed.\",\n-                                        \"displayName\": \"All Nodes\",\n-                                        \"value\": \"all_nodes\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Works with an explicit list of Hazelcast instances, creating a cluster using the listed instances. This provides greater control, making it possible to utilize only certain nodes as Hazelcast servers. The list of Hazelcast instances can be set in the property \\\"Hazelcast Instances\\\". The list items must refer to hosts within the NiFi cluster, no external Hazelcast is allowed. NiFi nodes are not listed will be join to the Hazelcast cluster as clients.\",\n-                                        \"displayName\": \"Explicit\",\n-                                        \"value\": \"explicit\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL_CONTEXT_SERVICE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Specifies with what strategy the Hazelcast cluster should be created.\",\n-                                \"displayName\": \"Hazelcast Clustering Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-clustering-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-instances\": {\n-                                \"description\": \"Only used with \\\"Explicit\\\" Clustering Strategy! List of NiFi instance host names which should be part of the Hazelcast cluster. Host names are separated by comma. The port specified in the \\\"Hazelcast Port\\\" property will be used as server port. The list must contain every instance that will be part of the cluster. Other instances will join the Hazelcast cluster as clients.\",\n-                                \"displayName\": \"Hazelcast Instances\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-instances\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-port\": {\n-                                \"defaultValue\": \"5701\",\n-                                \"description\": \"Port for the Hazelcast instance to use.\",\n-                                \"displayName\": \"Hazelcast Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n-                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hazelcast-cluster-name\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"Name of the Hazelcast cluster.\",\n-                                \"displayName\": \"Hazelcast Cluster Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-cluster-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-connection-timeout\": {\n-                                \"defaultValue\": \"20 secs\",\n-                                \"description\": \"The maximum amount of time the client tries to connect or reconnect before giving up.\",\n-                                \"displayName\": \"Hazelcast Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-connection-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-retry-backoff-initial\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"description\": \"The amount of time the client waits before it tries to reestablish connection for the first time.\",\n-                                \"displayName\": \"Hazelcast Initial Backoff\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-initial\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-retry-backoff-maximum\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"The maximum amount of time the client waits before it tries to reestablish connection.\",\n-                                \"displayName\": \"Hazelcast Maximum Backoff\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-maximum\",\n+                                \"name\": \"CLIENT_AUTH\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-retry-backoff-multiplier\": {\n-                                \"defaultValue\": \"1.5\",\n-                                \"description\": \"A multiplier by which the wait time is increased before each attempt to reestablish connection.\",\n-                                \"displayName\": \"Hazelcast Backoff Multiplier\",\n+                            \"SMTP_HOSTNAME\": {\n+                                \"description\": \"The hostname to be embedded into the banner displayed when an SMTP client connects to the processor TCP port .\",\n+                                \"displayName\": \"SMTP hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-multiplier\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hazelcast-server-address\": {\n-                                \"description\": \"Addresses of one or more the Hazelcast instances, using {host:port} format, separated by comma.\",\n-                                \"displayName\": \"Hazelcast Server Address\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-server-address\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.ExternalHazelcastCacheManager\",\n-                        \"typeDescription\": \"A service that provides cache instances backed by Hazelcast running outside of NiFi.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-proxy-configuration-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-proxy-configuration-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"proxy-server-host\": {\n-                                \"description\": \"Proxy server hostname or ip-address.\",\n-                                \"displayName\": \"Proxy Server Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-server-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-server-port\": {\n-                                \"description\": \"Proxy server port number.\",\n-                                \"displayName\": \"Proxy Server Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-server-port\",\n+                                \"name\": \"SMTP_HOSTNAME\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type.\",\n-                                \"displayName\": \"Proxy Type\",\n+                            \"SMTP_MAXIMUM_CONNECTIONS\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of simultaneous SMTP connections.\",\n+                                \"displayName\": \"Maximum number of SMTP connection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-type\",\n+                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-user-name\": {\n-                                \"description\": \"The name of the proxy client for user authentication.\",\n-                                \"displayName\": \"Proxy User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-user-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-user-password\": {\n-                                \"description\": \"The password of the proxy client for user authentication.\",\n-                                \"displayName\": \"Proxy User Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-user-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"socks-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS4\",\n-                                        \"value\": \"SOCKS4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS5\",\n-                                        \"value\": \"SOCKS5\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SOCKS5\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SOCKS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Proxy Type\",\n-                                        \"propertyName\": \"proxy-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"SOCKS Protocol Version\",\n-                                \"displayName\": \"SOCKS Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"socks-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Proxy\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.proxy.StandardProxyConfigurationService\",\n-                        \"typeDescription\": \"Provides a set of configurations for different NiFi components to use a proxy server.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-web-client-provider-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"connect-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing during initial socket connection\",\n-                                \"displayName\": \"Connect Timeout\",\n+                            \"SMTP_MAXIMUM_MSG_SIZE\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum number of bytes the server will accept.\",\n+                                \"displayName\": \"SMTP Maximum Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connect-timeout\",\n+                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing while reading socket responses\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"SMTP_PORT\": {\n+                                \"description\": \"The TCP port the ListenSMTP processor will bind to.NOTE that on Unix derivative operating  systems this port must be higher than 1024 unless NiFi is running as with root user permissions.\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"name\": \"SMTP_PORT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"redirect-handling-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FOLLOWED\",\n-                                        \"value\": \"FOLLOWED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IGNORED\",\n-                                        \"value\": \"IGNORED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FOLLOWED\",\n-                                \"description\": \"Handling strategy for responding to HTTP 301 or 302 redirects received with a Location header\",\n-                                \"displayName\": \"Redirect Handling Strategy\",\n+                            \"SMTP_TIMEOUT\": {\n+                                \"defaultValue\": \"60 seconds\",\n+                                \"description\": \"The maximum time to wait for an action of SMTP client.\",\n+                                \"displayName\": \"SMTP connection timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redirect-handling-strategy\",\n+                                \"name\": \"SMTP_TIMEOUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"SSL Context Service overrides system default TLS settings for HTTPS communication\",\n+                            \"SSL_CONTEXT_SERVICE\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"SSL_CONTEXT_SERVICE\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"write-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"Maximum amount of time to wait before failing while writing socket requests\",\n-                                \"displayName\": \"Write Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"write-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All new messages will be routed as FlowFiles to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Client\",\n-                            \"HTTP\",\n-                            \"Web\"\n+                            \"email\",\n+                            \"listen\",\n+                            \"smtp\"\n                         ],\n-                        \"type\": \"org.apache.nifi.web.client.provider.service.StandardWebClientServiceProvider\",\n-                        \"typeDescription\": \"Web Client Service Provider with support for configuring standard HTTP connection properties\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.email.ListenSMTP\",\n+                        \"typeDescription\": \"This processor implements a lightweight SMTP server to an arbitrary port, allowing nifi to listen for incoming email. Note this server does not perform any email validation. If direct exposure to the internet is sought, it may be a better idea to use the combination of NiFi and an industrial scale MTA (e.g. Postfix). Threading for this processor is managed by the underlying smtp server used so the processor need not support more than one thread.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The value used during HELO\",\n+                                \"name\": \"smtp.helo\"\n+                            },\n+                            {\n+                                \"description\": \"The serial numbers for each of the certificates used by an TLS peer\",\n+                                \"name\": \"smtp.certificates.*.serial\"\n+                            },\n+                            {\n+                                \"description\": \"The principal for each of the certificates used by an TLS peer\",\n+                                \"name\": \"smtp.certificates.*.principal\"\n+                            },\n+                            {\n+                                \"description\": \"The source IP and port of the SMTP connection\",\n+                                \"name\": \"smtp.src\"\n+                            },\n+                            {\n+                                \"description\": \"The value used during MAIL FROM (i.e. envelope)\",\n+                                \"name\": \"smtp.from\"\n+                            },\n+                            {\n+                                \"description\": \"The values used during RCPT TO (i.e. envelope)\",\n+                                \"name\": \"smtp.recipient.*\"\n+                            },\n+                            {\n+                                \"description\": \"Mime type of the message\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n                 ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-mqtt-nar\",\n+            \"artifact\": \"nifi-splunk-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Broker URI\": {\n-                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n-                                \"displayName\": \"Broker URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Broker URI\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client ID\": {\n-                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n-                                \"displayName\": \"Client ID\",\n+                            \"Application\": {\n+                                \"description\": \"The Splunk Application to query.\",\n+                                \"displayName\": \"Application\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Client ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout (seconds)\": {\n-                                \"defaultValue\": \"30\",\n-                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n-                                \"displayName\": \"Connection Timeout (seconds)\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Max wait time for connection to the Splunk server.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Group ID\": {\n-                                \"description\": \"MQTT consumer group ID to use. If group ID not set, client will connect as individual consumer.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"Earliest Time\": {\n+                                \"description\": \"The value to use for the earliest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n+                                \"displayName\": \"Earliest Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Group ID\",\n+                                \"name\": \"Earliest Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Alive Interval (seconds)\": {\n-                                \"defaultValue\": \"60\",\n-                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n-                                \"displayName\": \"Keep Alive Interval (seconds)\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\n-                                \"required\": false,\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Message\": {\n-                                \"description\": \"The message to send as the client's Last Will.\",\n-                                \"displayName\": \"Last Will Message\",\n+                            \"Latest Time\": {\n+                                \"description\": \"The value to use for the latest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n+                                \"displayName\": \"Latest Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Message\",\n+                                \"name\": \"Latest Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will QoS Level\": {\n+                            \"Output Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ATOM\",\n+                                        \"value\": \"ATOM\"\n                                     },\n                                     {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CSV\",\n+                                        \"value\": \"CSV\"\n                                     },\n                                     {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n-                                \"displayName\": \"Last Will QoS Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will QoS Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Retain\": {\n-                                \"allowableValues\": [\n-                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"JSON\",\n+                                        \"value\": \"JSON\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n-                                        \"displayName\": \"v3 AUTO\",\n-                                        \"value\": \"0\"\n+                                        \"displayName\": \"JSON_COLS\",\n+                                        \"value\": \"JSON_COLS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n+                                        \"displayName\": \"JSON_ROWS\",\n+                                        \"value\": \"JSON_ROWS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"MQTT Specification Version\",\n+                                \"defaultValue\": \"JSON\",\n+                                \"description\": \"The output mode for the results.\",\n+                                \"displayName\": \"Output Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MQTT Specification Version\",\n+                                \"name\": \"Output Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Queue Size\": {\n-                                \"description\": \"The MQTT messages are always being sent to subscribers on a topic regardless of how frequently the processor is scheduled to run. If the 'Run Schedule' is significantly behind the rate at which the messages are arriving to this processor, then a back up can occur in the internal queue of this processor. This property specifies the maximum number of messages this processor will hold in memory at one time in the internal queue. This data would be lost in case of a NiFi restart.\",\n-                                \"displayName\": \"Max Queue Size\",\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Queue Size\",\n-                                \"required\": true,\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\n+                                \"description\": \"The password to authenticate to Splunk.\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Quality of Service(QoS)\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The Quality of Service (QoS) to receive the message with. Accepts values '0', '1' or '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'.\",\n-                                \"displayName\": \"Quality of Service (QoS)\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8089\",\n+                                \"description\": \"The port of the Splunk server.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quality of Service(QoS)\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Query\": {\n+                                \"defaultValue\": \"search * | head 100\",\n+                                \"description\": \"The query to execute. Typically beginning with a <search> command followed by a search clause, such as <search source=\\\"tcp:7689\\\"> to search for messages received on TCP port 7689.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"Read Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Max wait time for response from the Splunk server.\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Read Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"SSL Context Service\": {\n                                 \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"SSL Context Service\",\n@@ -12488,4280 +13360,3361 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n+                            \"Scheme\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n-                                \"required\": false,\n+                                \"name\": \"Scheme\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Session state\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"Session state\",\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session state\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Topic Filter\": {\n-                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n-                                \"displayName\": \"Topic Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Topic Filter\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to use when connecting to the broker\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Security Protocol\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"add-attributes-as-fields\": {\n+                            \"Time Field Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Search based on the time of the event which may be different than when the event was indexed.\",\n+                                        \"displayName\": \"Event Time\",\n+                                        \"value\": \"Event Time\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n+                                        \"displayName\": \"Index Time\",\n+                                        \"value\": \"Index Time\"\n                                     }\n                                 ],\n-                                \"description\": \"If setting this property to true, default fields are going to be added in each record: _topic, _qos, _isDuplicate, _isRetained.\",\n-                                \"displayName\": \"Add attributes as fields\",\n+                                \"defaultValue\": \"Event Time\",\n+                                \"description\": \"Indicates whether to search by the time attached to the event, or by the time the event was indexed in Splunk.\",\n+                                \"displayName\": \"Time Field Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"add-attributes-as-fields\",\n+                                \"name\": \"Time Field Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"With this property, you have an option to output FlowFiles which contains multiple messages. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple messages. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each message received will result in a single FlowFile. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing received MQTT Messages into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Time Range Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The processor will manage the date ranges of the query starting from the beginning of time.\",\n+                                        \"displayName\": \"Managed from Beginning\",\n+                                        \"value\": \"Managed from Beginning\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The processor will manage the date ranges of the query starting from the current time.\",\n+                                        \"displayName\": \"Managed from Current\",\n+                                        \"value\": \"Managed from Current\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The the time range provided through the Earliest Time and Latest Time properties will be used.\",\n+                                        \"displayName\": \"Provided\",\n+                                        \"value\": \"Provided\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Provided\",\n+                                \"description\": \"Indicates how to apply time ranges to each execution of the query. Selecting a managed option allows the processor to apply a time range from the last execution time to the current execution time. When using <Managed from Beginning>, an earliest time will not be applied on the first execution, and thus all records searched. When using <Managed from Current> the earliest time of the first execution will be the initial execution time. When using <Provided>, the time range will come from the Earliest Time and Latest Time properties, or no time range will be applied if these properties are left blank.\",\n+                                \"displayName\": \"Time Range Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n-                            },\n-                            {\n-                                \"description\": \"The MQTT message output\",\n-                                \"name\": \"Message\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The 'Max Queue Size' specifies the maximum number of messages that can be hold in memory by NiFi by a single instance of this processor. A high value for this property could represent a lot of data being stored in memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mqtt.ConsumeMQTT\",\n-                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"MQTT broker that was the message source\",\n-                                \"name\": \"mqtt.broker\"\n-                            },\n-                            {\n-                                \"description\": \"MQTT topic on which message was received\",\n-                                \"name\": \"mqtt.topic\"\n-                            },\n-                            {\n-                                \"description\": \"The quality of service for this message.\",\n-                                \"name\": \"mqtt.qos\"\n-                            },\n-                            {\n-                                \"description\": \"Whether or not this message might be a duplicate of one which has already been received.\",\n-                                \"name\": \"mqtt.isDuplicate\"\n+                                \"name\": \"Time Range Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Whether or not this message was from a current publisher, or was \\\"retained\\\" by the server as the last message published on the topic.\",\n-                                \"name\": \"mqtt.isRetained\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Broker URI\": {\n-                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n-                                \"displayName\": \"Broker URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Broker URI\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client ID\": {\n-                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n-                                \"displayName\": \"Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Client ID\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout (seconds)\": {\n-                                \"defaultValue\": \"30\",\n-                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n-                                \"displayName\": \"Connection Timeout (seconds)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout (seconds)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Alive Interval (seconds)\": {\n-                                \"defaultValue\": \"60\",\n-                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n-                                \"displayName\": \"Keep Alive Interval (seconds)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Message\": {\n-                                \"description\": \"The message to send as the client's Last Will.\",\n-                                \"displayName\": \"Last Will Message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Message\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will QoS Level\": {\n+                            \"Time Zone\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Abidjan\",\n+                                        \"value\": \"Africa/Abidjan\"\n                                     },\n                                     {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Accra\",\n+                                        \"value\": \"Africa/Accra\"\n                                     },\n                                     {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Addis_Ababa\",\n+                                        \"value\": \"Africa/Addis_Ababa\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n-                                \"displayName\": \"Last Will QoS Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will QoS Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Retain\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Algiers\",\n+                                        \"value\": \"Africa/Algiers\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Asmara\",\n+                                        \"value\": \"Africa/Asmara\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Asmera\",\n+                                        \"value\": \"Africa/Asmera\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bamako\",\n+                                        \"value\": \"Africa/Bamako\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bangui\",\n+                                        \"value\": \"Africa/Bangui\"\n+                                    },\n                                     {\n-                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n-                                        \"displayName\": \"v3 AUTO\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Banjul\",\n+                                        \"value\": \"Africa/Banjul\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n+                                        \"displayName\": \"Africa/Bissau\",\n+                                        \"value\": \"Africa/Bissau\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"Africa/Blantyre\",\n+                                        \"value\": \"Africa/Blantyre\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"MQTT Specification Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MQTT Specification Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Quality of Service(QoS)\": {\n-                                \"description\": \"The Quality of Service (QoS) to send the message with. Accepts three values '0', '1' and '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'. Expression language is allowed in order to support publishing messages with different QoS but the end value of the property must be either '0', '1' or '2'. \",\n-                                \"displayName\": \"Quality of Service (QoS)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quality of Service(QoS)\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Retain Message\": {\n-                                \"description\": \"Whether or not the retain flag should be set on the MQTT message.\",\n-                                \"displayName\": \"Retain Message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Retain Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Brazzaville\",\n+                                        \"value\": \"Africa/Brazzaville\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bujumbura\",\n+                                        \"value\": \"Africa/Bujumbura\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n-                                    }\n-                                ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Session state\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Cairo\",\n+                                        \"value\": \"Africa/Cairo\"\n+                                    },\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Casablanca\",\n+                                        \"value\": \"Africa/Casablanca\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"Session state\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session state\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Topic\": {\n-                                \"description\": \"The topic to publish the message to.\",\n-                                \"displayName\": \"Topic\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username to use when connecting to the broker\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-demarcator\": {\n-                                \"description\": \"With this property, you have an option to publish multiple messages from a single FlowFile. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart the FlowFile content. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each FlowFile will be published as a single message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an MQTT Message.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"publish\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n-                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-smbj-client-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-smbj-client-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"domain\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-dfs\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ceuta\",\n+                                        \"value\": \"Africa/Ceuta\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Conakry\",\n+                                        \"value\": \"Africa/Conakry\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hostname\": {\n-                                \"description\": \"The network host of the SMB file server.\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"The password used for authentication.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"port\": {\n-                                \"defaultValue\": \"445\",\n-                                \"description\": \"Port to use for connection.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"share\": {\n-                                \"description\": \"The network share to which files should be listed from. This is the \\\"first folder\\\"after the hostname: smb://hostname:port/[share]/dir1/dir2\",\n-                                \"displayName\": \"Share\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"share\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"smb-dialect\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Dakar\",\n+                                        \"value\": \"Africa/Dakar\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n+                                        \"value\": \"Africa/Dar_es_Salaam\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n+                                        \"displayName\": \"Africa/Djibouti\",\n+                                        \"value\": \"Africa/Djibouti\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n+                                        \"displayName\": \"Africa/Douala\",\n+                                        \"value\": \"Africa/Douala\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n+                                        \"displayName\": \"Africa/El_Aaiun\",\n+                                        \"value\": \"Africa/El_Aaiun\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n+                                        \"displayName\": \"Africa/Freetown\",\n+                                        \"value\": \"Africa/Freetown\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-encryption\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Gaborone\",\n+                                        \"value\": \"Africa/Gaborone\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Harare\",\n+                                        \"value\": \"Africa/Harare\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"username\": {\n-                                \"defaultValue\": \"Guest\",\n-                                \"description\": \"The username used for authentication.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-smb-client-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"samba, smb, cifs, files\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.smb.SmbjClientProviderService\",\n-                        \"typeDescription\": \"Provides access to SMB Sessions with shared authentication credentials.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hl7-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n-                                \"displayName\": \"Character Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hl7-input-version\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Johannesburg\",\n+                                        \"value\": \"Africa/Johannesburg\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"autodetect\",\n-                                        \"value\": \"autodetect\"\n+                                        \"displayName\": \"Africa/Juba\",\n+                                        \"value\": \"Africa/Juba\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.2\",\n-                                        \"value\": \"2.2\"\n+                                        \"displayName\": \"Africa/Kampala\",\n+                                        \"value\": \"Africa/Kampala\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3\",\n-                                        \"value\": \"2.3\"\n+                                        \"displayName\": \"Africa/Khartoum\",\n+                                        \"value\": \"Africa/Khartoum\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3.1\",\n-                                        \"value\": \"2.3.1\"\n+                                        \"displayName\": \"Africa/Kigali\",\n+                                        \"value\": \"Africa/Kigali\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.4\",\n-                                        \"value\": \"2.4\"\n+                                        \"displayName\": \"Africa/Kinshasa\",\n+                                        \"value\": \"Africa/Kinshasa\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.5\",\n-                                        \"value\": \"2.5\"\n+                                        \"displayName\": \"Africa/Lagos\",\n+                                        \"value\": \"Africa/Lagos\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.5.1\",\n-                                        \"value\": \"2.5.1\"\n+                                        \"displayName\": \"Africa/Libreville\",\n+                                        \"value\": \"Africa/Libreville\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.6\",\n-                                        \"value\": \"2.6\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"autodetect\",\n-                                \"description\": \"The HL7 version to use for parsing and validation\",\n-                                \"displayName\": \"HL7 Input Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hl7-input-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parse-segment-fields\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Lome\",\n+                                        \"value\": \"Africa/Lome\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Luanda\",\n+                                        \"value\": \"Africa/Luanda\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to parse HL7 segment fields into attributes\",\n-                                \"displayName\": \"Parse Segment Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parse-segment-fields\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"skip-validation\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Lubumbashi\",\n+                                        \"value\": \"Africa/Lubumbashi\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Lusaka\",\n+                                        \"value\": \"Africa/Lusaka\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate HL7 message values\",\n-                                \"displayName\": \"Skip Validation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"skip-validation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-segment-names\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Malabo\",\n+                                        \"value\": \"Africa/Malabo\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Maputo\",\n+                                        \"value\": \"Africa/Maputo\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use HL7 segment names in attributes\",\n-                                \"displayName\": \"Use Segment Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-segment-names\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as HL7 and its attributes extracted\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be mapped to FlowFile Attributes. This would happen if the FlowFile does not contain valid HL7 data\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"HL7\",\n-                            \"attributes\",\n-                            \"extract\",\n-                            \"health level 7\",\n-                            \"healthcare\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hl7.ExtractHL7Attributes\",\n-                        \"typeDescription\": \"Extracts information from an HL7 (Health Level 7) formatted FlowFile and adds the information as FlowFile Attributes. The attributes are named as <Segment Name> <dot> <Field Index>. If the segment is repeating, the naming will be <Segment Name> <underscore> <Segment Index> <dot> <Field Index>. For example, we may have an attribute named \\\"MHS.12\\\" with a value of \\\"2.1\\\" and an attribute named \\\"OBX_11.3\\\" with a value of \\\"93000^CPT4\\\".\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If a FlowFile matches the query, it will be routed to a relationship with the name of the property\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of a Relationship\",\n-                                \"value\": \"An HL7 Query Language query\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n-                                \"displayName\": \"Character Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be parsed as HL7 will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that comes into this processor will be routed to this relationship, unless it is routed to 'failure'\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"HL7\",\n-                            \"Health Level 7\",\n-                            \"healthcare\",\n-                            \"route\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hl7.RouteHL7\",\n-                        \"typeDescription\": \"Routes incoming HL7 data according to user-defined queries. To add a query, add a new property to the processor. The name of the property will become a new relationship for the processor, and the value is an HL7 Query Language query. If a FlowFile matches the query, a copy of the FlowFile will be routed to the associated relationship.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the relationship to which the FlowFile was routed\",\n-                                \"name\": \"RouteHL7.Route\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-apicurio-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-apicurio-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Cache Expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache Expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Cache Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry. The cache size must be a non-negative integer. When it is set to 0, the cache is effectively disabled.\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Schema Group ID\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The artifact Group ID for the schemas\",\n-                                \"displayName\": \"Schema Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Schema Group ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Schema Registry URL\": {\n-                                \"description\": \"The URL of the Schema Registry e.g. http://localhost:8080\",\n-                                \"displayName\": \"Schema Registry URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Registry URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Web Client Service Provider\": {\n-                                \"description\": \"Controller service for HTTP client operations\",\n-                                \"displayName\": \"Web Client Service Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Web Client Service Provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"apicurio\",\n-                            \"avro\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.apicurio.schemaregistry.ApicurioSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Apicurio Schema Registry so that those Schemas that are stored in the Apicurio Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Apicurio Schema Registry with their artifact identifiers.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-email-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Mark Messages as Read\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Maseru\",\n+                                        \"value\": \"Africa/Maseru\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Mbabane\",\n+                                        \"value\": \"Africa/Mbabane\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify if messages should be marked as read after retrieval.\",\n-                                \"displayName\": \"Mark Messages as Read\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mark Messages as Read\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use SSL\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Mogadishu\",\n+                                        \"value\": \"Africa/Mogadishu\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Monrovia\",\n+                                        \"value\": \"Africa/Monrovia\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies if IMAP connection must be obtained via SSL encrypted connection (i.e., IMAPS)\",\n-                                \"displayName\": \"Use SSL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use SSL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Nairobi\",\n+                                        \"value\": \"Africa/Nairobi\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ndjamena\",\n+                                        \"value\": \"Africa/Ndjamena\"\n                                     },\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"delete.messages\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Niamey\",\n+                                        \"value\": \"Africa/Niamey\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Nouakchott\",\n+                                        \"value\": \"Africa/Nouakchott\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"fetch.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"host\": {\n-                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n-                                \"displayName\": \"Host Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Ouagadougou\",\n+                                        \"value\": \"Africa/Ouagadougou\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Porto-Novo\",\n+                                        \"value\": \"Africa/Porto-Novo\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"port\": {\n-                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Consume\",\n-                            \"Email\",\n-                            \"Get\",\n-                            \"Imap\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumeIMAP\",\n-                        \"typeDescription\": \"Consumes messages from Email Server using IMAP protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Sao_Tome\",\n+                                        \"value\": \"Africa/Sao_Tome\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Timbuktu\",\n+                                        \"value\": \"Africa/Timbuktu\"\n                                     },\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"connection.timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"The amount of time to wait to connect to Email server\",\n-                                \"displayName\": \"Connection timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"delete.messages\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Tripoli\",\n+                                        \"value\": \"Africa/Tripoli\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Tunis\",\n+                                        \"value\": \"Africa/Tunis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete.messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"fetch.size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"fetch.size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"folder\": {\n-                                \"defaultValue\": \"INBOX\",\n-                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n-                                \"displayName\": \"Folder\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"host\": {\n-                                \"description\": \"Network address of Email server (e.g., pop.gmail.com, imap.gmail.com . . .)\",\n-                                \"displayName\": \"Host Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"host\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Windhoek\",\n+                                        \"value\": \"Africa/Windhoek\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Adak\",\n+                                        \"value\": \"America/Adak\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"port\": {\n-                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Consume\",\n-                            \"Email\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\",\n-                            \"POP3\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ConsumePOP3\",\n-                        \"typeDescription\": \"Consumes messages from Email Server using POP3 protocol. The raw-bytes of each received email message are written as contents of the FlowFile\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that could not be parsed\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailAttachments\",\n-                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.attachment.parent.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The UUID of the original FlowFile.\",\n-                                \"name\": \"email.attachment.parent.uuid\"\n-                            },\n-                            {\n-                                \"description\": \"The mime type of the attachment.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"CAPTURED_HEADERS\": {\n-                                \"defaultValue\": \"x-mailer\",\n-                                \"description\": \"COLON separated list of additional headers to be extracted from the flowfile content.NOTE the header key is case insensitive and will be matched as lower-case. Values will respect email contents.\",\n-                                \"displayName\": \"Additional Header List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CAPTURED_HEADERS\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"STRICT_ADDRESS_PARSING\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anchorage\",\n+                                        \"value\": \"America/Anchorage\"\n+                                    },\n                                     {\n-                                        \"description\": \"Strict email address format will be enforced. FlowFiles will be transfered to the failure relationship if the email address is invalid.\",\n-                                        \"displayName\": \"Strict Address Parsing\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anguilla\",\n+                                        \"value\": \"America/Anguilla\"\n                                     },\n                                     {\n-                                        \"description\": \"Accept emails, even if the address is poorly formed and doesn't strictly comply with RFC Validation.\",\n-                                        \"displayName\": \"Non-Strict Address Parsing\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If \\\"strict\\\", strict address format parsing rules are applied to mailbox and mailbox list fields, such as \\\"to\\\" and \\\"from\\\" headers, and FlowFiles with poorly formed addresses will be routed to the failure relationship, similar to messages that fail RFC compliant format validation. If \\\"non-strict\\\", the processor will extract the contents of mailbox list headers as comma-separated values without attempting to parse each value as well-formed Internet mailbox addresses. This is optional and defaults to Strict Address Parsing\",\n-                                \"displayName\": \"Email Address Parsing\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"STRICT_ADDRESS_PARSING\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Extraction was successful\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractEmailHeaders\",\n-                        \"typeDescription\": \"Using the flowfile content as source of data, extract header from an RFC compliant  email file adding the relevant attributes to the flowfile. This processor does not perform extensive RFC validation but still requires a bare minimum compliance with RFC 2822\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Each individual BCC recipient (if available)\",\n-                                \"name\": \"email.headers.bcc.*\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual CC recipient (if available)\",\n-                                \"name\": \"email.headers.cc.*\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual mailbox contained in the From  of the Email (array as per RFC-2822)\",\n-                                \"name\": \"email.headers.from.*\"\n-                            },\n-                            {\n-                                \"description\": \"The value of the Message-ID header (if available)\",\n-                                \"name\": \"email.headers.message-id\"\n-                            },\n-                            {\n-                                \"description\": \"The Received-Date of the message (if available)\",\n-                                \"name\": \"email.headers.received_date\"\n-                            },\n-                            {\n-                                \"description\": \"Date the message was sent\",\n-                                \"name\": \"email.headers.sent_date\"\n-                            },\n-                            {\n-                                \"description\": \"Subject of the message (if available)\",\n-                                \"name\": \"email.headers.subject\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual TO recipient (if available)\",\n-                                \"name\": \"email.headers.to.*\"\n-                            },\n-                            {\n-                                \"description\": \"Number of attachments of the message\",\n-                                \"name\": \"email.attachment_count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Each original flowfile (i.e. before extraction) will be routed to the original relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual flowfile that could not be parsed will be routed to the failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ExtractTNEFAttachments\",\n-                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.tnef.attachment.parent.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The UUID of the original FlowFile.\",\n-                                \"name\": \"email.tnef.attachment.parent.uuid\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"CLIENT_AUTH\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Antigua\",\n+                                        \"value\": \"America/Antigua\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"America/Araguaina\",\n+                                        \"value\": \"America/Araguaina\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n+                                        \"value\": \"America/Argentina/Buenos_Aires\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL_CONTEXT_SERVICE\"\n-                                    }\n-                                ],\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CLIENT_AUTH\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP_HOSTNAME\": {\n-                                \"description\": \"The hostname to be embedded into the banner displayed when an SMTP client connects to the processor TCP port .\",\n-                                \"displayName\": \"SMTP hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_HOSTNAME\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP_MAXIMUM_CONNECTIONS\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of simultaneous SMTP connections.\",\n-                                \"displayName\": \"Maximum number of SMTP connection\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP_MAXIMUM_MSG_SIZE\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum number of bytes the server will accept.\",\n-                                \"displayName\": \"SMTP Maximum Message Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP_PORT\": {\n-                                \"description\": \"The TCP port the ListenSMTP processor will bind to.NOTE that on Unix derivative operating  systems this port must be higher than 1024 unless NiFi is running as with root user permissions.\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_PORT\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP_TIMEOUT\": {\n-                                \"defaultValue\": \"60 seconds\",\n-                                \"description\": \"The maximum time to wait for an action of SMTP client.\",\n-                                \"displayName\": \"SMTP connection timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_TIMEOUT\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL_CONTEXT_SERVICE\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL_CONTEXT_SERVICE\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All new messages will be routed as FlowFiles to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"listen\",\n-                            \"smtp\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.email.ListenSMTP\",\n-                        \"typeDescription\": \"This processor implements a lightweight SMTP server to an arbitrary port, allowing nifi to listen for incoming email. Note this server does not perform any email validation. If direct exposure to the internet is sought, it may be a better idea to use the combination of NiFi and an industrial scale MTA (e.g. Postfix). Threading for this processor is managed by the underlying smtp server used so the processor need not support more than one thread.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The value used during HELO\",\n-                                \"name\": \"smtp.helo\"\n-                            },\n-                            {\n-                                \"description\": \"The serial numbers for each of the certificates used by an TLS peer\",\n-                                \"name\": \"smtp.certificates.*.serial\"\n-                            },\n-                            {\n-                                \"description\": \"The principal for each of the certificates used by an TLS peer\",\n-                                \"name\": \"smtp.certificates.*.principal\"\n-                            },\n-                            {\n-                                \"description\": \"The source IP and port of the SMTP connection\",\n-                                \"name\": \"smtp.src\"\n-                            },\n-                            {\n-                                \"description\": \"The value used during MAIL FROM (i.e. envelope)\",\n-                                \"name\": \"smtp.from\"\n-                            },\n-                            {\n-                                \"description\": \"The values used during RCPT TO (i.e. envelope)\",\n-                                \"name\": \"smtp.recipient.*\"\n-                            },\n-                            {\n-                                \"description\": \"Mime type of the message\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-shopify-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-shopify-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"CUSTOMERS\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Catamarca\",\n+                                        \"value\": \"America/Argentina/Catamarca\"\n+                                    },\n                                     {\n-                                        \"description\": \"The Customer resource stores information about a shop's customers, such as their contact details, their order history, and whether they've agreed to receive email marketing.\",\n-                                        \"displayName\": \"Customers\",\n-                                        \"value\": \"customers\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n+                                        \"value\": \"America/Argentina/ComodRivadavia\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CUSTOMERS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Customer resource to query\",\n-                                \"displayName\": \"Customer Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CUSTOMERS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"DISCOUNTS\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Cordoba\",\n+                                        \"value\": \"America/Argentina/Cordoba\"\n+                                    },\n                                     {\n-                                        \"description\": \"The PriceRule resource can be used to get discounts using conditions\",\n-                                        \"displayName\": \"Price Rules\",\n-                                        \"value\": \"price_rules\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Jujuy\",\n+                                        \"value\": \"America/Argentina/Jujuy\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"DISCOUNTS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Discount resource to query\",\n-                                \"displayName\": \"Discount Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DISCOUNTS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"INVENTORY\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/La_Rioja\",\n+                                        \"value\": \"America/Argentina/La_Rioja\"\n+                                    },\n                                     {\n-                                        \"description\": \"A location represents a geographical location where your stores, pop-up stores, headquarters and warehouses exist.\",\n-                                        \"displayName\": \"Locations\",\n-                                        \"value\": \"locations\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Mendoza\",\n+                                        \"value\": \"America/Argentina/Mendoza\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"INVENTORY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Inventory resource to query\",\n-                                \"displayName\": \"Inventory Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INVENTORY\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ONLINE_STORE\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n+                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n+                                    },\n                                     {\n-                                        \"description\": \"Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.\",\n-                                        \"displayName\": \"Blogs\",\n-                                        \"value\": \"blogs\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Salta\",\n+                                        \"value\": \"America/Argentina/Salta\"\n                                     },\n                                     {\n-                                        \"description\": \"A comment is a reader's response to an article in a blog.\",\n-                                        \"displayName\": \"Comments\",\n-                                        \"value\": \"comments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Juan\",\n+                                        \"value\": \"America/Argentina/San_Juan\"\n                                     },\n                                     {\n-                                        \"description\": \"Shopify stores come with a tool for creating basic HTML web pages.\",\n-                                        \"displayName\": \"Pages\",\n-                                        \"value\": \"pages\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Luis\",\n+                                        \"value\": \"America/Argentina/San_Luis\"\n                                     },\n                                     {\n-                                        \"description\": \"A redirect causes a visitor on a specific path on the shop's site to be automatically sent to a different location.\",\n-                                        \"displayName\": \"Redirects\",\n-                                        \"value\": \"redirects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Tucuman\",\n+                                        \"value\": \"America/Argentina/Tucuman\"\n                                     },\n                                     {\n-                                        \"description\": \"The ScriptTag resource represents remote JavaScript code that is loaded into the pages of a shop's storefront or the order status page of checkout.\",\n-                                        \"displayName\": \"Script Tags\",\n-                                        \"value\": \"script_tags\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Ushuaia\",\n+                                        \"value\": \"America/Argentina/Ushuaia\"\n                                     },\n                                     {\n-                                        \"description\": \"A theme controls the look and feel of a Shopify online store.\",\n-                                        \"displayName\": \"Themes\",\n-                                        \"value\": \"themes\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Aruba\",\n+                                        \"value\": \"America/Aruba\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ONLINE_STORE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Online Store resource to query\",\n-                                \"displayName\": \"Online Store Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ONLINE_STORE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ORDERS\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Asuncion\",\n+                                        \"value\": \"America/Asuncion\"\n+                                    },\n                                     {\n-                                        \"description\": \"A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase.\",\n-                                        \"displayName\": \"Abandoned Checkouts\",\n-                                        \"value\": \"checkouts\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Atikokan\",\n+                                        \"value\": \"America/Atikokan\"\n                                     },\n                                     {\n-                                        \"description\": \"Merchants can use draft orders to create orders on behalf of their customers.\",\n-                                        \"displayName\": \"Draft Orders\",\n-                                        \"value\": \"draft_orders\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Atka\",\n+                                        \"value\": \"America/Atka\"\n                                     },\n                                     {\n-                                        \"description\": \"An order is a customer's request to purchase one or more products from a shop.\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"orders\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bahia\",\n+                                        \"value\": \"America/Bahia\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ORDERS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Order resource to query\",\n-                                \"displayName\": \"Order Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ORDERS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"PRODUCT\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bahia_Banderas\",\n+                                        \"value\": \"America/Bahia_Banderas\"\n+                                    },\n                                     {\n-                                        \"description\": \"Collects are meant for managing the relationship between products and custom collections.\",\n-                                        \"displayName\": \"Collects\",\n-                                        \"value\": \"collects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Barbados\",\n+                                        \"value\": \"America/Barbados\"\n                                     },\n                                     {\n-                                        \"description\": \"A custom collection is a grouping of products that a merchant can create to make their store easier to browse. \",\n-                                        \"displayName\": \"Custom Collections\",\n-                                        \"value\": \"custom_collections\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Belem\",\n+                                        \"value\": \"America/Belem\"\n                                     },\n                                     {\n-                                        \"description\": \"Get products in a merchant's store \",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"products\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Belize\",\n+                                        \"value\": \"America/Belize\"\n                                     },\n                                     {\n-                                        \"description\": \"A smart collection is a grouping of products defined by rules that are set by the merchant.\",\n-                                        \"displayName\": \"Smart Collections\",\n-                                        \"value\": \"smart_collections\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Blanc-Sablon\",\n+                                        \"value\": \"America/Blanc-Sablon\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"PRODUCT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Product resource to query\",\n-                                \"displayName\": \"Product Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"PRODUCT\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SALES_CHANNELS\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Boa_Vista\",\n+                                        \"value\": \"America/Boa_Vista\"\n+                                    },\n                                     {\n-                                        \"description\": \"A CollectionListing resource represents a product collection that a merchant has made available to your sales channel.\",\n-                                        \"displayName\": \"Collection Listings\",\n-                                        \"value\": \"collection_listings\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bogota\",\n+                                        \"value\": \"America/Bogota\"\n                                     },\n                                     {\n-                                        \"description\": \"A ProductListing resource represents a Product which is available to your sales channel.\",\n-                                        \"displayName\": \"Product Listings\",\n-                                        \"value\": \"product_listings\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Boise\",\n+                                        \"value\": \"America/Boise\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SALES_CHANNELS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Sales Channel resource to query\",\n-                                \"displayName\": \"Sales Channel Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SALES_CHANNELS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"STORE_PROPERTIES\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Buenos_Aires\",\n+                                        \"value\": \"America/Buenos_Aires\"\n+                                    },\n                                     {\n-                                        \"description\": \"The Country resource represents the tax rates applied to orders from the different countries where a shop sells its products.\",\n-                                        \"displayName\": \"Countries\",\n-                                        \"value\": \"countries\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cambridge_Bay\",\n+                                        \"value\": \"America/Cambridge_Bay\"\n                                     },\n                                     {\n-                                        \"description\": \"Merchants who use Shopify Payments can allow customers to pay in their local currency on the online store.\",\n-                                        \"displayName\": \"Currencies\",\n-                                        \"value\": \"currencies\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Campo_Grande\",\n+                                        \"value\": \"America/Campo_Grande\"\n                                     },\n                                     {\n-                                        \"description\": \"Policy resource can be used to access the policies that a merchant has configured for their shop, such as their refund and privacy policies.\",\n-                                        \"displayName\": \"Policies\",\n-                                        \"value\": \"policies\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cancun\",\n+                                        \"value\": \"America/Cancun\"\n                                     },\n                                     {\n-                                        \"description\": \"ShippingZone resource can be used to view shipping zones and their countries, provinces, and shipping rates.\",\n-                                        \"displayName\": \"Shipping Zones\",\n-                                        \"value\": \"shipping_zones\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Caracas\",\n+                                        \"value\": \"America/Caracas\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"STORE_PROPERTIES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Category\",\n-                                        \"propertyName\": \"object-category\"\n-                                    }\n-                                ],\n-                                \"description\": \"Store Property resource to query\",\n-                                \"displayName\": \"Store Property Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"STORE_PROPERTIES\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"access-token\": {\n-                                \"description\": \"Access Token to authenticate requests\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"api-version\": {\n-                                \"defaultValue\": \"2022-10\",\n-                                \"description\": \"The Shopify REST API version\",\n-                                \"displayName\": \"API Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"incremental-delay\": {\n-                                \"defaultValue\": \"3 sec\",\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Catamarca\",\n+                                        \"value\": \"America/Catamarca\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and Shopify servers' clock are not in sync.\",\n-                                \"displayName\": \"Incremental Delay\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"incremental-delay\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"incremental-initial-start-time\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cayenne\",\n+                                        \"value\": \"America/Cayenne\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property specifies the start time when running the first request. Represents an ISO 8601-encoded date and time string. For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is represented as \\\"2019-09-07T15:50:00Z\\\".\",\n-                                \"displayName\": \"Incremental Initial Start Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"incremental-initial-start-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"is-incremental\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cayman\",\n+                                        \"value\": \"America/Cayman\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Chicago\",\n+                                        \"value\": \"America/Chicago\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects which were created or modified after the previous run time but before the current time.\",\n-                                \"displayName\": \"Incremental Loading\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"is-incremental\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"object-category\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Chihuahua\",\n+                                        \"value\": \"America/Chihuahua\"\n+                                    },\n                                     {\n-                                        \"description\": \"Query a Customer resource\",\n-                                        \"displayName\": \"Customers\",\n-                                        \"value\": \"CUSTOMERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ciudad_Juarez\",\n+                                        \"value\": \"America/Ciudad_Juarez\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Discount resource\",\n-                                        \"displayName\": \"Discounts\",\n-                                        \"value\": \"DISCOUNTS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Coral_Harbour\",\n+                                        \"value\": \"America/Coral_Harbour\"\n                                     },\n                                     {\n-                                        \"description\": \"Query an Inventory resource\",\n-                                        \"displayName\": \"Inventory\",\n-                                        \"value\": \"INVENTORY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cordoba\",\n+                                        \"value\": \"America/Cordoba\"\n                                     },\n                                     {\n-                                        \"description\": \"Query an Online Store resource\",\n-                                        \"displayName\": \"Online Store\",\n-                                        \"value\": \"ONLINE_STORE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Costa_Rica\",\n+                                        \"value\": \"America/Costa_Rica\"\n                                     },\n                                     {\n-                                        \"description\": \"Query an Order resource\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"ORDERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Creston\",\n+                                        \"value\": \"America/Creston\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Product resource\",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"PRODUCT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cuiaba\",\n+                                        \"value\": \"America/Cuiaba\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Sales Channel resource\",\n-                                        \"displayName\": \"Sales Channels\",\n-                                        \"value\": \"SALES_CHANNELS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Curacao\",\n+                                        \"value\": \"America/Curacao\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Store Property resource\",\n-                                        \"displayName\": \"Store Properties\",\n-                                        \"value\": \"STORE_PROPERTIES\"\n-                                    }\n-                                ],\n-                                \"description\": \"Shopify object category\",\n-                                \"displayName\": \"Object Category\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"object-category\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"result-limit\": {\n-                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n-                                \"displayName\": \"Result Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"result-limit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"store-domain\": {\n-                                \"description\": \"The domain of the Shopify store, e.g. nifistore.myshopify.com\",\n-                                \"displayName\": \"Store Domain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"store-domain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations\",\n-                                \"displayName\": \"Web Client Service Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"For a few resources the processor supports incremental loading. The list of the resources with the supported parameters can be found in the additional details.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"shopify\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.shopify.GetShopify\",\n-                        \"typeDescription\": \"Retrieves objects from a custom Shopify store. The processor yield time must be set to the account's rate limit accordingly.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-asana-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"asana-api-url\": {\n-                                \"defaultValue\": \"https://app.asana.com/api/1.0\",\n-                                \"description\": \"Base URL of Asana API. Leave it as default, unless you have your own Asana instance serving on a different URL. (typical for on-premise installations)\",\n-                                \"displayName\": \"API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-api-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"asana-personal-access-token\": {\n-                                \"description\": \"Similarly to entering your username/password into a website, when you access your Asana data via the API you need to authenticate. Personal Access Token (PAT) is an authentication mechanism for accessing the API. You can generate a PAT from the Asana developer console. Refer to Asana Authentication Quick Start for detailed instructions on getting started.\",\n-                                \"displayName\": \"Personal Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-personal-access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"asana-workspace-name\": {\n-                                \"description\": \"Specify which Asana workspace to use. Case sensitive. A workspace is the highest-level organizational unit in Asana. All projects and tasks have an associated workspace. An organization is a special kind of workspace that represents a company. In an organization, you can group your projects into teams.\",\n-                                \"displayName\": \"Workspace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-workspace-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-asana-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"asana\",\n-                            \"authentication\",\n-                            \"service\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.asana.StandardAsanaClientProviderService\",\n-                        \"typeDescription\": \"Common service to authenticate with Asana, and to work on a specified workspace.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"component-type\": {\n-                                \"description\": \"Components of the given type will produce a rule violation (i.e. they shouldn't exist). Either the simple or the fully qualified name of the type should be provided.\",\n-                                \"displayName\": \"Component Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"component-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"component\",\n-                            \"controller service\",\n-                            \"processor\",\n-                            \"type\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.flowanalysis.rules.DisallowComponentType\",\n-                        \"typeDescription\": \"Produces rule violations for each component (i.e. processors or controller services) of a given type.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"parameterProviders\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"db-type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Danmarkshavn\",\n+                                        \"value\": \"America/Danmarkshavn\"\n+                                    },\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson\",\n+                                        \"value\": \"America/Dawson\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson_Creek\",\n+                                        \"value\": \"America/Dawson_Creek\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Denver\",\n+                                        \"value\": \"America/Denver\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Detroit\",\n+                                        \"value\": \"America/Detroit\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dominica\",\n+                                        \"value\": \"America/Dominica\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Edmonton\",\n+                                        \"value\": \"America/Edmonton\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Eirunepe\",\n+                                        \"value\": \"America/Eirunepe\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbcp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"parameter-group-name-column\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/El_Salvador\",\n+                                        \"value\": \"America/El_Salvador\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"grouping-by-column\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n-                                        \"propertyName\": \"parameter-grouping-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a column containing the name of the parameter group into which the parameter should be mapped.\",\n-                                \"displayName\": \"Parameter Group Name Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-group-name-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-grouping-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ensenada\",\n+                                        \"value\": \"America/Ensenada\"\n+                                    },\n                                     {\n-                                        \"description\": \"A single table is partitioned by the 'Parameter Group Name Column'.  All rows with the same value in this column will map to a group of the same name.\",\n-                                        \"displayName\": \"Column\",\n-                                        \"value\": \"grouping-by-column\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Nelson\",\n+                                        \"value\": \"America/Fort_Nelson\"\n                                     },\n                                     {\n-                                        \"description\": \"An entire table maps to a Parameter Group.  The group name will be the table name.\",\n-                                        \"displayName\": \"Table Name\",\n-                                        \"value\": \"grouping-by-table-name\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"grouping-by-column\",\n-                                \"description\": \"The strategy used to group parameters.\",\n-                                \"displayName\": \"Parameter Grouping Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-grouping-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-name-column\": {\n-                                \"description\": \"The name of a column containing the parameter name.\",\n-                                \"displayName\": \"Parameter Name Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-name-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-value-column\": {\n-                                \"description\": \"The name of a column containing the parameter value.\",\n-                                \"displayName\": \"Parameter Value Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-value-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sql-where-clause\": {\n-                                \"description\": \"A optional SQL query 'WHERE' clause by which to filter all results.  The 'WHERE' keyword should not be included.\",\n-                                \"displayName\": \"SQL WHERE clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sql-where-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Wayne\",\n+                                        \"value\": \"America/Fort_Wayne\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"grouping-by-column\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n-                                        \"propertyName\": \"parameter-grouping-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the database table containing the parameters.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-names\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fortaleza\",\n+                                        \"value\": \"America/Fortaleza\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"grouping-by-table-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n-                                        \"propertyName\": \"parameter-grouping-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of names of the database tables containing the parameters.\",\n-                                \"displayName\": \"Table Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-names\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"sql\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.DatabaseParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from database tables\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read environment variables, which may contain environment credentials.\",\n-                                \"requiredPermission\": \"access environment credentials\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"environment-variable-inclusion-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Glace_Bay\",\n+                                        \"value\": \"America/Glace_Bay\"\n+                                    },\n                                     {\n-                                        \"description\": \"All Environment Variables will be included\",\n-                                        \"displayName\": \"Include All\",\n-                                        \"value\": \"include-all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Godthab\",\n+                                        \"value\": \"America/Godthab\"\n                                     },\n                                     {\n-                                        \"description\": \"List comma-separated Environment Variable names to include\",\n-                                        \"displayName\": \"Comma-Separated\",\n-                                        \"value\": \"comma-separated\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Goose_Bay\",\n+                                        \"value\": \"America/Goose_Bay\"\n                                     },\n                                     {\n-                                        \"description\": \"Include Environment Variable names that match a Regular Expression\",\n-                                        \"displayName\": \"Regular Expression\",\n-                                        \"value\": \"regex\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"include-all\",\n-                                \"description\": \"Indicates how Environment Variables should be included\",\n-                                \"displayName\": \"Environment Variable Inclusion Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"environment-variable-inclusion-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-environment-variables\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grand_Turk\",\n+                                        \"value\": \"America/Grand_Turk\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"regex\",\n-                                            \"comma-separated\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Environment Variable Inclusion Strategy\",\n-                                        \"propertyName\": \"environment-variable-inclusion-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies environment variable names that should be included from the fetched environment variables.\",\n-                                \"displayName\": \"Include Environment Variables\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-environment-variables\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-group-name\": {\n-                                \"defaultValue\": \"Environment Variables\",\n-                                \"description\": \"The name of the parameter group that will be fetched.  This indicates the name of the Parameter Context that may receive the fetched parameters.\",\n-                                \"displayName\": \"Parameter Group Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-group-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"environment\",\n-                            \"variable\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.EnvironmentVariableParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from environment variables\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"parameter-group-directories\": {\n-                                \"description\": \"A comma-separated list of directory absolute paths that will map to named parameter groups.  Each directory that contains files will map to a parameter group, named after the innermost directory in the path.  Files inside the directory will map to parameter names, whose values are the content of each respective file.\",\n-                                \"displayName\": \"Parameter Group Directories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-group-directories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-value-byte-limit\": {\n-                                \"defaultValue\": \"256 B\",\n-                                \"description\": \"The maximum byte size of a parameter value.  Since parameter values are pulled from the contents of files, this is a safeguard that can prevent memory issues if large files are included.\",\n-                                \"displayName\": \"Parameter Value Byte Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-value-byte-limit\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-value-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grenada\",\n+                                        \"value\": \"America/Grenada\"\n+                                    },\n                                     {\n-                                        \"description\": \"File content is Base64-encoded, and will be decoded before providing the value as a Parameter.\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"base64\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guadeloupe\",\n+                                        \"value\": \"America/Guadeloupe\"\n                                     },\n                                     {\n-                                        \"description\": \"File content is not encoded, and will be provided directly as a Parameter value.\",\n-                                        \"displayName\": \"Plain text\",\n-                                        \"value\": \"plaintext\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"base64\",\n-                                \"description\": \"Indicates how parameter values are encoded inside Parameter files.\",\n-                                \"displayName\": \"Parameter Value Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-value-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"file\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.KubernetesSecretParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from files, in the format provided by Kubernetes mounted secrets.  Parameter groups are indicated by a set of directories, and files within the directories map to parameter names. The content of the file becomes the parameter value.  Since Kubernetes mounted Secrets are base64-encoded, the parameter provider defaults to Base64-decoding the value of the parameter from the file.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Access Token\": {\n-                                \"description\": \"Access Token used for authentication against the 1Password APIs.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Connect Server\": {\n-                                \"description\": \"HTTP endpoint of the 1Password Connect Server to connect to. Example: http://localhost:8080\",\n-                                \"displayName\": \"Connect Server\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connect Server\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Web Client Service Provider\": {\n-                                \"description\": \"Controller service for HTTP client operations.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Web Client Service Provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"1Password\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.OnePasswordParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from 1Password Connect Server\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"attribute-list\": {\n-                                \"description\": \"Comma separated list of attributes to be included in the resulting CSV. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive and supports attribute names that contain commas. If an attribute specified in the list is not found it will be emitted to the resulting CSV with an empty string or null depending on the 'Null Value' property. If a core attribute is specified in this list and the 'Include Core Attributes' property is false, the core attribute will be included. The attribute list ALWAYS wins.\",\n-                                \"displayName\": \"Attribute List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"attribute-list\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"attributes-regex\": {\n-                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.  The final output will contain a combination of matches found in the ATTRIBUTE_LIST and ATTRIBUTE_REGEX.\",\n-                                \"displayName\": \"Attributes Regular Expression\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"attributes-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"destination\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guatemala\",\n+                                        \"value\": \"America/Guatemala\"\n+                                    },\n                                     {\n-                                        \"description\": \"The resulting CSV string will be placed into a new flowfile attribute named 'CSVData'.  The content of the flowfile will not be changed.\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guayaquil\",\n+                                        \"value\": \"America/Guayaquil\"\n                                     },\n                                     {\n-                                        \"description\": \"The resulting CSV string will be placed into the content of the flowfile.Existing flowfile context will be overwritten. 'CSVData' will not be written to at all (neither null nor empty string).\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if CSV value is written as a new flowfile attribute 'CSVData' or written in the flowfile content.\",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-core-attributes\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guyana\",\n+                                        \"value\": \"America/Guyana\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Halifax\",\n+                                        \"value\": \"America/Halifax\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes, which are contained in every FlowFile, should be included in the final CSV value generated.  Core attributes will be added to the end of the CSVData and CSVSchema strings.  The Attribute List property overrides this setting.\",\n-                                \"displayName\": \"Include Core Attributes\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-core-attributes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-schema\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Havana\",\n+                                        \"value\": \"America/Havana\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Hermosillo\",\n+                                        \"value\": \"America/Hermosillo\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true the schema (attribute names) will also be converted to a CSV string which will either be applied to a new attribute named 'CSVSchema' or applied at the first row in the content depending on the DESTINATION property setting.\",\n-                                \"displayName\": \"Include Schema\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-schema\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"null-value\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Indiana/Indianapolis\",\n+                                        \"value\": \"America/Indiana/Indianapolis\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Indiana/Knox\",\n+                                        \"value\": \"America/Indiana/Knox\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true a non existing or empty attribute will be 'null' in the resulting CSV. If false an empty string will be placed in the CSV\",\n-                                \"displayName\": \"Null Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"null-value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully converted attributes to CSV\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Failed to convert attributes to CSV\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"csv\",\n-                            \"flowfile\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.AttributesToCSV\",\n-                        \"typeDescription\": \"Generates a CSV representation of the input FlowFile Attributes. The resulting CSV can be written to either a newly generated attribute named 'CSVAttributes' or written to the FlowFile as content.  If the attribute value contains a comma, newline or double quote, then the attribute value will be escaped with double quotes.  Any double quote characters in the attribute value are escaped with another double quote.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"CSV representation of the Schema\",\n-                                \"name\": \"CSVSchema\"\n-                            },\n-                            {\n-                                \"description\": \"CSV representation of Attributes\",\n-                                \"name\": \"CSVData\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Attributes List\": {\n-                                \"description\": \"Comma separated list of attributes to be included in the resulting JSON. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive. If an attribute specified in the list is not found it will be be emitted to the resulting JSON with an empty string or NULL value.\",\n-                                \"displayName\": \"Attributes List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Indiana/Marengo\",\n+                                        \"value\": \"America/Indiana/Marengo\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"America/Indiana/Petersburg\",\n+                                        \"value\": \"America/Indiana/Petersburg\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if JSON value is written as a new flowfile attribute 'JSONAttributes' or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Core Attributes\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Indiana/Tell_City\",\n+                                        \"value\": \"America/Indiana/Tell_City\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Indiana/Vevay\",\n+                                        \"value\": \"America/Indiana/Vevay\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes which are contained in every FlowFile should be included in the final JSON value generated.\",\n-                                \"displayName\": \"Include Core Attributes\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Core Attributes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"JSON Handling Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Indiana/Vincennes\",\n+                                        \"value\": \"America/Indiana/Vincennes\"\n+                                    },\n                                     {\n-                                        \"description\": \"Escapes JSON attribute values to strings\",\n-                                        \"displayName\": \"Escaped\",\n-                                        \"value\": \"ESCAPED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Winamac\",\n+                                        \"value\": \"America/Indiana/Winamac\"\n                                     },\n                                     {\n-                                        \"description\": \"Handles JSON attribute values as nested structured objects or arrays\",\n-                                        \"displayName\": \"Nested\",\n-                                        \"value\": \"NESTED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ESCAPED\",\n-                                \"description\": \"Strategy to use for handling attributes which contain nested JSON.\",\n-                                \"displayName\": \"JSON Handling Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Handling Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Null Value\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indianapolis\",\n+                                        \"value\": \"America/Indianapolis\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Inuvik\",\n+                                        \"value\": \"America/Inuvik\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true a non existing selected attribute will be NULL in the resulting JSON. If false an empty string will be placed in the JSON\",\n-                                \"displayName\": \"Null Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pretty Print\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Iqaluit\",\n+                                        \"value\": \"America/Iqaluit\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Jamaica\",\n+                                        \"value\": \"America/Jamaica\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Jujuy\",\n+                                        \"value\": \"America/Jujuy\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"Apply pretty print formatting to the output.\",\n-                                \"displayName\": \"Pretty Print\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"attributes-to-json-regex\": {\n-                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.\",\n-                                \"displayName\": \"Attributes Regular Expression\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"attributes-to-json-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully converted attributes to JSON\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Failed to convert attributes to JSON\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"json\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.AttributesToJSON\",\n-                        \"typeDescription\": \"Generates a JSON representation of the input FlowFile Attributes. The resulting JSON can be written to either a new Attribute 'JSONAttributes' or written to the FlowFile as content. Attributes  which contain nested JSON objects can either be handled as JSON or as escaped JSON depending on the strategy chosen.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"JSON representation of Attributes\",\n-                                \"name\": \"JSONAttributes\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"record-stats-limit\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Limit the number of individual stats that are returned for each record path to the top N results.\",\n-                                \"displayName\": \"record-stats-limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"record-stats-limit\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-stats-reader\": {\n-                                \"description\": \"A record reader to use for reading the records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-stats-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a flowfile fails to be processed, it goes here.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"metrics\",\n-                            \"record\",\n-                            \"stats\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CalculateRecordStats\",\n-                        \"typeDescription\": \"A processor that can count the number of items in a record set, as well as provide counts based on user-defined criteria on subsets of the record set.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"A count of the records that contain a value for the user defined property.\",\n-                                \"name\": \"recordStats.<User Defined Property Name>.count\"\n-                            },\n-                            {\n-                                \"description\": \"Each value discovered for the user defined property will have its own count attribute. Total number of top N value counts to be added is defined by the limit configuration.\",\n-                                \"name\": \"recordStats.<User Defined Property Name>.<value>.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Juneau\",\n+                                        \"value\": \"America/Juneau\"\n+                                    },\n                                     {\n-                                        \"configuration\": \"Default property values are sufficient.\\nConnect the 'success' relationship to CompressContent.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.IdentifyMimeType\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Louisville\",\n+                                        \"value\": \"America/Kentucky/Louisville\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" = \\\"use mime.type attribute\\\"\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.CompressContent\"\n-                                    }\n-                                ],\n-                                \"description\": \"Check whether or not a FlowFile is compressed and if so, decompress it.\",\n-                                \"keywords\": [\n-                                    \"auto\",\n-                                    \"detect\",\n-                                    \"mime type\",\n-                                    \"compress\",\n-                                    \"decompress\",\n-                                    \"gzip\",\n-                                    \"bzip2\"\n-                                ],\n-                                \"notes\": \"If IdentifyMimeType determines that the content is not compressed, CompressContent will pass the FlowFile along to the 'success' relationship without attempting to decompress it.\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Compression Format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Monticello\",\n+                                        \"value\": \"America/Kentucky/Monticello\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n+                                        \"displayName\": \"America/Knox_IN\",\n+                                        \"value\": \"America/Knox_IN\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"America/Kralendijk\",\n+                                        \"value\": \"America/Kralendijk\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n+                                        \"displayName\": \"America/La_Paz\",\n+                                        \"value\": \"America/La_Paz\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n+                                        \"displayName\": \"America/Lima\",\n+                                        \"value\": \"America/Lima\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n+                                        \"displayName\": \"America/Los_Angeles\",\n+                                        \"value\": \"America/Los_Angeles\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n+                                        \"displayName\": \"America/Louisville\",\n+                                        \"value\": \"America/Louisville\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"America/Lower_Princes\",\n+                                        \"value\": \"America/Lower_Princes\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n+                                        \"displayName\": \"America/Maceio\",\n+                                        \"value\": \"America/Maceio\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy framed\",\n-                                        \"value\": \"snappy framed\"\n+                                        \"displayName\": \"America/Managua\",\n+                                        \"value\": \"America/Managua\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"displayName\": \"America/Manaus\",\n+                                        \"value\": \"America/Manaus\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"displayName\": \"America/Marigot\",\n+                                        \"value\": \"America/Marigot\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n-                                \"displayName\": \"Compression Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression Level\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Martinique\",\n+                                        \"value\": \"America/Martinique\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n+                                        \"displayName\": \"America/Matamoros\",\n+                                        \"value\": \"America/Matamoros\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n+                                        \"displayName\": \"America/Mazatlan\",\n+                                        \"value\": \"America/Mazatlan\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n+                                        \"displayName\": \"America/Mendoza\",\n+                                        \"value\": \"America/Mendoza\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n+                                        \"displayName\": \"America/Menominee\",\n+                                        \"value\": \"America/Menominee\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"America/Merida\",\n+                                        \"value\": \"America/Merida\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n+                                        \"displayName\": \"America/Metlakatla\",\n+                                        \"value\": \"America/Metlakatla\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n+                                        \"displayName\": \"America/Mexico_City\",\n+                                        \"value\": \"America/Mexico_City\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n+                                        \"displayName\": \"America/Miquelon\",\n+                                        \"value\": \"America/Miquelon\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"displayName\": \"America/Moncton\",\n+                                        \"value\": \"America/Moncton\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Monterrey\",\n+                                        \"value\": \"America/Monterrey\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"compress\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montevideo\",\n+                                        \"value\": \"America/Montevideo\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Compression Format\",\n-                                        \"propertyName\": \"Compression Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The compression level to use; this is valid only when using gzip, deflate or xz-lzma2 compression. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n-                                \"displayName\": \"Compression Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montreal\",\n+                                        \"value\": \"America/Montreal\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"compress\",\n-                                        \"value\": \"compress\"\n+                                        \"displayName\": \"America/Montserrat\",\n+                                        \"value\": \"America/Montserrat\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"decompress\",\n-                                        \"value\": \"decompress\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"compress\",\n-                                \"description\": \"Indicates whether the processor should compress content or decompress content. Must be either 'compress' or 'decompress'\",\n-                                \"displayName\": \"Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Update Filename\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Nassau\",\n+                                        \"value\": \"America/Nassau\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/New_York\",\n+                                        \"value\": \"America/New_York\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will remove the filename extension when decompressing data (only if the extension indicates the appropriate compression format) and add the appropriate extension when compressing data\",\n-                                \"displayName\": \"Update Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Update Filename\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"brotli\",\n-                            \"bzip2\",\n-                            \"compress\",\n-                            \"content\",\n-                            \"decompress\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n-                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. A common idiom is to precede CompressContent with IdentifyMimeType and configure Mode='decompress' AND Compression Format='use mime.type attribute'. When used in this manner, the MIME type is automatically detected and the data is decompressed, if necessary. If decompression is unnecessary, the data is passed through to the 'success' relationship. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Mode\\\" = \\\"compress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm should be used.\",\n-                                \"description\": \"Compress the contents of a FlowFile\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm was used to compress the data previously.\",\n-                                \"description\": \"Decompress the contents of a FlowFile\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the Mode property is set to compress, the appropriate MIME Type is set. If the Mode property is set to decompress and the file is successfully decompressed, this attribute is removed, as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Grouping Attribute\": {\n-                                \"description\": \"By default, a single \\\"throttle\\\" is used for all FlowFiles. If this value is specified, a separate throttle is used for each value specified by the attribute with this name. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Grouping Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Data Rate\": {\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Nipigon\",\n+                                        \"value\": \"America/Nipigon\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n-                                \"displayName\": \"Maximum Data Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Data Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum FlowFile Rate\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nome\",\n+                                        \"value\": \"America/Nome\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which FlowFiles should pass through this processor. The format of this property is expected to be a positive integer representing FlowFiles count per Time Duration\",\n-                                \"displayName\": \"Maximum FlowFile Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum FlowFile Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Rate\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Noronha\",\n+                                        \"value\": \"America/Noronha\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"data rate\",\n-                                            \"attribute value\",\n-                                            \"flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a positive integer, or a Data Size (such as '1 MB') if Rate Control Criteria is set to 'data rate'.\",\n-                                \"displayName\": \"Maximum Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Rate Control Criteria\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/Beulah\",\n+                                        \"value\": \"America/North_Dakota/Beulah\"\n+                                    },\n                                     {\n-                                        \"description\": \"Rate is controlled by counting bytes transferred per time duration.\",\n-                                        \"displayName\": \"data rate\",\n-                                        \"value\": \"data rate\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/Center\",\n+                                        \"value\": \"America/North_Dakota/Center\"\n                                     },\n                                     {\n-                                        \"description\": \"Rate is controlled by counting FlowFiles transferred per time duration\",\n-                                        \"displayName\": \"flowfile count\",\n-                                        \"value\": \"flowfile count\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/New_Salem\",\n+                                        \"value\": \"America/North_Dakota/New_Salem\"\n                                     },\n                                     {\n-                                        \"description\": \"Rate is controlled by accumulating the value of a specified attribute that is transferred per time duration\",\n-                                        \"displayName\": \"attribute value\",\n-                                        \"value\": \"attribute value\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nuuk\",\n+                                        \"value\": \"America/Nuuk\"\n                                     },\n                                     {\n-                                        \"description\": \"Rate is controlled by counting bytes and FlowFiles transferred per time duration; if either threshold is met, throttling is enforced\",\n-                                        \"displayName\": \"data rate or flowfile count\",\n-                                        \"value\": \"data rate or flowfile count\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"data rate\",\n-                                \"description\": \"Indicates the criteria that is used to control the throughput rate. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Rate Control Criteria\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Control Criteria\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Rate Controlled Attribute\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ojinaga\",\n+                                        \"value\": \"America/Ojinaga\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"attribute value\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Panama\",\n+                                        \"value\": \"America/Panama\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Pangnirtung\",\n+                                        \"value\": \"America/Pangnirtung\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Paramaribo\",\n+                                        \"value\": \"America/Paramaribo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Phoenix\",\n+                                        \"value\": \"America/Phoenix\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Port-au-Prince\",\n+                                        \"value\": \"America/Port-au-Prince\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Port_of_Spain\",\n+                                        \"value\": \"America/Port_of_Spain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Acre\",\n+                                        \"value\": \"America/Porto_Acre\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Velho\",\n+                                        \"value\": \"America/Porto_Velho\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Puerto_Rico\",\n+                                        \"value\": \"America/Puerto_Rico\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Punta_Arenas\",\n+                                        \"value\": \"America/Punta_Arenas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rainy_River\",\n+                                        \"value\": \"America/Rainy_River\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rankin_Inlet\",\n+                                        \"value\": \"America/Rankin_Inlet\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Recife\",\n+                                        \"value\": \"America/Recife\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Regina\",\n+                                        \"value\": \"America/Regina\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Resolute\",\n+                                        \"value\": \"America/Resolute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rio_Branco\",\n+                                        \"value\": \"America/Rio_Branco\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rosario\",\n+                                        \"value\": \"America/Rosario\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santa_Isabel\",\n+                                        \"value\": \"America/Santa_Isabel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santarem\",\n+                                        \"value\": \"America/Santarem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santiago\",\n+                                        \"value\": \"America/Santiago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santo_Domingo\",\n+                                        \"value\": \"America/Santo_Domingo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sao_Paulo\",\n+                                        \"value\": \"America/Sao_Paulo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Scoresbysund\",\n+                                        \"value\": \"America/Scoresbysund\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Shiprock\",\n+                                        \"value\": \"America/Shiprock\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sitka\",\n+                                        \"value\": \"America/Sitka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Barthelemy\",\n+                                        \"value\": \"America/St_Barthelemy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Johns\",\n+                                        \"value\": \"America/St_Johns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Kitts\",\n+                                        \"value\": \"America/St_Kitts\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Lucia\",\n+                                        \"value\": \"America/St_Lucia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Thomas\",\n+                                        \"value\": \"America/St_Thomas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Vincent\",\n+                                        \"value\": \"America/St_Vincent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Swift_Current\",\n+                                        \"value\": \"America/Swift_Current\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tegucigalpa\",\n+                                        \"value\": \"America/Tegucigalpa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thule\",\n+                                        \"value\": \"America/Thule\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thunder_Bay\",\n+                                        \"value\": \"America/Thunder_Bay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tijuana\",\n+                                        \"value\": \"America/Tijuana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Toronto\",\n+                                        \"value\": \"America/Toronto\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tortola\",\n+                                        \"value\": \"America/Tortola\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Vancouver\",\n+                                        \"value\": \"America/Vancouver\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Virgin\",\n+                                        \"value\": \"America/Virgin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Whitehorse\",\n+                                        \"value\": \"America/Whitehorse\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Winnipeg\",\n+                                        \"value\": \"America/Winnipeg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yakutat\",\n+                                        \"value\": \"America/Yakutat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yellowknife\",\n+                                        \"value\": \"America/Yellowknife\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Casey\",\n+                                        \"value\": \"Antarctica/Casey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Davis\",\n+                                        \"value\": \"Antarctica/Davis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/DumontDUrville\",\n+                                        \"value\": \"Antarctica/DumontDUrville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Macquarie\",\n+                                        \"value\": \"Antarctica/Macquarie\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Mawson\",\n+                                        \"value\": \"Antarctica/Mawson\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/McMurdo\",\n+                                        \"value\": \"Antarctica/McMurdo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Palmer\",\n+                                        \"value\": \"Antarctica/Palmer\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Rothera\",\n+                                        \"value\": \"Antarctica/Rothera\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/South_Pole\",\n+                                        \"value\": \"Antarctica/South_Pole\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Syowa\",\n+                                        \"value\": \"Antarctica/Syowa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Troll\",\n+                                        \"value\": \"Antarctica/Troll\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Vostok\",\n+                                        \"value\": \"Antarctica/Vostok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Arctic/Longyearbyen\",\n+                                        \"value\": \"Arctic/Longyearbyen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aden\",\n+                                        \"value\": \"Asia/Aden\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Almaty\",\n+                                        \"value\": \"Asia/Almaty\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Amman\",\n+                                        \"value\": \"Asia/Amman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Anadyr\",\n+                                        \"value\": \"Asia/Anadyr\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtau\",\n+                                        \"value\": \"Asia/Aqtau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtobe\",\n+                                        \"value\": \"Asia/Aqtobe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashgabat\",\n+                                        \"value\": \"Asia/Ashgabat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashkhabad\",\n+                                        \"value\": \"Asia/Ashkhabad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Atyrau\",\n+                                        \"value\": \"Asia/Atyrau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baghdad\",\n+                                        \"value\": \"Asia/Baghdad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bahrain\",\n+                                        \"value\": \"Asia/Bahrain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baku\",\n+                                        \"value\": \"Asia/Baku\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bangkok\",\n+                                        \"value\": \"Asia/Bangkok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Barnaul\",\n+                                        \"value\": \"Asia/Barnaul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Beirut\",\n+                                        \"value\": \"Asia/Beirut\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bishkek\",\n+                                        \"value\": \"Asia/Bishkek\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Brunei\",\n+                                        \"value\": \"Asia/Brunei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Calcutta\",\n+                                        \"value\": \"Asia/Calcutta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chita\",\n+                                        \"value\": \"Asia/Chita\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Choibalsan\",\n+                                        \"value\": \"Asia/Choibalsan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chongqing\",\n+                                        \"value\": \"Asia/Chongqing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chungking\",\n+                                        \"value\": \"Asia/Chungking\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Colombo\",\n+                                        \"value\": \"Asia/Colombo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dacca\",\n+                                        \"value\": \"Asia/Dacca\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Damascus\",\n+                                        \"value\": \"Asia/Damascus\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dhaka\",\n+                                        \"value\": \"Asia/Dhaka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dili\",\n+                                        \"value\": \"Asia/Dili\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dubai\",\n+                                        \"value\": \"Asia/Dubai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dushanbe\",\n+                                        \"value\": \"Asia/Dushanbe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Famagusta\",\n+                                        \"value\": \"Asia/Famagusta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Gaza\",\n+                                        \"value\": \"Asia/Gaza\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Harbin\",\n+                                        \"value\": \"Asia/Harbin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hebron\",\n+                                        \"value\": \"Asia/Hebron\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n+                                        \"value\": \"Asia/Ho_Chi_Minh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hong_Kong\",\n+                                        \"value\": \"Asia/Hong_Kong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hovd\",\n+                                        \"value\": \"Asia/Hovd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Irkutsk\",\n+                                        \"value\": \"Asia/Irkutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Istanbul\",\n+                                        \"value\": \"Asia/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jakarta\",\n+                                        \"value\": \"Asia/Jakarta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jayapura\",\n+                                        \"value\": \"Asia/Jayapura\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jerusalem\",\n+                                        \"value\": \"Asia/Jerusalem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kabul\",\n+                                        \"value\": \"Asia/Kabul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kamchatka\",\n+                                        \"value\": \"Asia/Kamchatka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Karachi\",\n+                                        \"value\": \"Asia/Karachi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kashgar\",\n+                                        \"value\": \"Asia/Kashgar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kathmandu\",\n+                                        \"value\": \"Asia/Kathmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Katmandu\",\n+                                        \"value\": \"Asia/Katmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Khandyga\",\n+                                        \"value\": \"Asia/Khandyga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kolkata\",\n+                                        \"value\": \"Asia/Kolkata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Krasnoyarsk\",\n+                                        \"value\": \"Asia/Krasnoyarsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n+                                        \"value\": \"Asia/Kuala_Lumpur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuching\",\n+                                        \"value\": \"Asia/Kuching\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuwait\",\n+                                        \"value\": \"Asia/Kuwait\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macao\",\n+                                        \"value\": \"Asia/Macao\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macau\",\n+                                        \"value\": \"Asia/Macau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Magadan\",\n+                                        \"value\": \"Asia/Magadan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Makassar\",\n+                                        \"value\": \"Asia/Makassar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Manila\",\n+                                        \"value\": \"Asia/Manila\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Muscat\",\n+                                        \"value\": \"Asia/Muscat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Nicosia\",\n+                                        \"value\": \"Asia/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novokuznetsk\",\n+                                        \"value\": \"Asia/Novokuznetsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novosibirsk\",\n+                                        \"value\": \"Asia/Novosibirsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Omsk\",\n+                                        \"value\": \"Asia/Omsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Oral\",\n+                                        \"value\": \"Asia/Oral\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Phnom_Penh\",\n+                                        \"value\": \"Asia/Phnom_Penh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pontianak\",\n+                                        \"value\": \"Asia/Pontianak\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pyongyang\",\n+                                        \"value\": \"Asia/Pyongyang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qatar\",\n+                                        \"value\": \"Asia/Qatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qostanay\",\n+                                        \"value\": \"Asia/Qostanay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qyzylorda\",\n+                                        \"value\": \"Asia/Qyzylorda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Rangoon\",\n+                                        \"value\": \"Asia/Rangoon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Riyadh\",\n+                                        \"value\": \"Asia/Riyadh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Saigon\",\n+                                        \"value\": \"Asia/Saigon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Sakhalin\",\n+                                        \"value\": \"Asia/Sakhalin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Samarkand\",\n+                                        \"value\": \"Asia/Samarkand\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Seoul\",\n+                                        \"value\": \"Asia/Seoul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Shanghai\",\n+                                        \"value\": \"Asia/Shanghai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Singapore\",\n+                                        \"value\": \"Asia/Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Srednekolymsk\",\n+                                        \"value\": \"Asia/Srednekolymsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Taipei\",\n+                                        \"value\": \"Asia/Taipei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tashkent\",\n+                                        \"value\": \"Asia/Tashkent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tbilisi\",\n+                                        \"value\": \"Asia/Tbilisi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tehran\",\n+                                        \"value\": \"Asia/Tehran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tel_Aviv\",\n+                                        \"value\": \"Asia/Tel_Aviv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimbu\",\n+                                        \"value\": \"Asia/Thimbu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimphu\",\n+                                        \"value\": \"Asia/Thimphu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tokyo\",\n+                                        \"value\": \"Asia/Tokyo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tomsk\",\n+                                        \"value\": \"Asia/Tomsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ujung_Pandang\",\n+                                        \"value\": \"Asia/Ujung_Pandang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulaanbaatar\",\n+                                        \"value\": \"Asia/Ulaanbaatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulan_Bator\",\n+                                        \"value\": \"Asia/Ulan_Bator\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Urumqi\",\n+                                        \"value\": \"Asia/Urumqi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ust-Nera\",\n+                                        \"value\": \"Asia/Ust-Nera\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vientiane\",\n+                                        \"value\": \"Asia/Vientiane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vladivostok\",\n+                                        \"value\": \"Asia/Vladivostok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yakutsk\",\n+                                        \"value\": \"Asia/Yakutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yangon\",\n+                                        \"value\": \"Asia/Yangon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yekaterinburg\",\n+                                        \"value\": \"Asia/Yekaterinburg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yerevan\",\n+                                        \"value\": \"Asia/Yerevan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Azores\",\n+                                        \"value\": \"Atlantic/Azores\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Bermuda\",\n+                                        \"value\": \"Atlantic/Bermuda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Canary\",\n+                                        \"value\": \"Atlantic/Canary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Cape_Verde\",\n+                                        \"value\": \"Atlantic/Cape_Verde\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faeroe\",\n+                                        \"value\": \"Atlantic/Faeroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faroe\",\n+                                        \"value\": \"Atlantic/Faroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n+                                        \"value\": \"Atlantic/Jan_Mayen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Madeira\",\n+                                        \"value\": \"Atlantic/Madeira\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Reykjavik\",\n+                                        \"value\": \"Atlantic/Reykjavik\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/South_Georgia\",\n+                                        \"value\": \"Atlantic/South_Georgia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/St_Helena\",\n+                                        \"value\": \"Atlantic/St_Helena\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Stanley\",\n+                                        \"value\": \"Atlantic/Stanley\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/ACT\",\n+                                        \"value\": \"Australia/ACT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Adelaide\",\n+                                        \"value\": \"Australia/Adelaide\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Brisbane\",\n+                                        \"value\": \"Australia/Brisbane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Broken_Hill\",\n+                                        \"value\": \"Australia/Broken_Hill\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Canberra\",\n+                                        \"value\": \"Australia/Canberra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Currie\",\n+                                        \"value\": \"Australia/Currie\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Darwin\",\n+                                        \"value\": \"Australia/Darwin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Eucla\",\n+                                        \"value\": \"Australia/Eucla\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Hobart\",\n+                                        \"value\": \"Australia/Hobart\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/LHI\",\n+                                        \"value\": \"Australia/LHI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lindeman\",\n+                                        \"value\": \"Australia/Lindeman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lord_Howe\",\n+                                        \"value\": \"Australia/Lord_Howe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Melbourne\",\n+                                        \"value\": \"Australia/Melbourne\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/NSW\",\n+                                        \"value\": \"Australia/NSW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/North\",\n+                                        \"value\": \"Australia/North\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Perth\",\n+                                        \"value\": \"Australia/Perth\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Queensland\",\n+                                        \"value\": \"Australia/Queensland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/South\",\n+                                        \"value\": \"Australia/South\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Sydney\",\n+                                        \"value\": \"Australia/Sydney\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Tasmania\",\n+                                        \"value\": \"Australia/Tasmania\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Victoria\",\n+                                        \"value\": \"Australia/Victoria\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/West\",\n+                                        \"value\": \"Australia/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Yancowinna\",\n+                                        \"value\": \"Australia/Yancowinna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/Acre\",\n+                                        \"value\": \"Brazil/Acre\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/DeNoronha\",\n+                                        \"value\": \"Brazil/DeNoronha\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/East\",\n+                                        \"value\": \"Brazil/East\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/West\",\n+                                        \"value\": \"Brazil/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CET\",\n+                                        \"value\": \"CET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CST6CDT\",\n+                                        \"value\": \"CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Atlantic\",\n+                                        \"value\": \"Canada/Atlantic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Central\",\n+                                        \"value\": \"Canada/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Eastern\",\n+                                        \"value\": \"Canada/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Mountain\",\n+                                        \"value\": \"Canada/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Newfoundland\",\n+                                        \"value\": \"Canada/Newfoundland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Pacific\",\n+                                        \"value\": \"Canada/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Saskatchewan\",\n+                                        \"value\": \"Canada/Saskatchewan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Yukon\",\n+                                        \"value\": \"Canada/Yukon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/Continental\",\n+                                        \"value\": \"Chile/Continental\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/EasterIsland\",\n+                                        \"value\": \"Chile/EasterIsland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Cuba\",\n+                                        \"value\": \"Cuba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EET\",\n+                                        \"value\": \"EET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST5EDT\",\n+                                        \"value\": \"EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Egypt\",\n+                                        \"value\": \"Egypt\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Eire\",\n+                                        \"value\": \"Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT\",\n+                                        \"value\": \"Etc/GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+0\",\n+                                        \"value\": \"Etc/GMT+0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+1\",\n+                                        \"value\": \"Etc/GMT+1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+10\",\n+                                        \"value\": \"Etc/GMT+10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+11\",\n+                                        \"value\": \"Etc/GMT+11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+12\",\n+                                        \"value\": \"Etc/GMT+12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+2\",\n+                                        \"value\": \"Etc/GMT+2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+3\",\n+                                        \"value\": \"Etc/GMT+3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+4\",\n+                                        \"value\": \"Etc/GMT+4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+5\",\n+                                        \"value\": \"Etc/GMT+5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+6\",\n+                                        \"value\": \"Etc/GMT+6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+7\",\n+                                        \"value\": \"Etc/GMT+7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+8\",\n+                                        \"value\": \"Etc/GMT+8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+9\",\n+                                        \"value\": \"Etc/GMT+9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-0\",\n+                                        \"value\": \"Etc/GMT-0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-1\",\n+                                        \"value\": \"Etc/GMT-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-10\",\n+                                        \"value\": \"Etc/GMT-10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-11\",\n+                                        \"value\": \"Etc/GMT-11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-12\",\n+                                        \"value\": \"Etc/GMT-12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-13\",\n+                                        \"value\": \"Etc/GMT-13\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-14\",\n+                                        \"value\": \"Etc/GMT-14\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-2\",\n+                                        \"value\": \"Etc/GMT-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-3\",\n+                                        \"value\": \"Etc/GMT-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-4\",\n+                                        \"value\": \"Etc/GMT-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-5\",\n+                                        \"value\": \"Etc/GMT-5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-6\",\n+                                        \"value\": \"Etc/GMT-6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-7\",\n+                                        \"value\": \"Etc/GMT-7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-8\",\n+                                        \"value\": \"Etc/GMT-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-9\",\n+                                        \"value\": \"Etc/GMT-9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT0\",\n+                                        \"value\": \"Etc/GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Greenwich\",\n+                                        \"value\": \"Etc/Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UCT\",\n+                                        \"value\": \"Etc/UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UTC\",\n+                                        \"value\": \"Etc/UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Universal\",\n+                                        \"value\": \"Etc/Universal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Zulu\",\n+                                        \"value\": \"Etc/Zulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Amsterdam\",\n+                                        \"value\": \"Europe/Amsterdam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Andorra\",\n+                                        \"value\": \"Europe/Andorra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Astrakhan\",\n+                                        \"value\": \"Europe/Astrakhan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Athens\",\n+                                        \"value\": \"Europe/Athens\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belfast\",\n+                                        \"value\": \"Europe/Belfast\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belgrade\",\n+                                        \"value\": \"Europe/Belgrade\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Berlin\",\n+                                        \"value\": \"Europe/Berlin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bratislava\",\n+                                        \"value\": \"Europe/Bratislava\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Brussels\",\n+                                        \"value\": \"Europe/Brussels\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bucharest\",\n+                                        \"value\": \"Europe/Bucharest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Budapest\",\n+                                        \"value\": \"Europe/Budapest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Busingen\",\n+                                        \"value\": \"Europe/Busingen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Chisinau\",\n+                                        \"value\": \"Europe/Chisinau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Copenhagen\",\n+                                        \"value\": \"Europe/Copenhagen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Dublin\",\n+                                        \"value\": \"Europe/Dublin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Gibraltar\",\n+                                        \"value\": \"Europe/Gibraltar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Guernsey\",\n+                                        \"value\": \"Europe/Guernsey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Helsinki\",\n+                                        \"value\": \"Europe/Helsinki\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Isle_of_Man\",\n+                                        \"value\": \"Europe/Isle_of_Man\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Istanbul\",\n+                                        \"value\": \"Europe/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Jersey\",\n+                                        \"value\": \"Europe/Jersey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kaliningrad\",\n+                                        \"value\": \"Europe/Kaliningrad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kiev\",\n+                                        \"value\": \"Europe/Kiev\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kirov\",\n+                                        \"value\": \"Europe/Kirov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kyiv\",\n+                                        \"value\": \"Europe/Kyiv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Lisbon\",\n+                                        \"value\": \"Europe/Lisbon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ljubljana\",\n+                                        \"value\": \"Europe/Ljubljana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/London\",\n+                                        \"value\": \"Europe/London\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Luxembourg\",\n+                                        \"value\": \"Europe/Luxembourg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Madrid\",\n+                                        \"value\": \"Europe/Madrid\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Malta\",\n+                                        \"value\": \"Europe/Malta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Mariehamn\",\n+                                        \"value\": \"Europe/Mariehamn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Minsk\",\n+                                        \"value\": \"Europe/Minsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Monaco\",\n+                                        \"value\": \"Europe/Monaco\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Moscow\",\n+                                        \"value\": \"Europe/Moscow\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Nicosia\",\n+                                        \"value\": \"Europe/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Oslo\",\n+                                        \"value\": \"Europe/Oslo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Paris\",\n+                                        \"value\": \"Europe/Paris\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Podgorica\",\n+                                        \"value\": \"Europe/Podgorica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Prague\",\n+                                        \"value\": \"Europe/Prague\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Riga\",\n+                                        \"value\": \"Europe/Riga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Rome\",\n+                                        \"value\": \"Europe/Rome\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Samara\",\n+                                        \"value\": \"Europe/Samara\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/San_Marino\",\n+                                        \"value\": \"Europe/San_Marino\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sarajevo\",\n+                                        \"value\": \"Europe/Sarajevo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Saratov\",\n+                                        \"value\": \"Europe/Saratov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Simferopol\",\n+                                        \"value\": \"Europe/Simferopol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Skopje\",\n+                                        \"value\": \"Europe/Skopje\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sofia\",\n+                                        \"value\": \"Europe/Sofia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Stockholm\",\n+                                        \"value\": \"Europe/Stockholm\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tallinn\",\n+                                        \"value\": \"Europe/Tallinn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tirane\",\n+                                        \"value\": \"Europe/Tirane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tiraspol\",\n+                                        \"value\": \"Europe/Tiraspol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ulyanovsk\",\n+                                        \"value\": \"Europe/Ulyanovsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Uzhgorod\",\n+                                        \"value\": \"Europe/Uzhgorod\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vaduz\",\n+                                        \"value\": \"Europe/Vaduz\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vatican\",\n+                                        \"value\": \"Europe/Vatican\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vienna\",\n+                                        \"value\": \"Europe/Vienna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vilnius\",\n+                                        \"value\": \"Europe/Vilnius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Volgograd\",\n+                                        \"value\": \"Europe/Volgograd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Warsaw\",\n+                                        \"value\": \"Europe/Warsaw\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zagreb\",\n+                                        \"value\": \"Europe/Zagreb\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zaporozhye\",\n+                                        \"value\": \"Europe/Zaporozhye\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zurich\",\n+                                        \"value\": \"Europe/Zurich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB\",\n+                                        \"value\": \"GB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB-Eire\",\n+                                        \"value\": \"GB-Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT\",\n+                                        \"value\": \"GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT0\",\n+                                        \"value\": \"GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Greenwich\",\n+                                        \"value\": \"Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Hongkong\",\n+                                        \"value\": \"Hongkong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iceland\",\n+                                        \"value\": \"Iceland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Antananarivo\",\n+                                        \"value\": \"Indian/Antananarivo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Chagos\",\n+                                        \"value\": \"Indian/Chagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Christmas\",\n+                                        \"value\": \"Indian/Christmas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Cocos\",\n+                                        \"value\": \"Indian/Cocos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Comoro\",\n+                                        \"value\": \"Indian/Comoro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Kerguelen\",\n+                                        \"value\": \"Indian/Kerguelen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mahe\",\n+                                        \"value\": \"Indian/Mahe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Maldives\",\n+                                        \"value\": \"Indian/Maldives\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mauritius\",\n+                                        \"value\": \"Indian/Mauritius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mayotte\",\n+                                        \"value\": \"Indian/Mayotte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Reunion\",\n+                                        \"value\": \"Indian/Reunion\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iran\",\n+                                        \"value\": \"Iran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Israel\",\n+                                        \"value\": \"Israel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Jamaica\",\n+                                        \"value\": \"Jamaica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Japan\",\n+                                        \"value\": \"Japan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Kwajalein\",\n+                                        \"value\": \"Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Libya\",\n+                                        \"value\": \"Libya\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MET\",\n+                                        \"value\": \"MET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST7MDT\",\n+                                        \"value\": \"MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaNorte\",\n+                                        \"value\": \"Mexico/BajaNorte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaSur\",\n+                                        \"value\": \"Mexico/BajaSur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/General\",\n+                                        \"value\": \"Mexico/General\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ\",\n+                                        \"value\": \"NZ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ-CHAT\",\n+                                        \"value\": \"NZ-CHAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Navajo\",\n+                                        \"value\": \"Navajo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRC\",\n+                                        \"value\": \"PRC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST8PDT\",\n+                                        \"value\": \"PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Apia\",\n+                                        \"value\": \"Pacific/Apia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Auckland\",\n+                                        \"value\": \"Pacific/Auckland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Bougainville\",\n+                                        \"value\": \"Pacific/Bougainville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chatham\",\n+                                        \"value\": \"Pacific/Chatham\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chuuk\",\n+                                        \"value\": \"Pacific/Chuuk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Easter\",\n+                                        \"value\": \"Pacific/Easter\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Efate\",\n+                                        \"value\": \"Pacific/Efate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Enderbury\",\n+                                        \"value\": \"Pacific/Enderbury\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fakaofo\",\n+                                        \"value\": \"Pacific/Fakaofo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fiji\",\n+                                        \"value\": \"Pacific/Fiji\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Funafuti\",\n+                                        \"value\": \"Pacific/Funafuti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Galapagos\",\n+                                        \"value\": \"Pacific/Galapagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Gambier\",\n+                                        \"value\": \"Pacific/Gambier\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guadalcanal\",\n+                                        \"value\": \"Pacific/Guadalcanal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guam\",\n+                                        \"value\": \"Pacific/Guam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Honolulu\",\n+                                        \"value\": \"Pacific/Honolulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Johnston\",\n+                                        \"value\": \"Pacific/Johnston\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kanton\",\n+                                        \"value\": \"Pacific/Kanton\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kiritimati\",\n+                                        \"value\": \"Pacific/Kiritimati\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kosrae\",\n+                                        \"value\": \"Pacific/Kosrae\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kwajalein\",\n+                                        \"value\": \"Pacific/Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Majuro\",\n+                                        \"value\": \"Pacific/Majuro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Marquesas\",\n+                                        \"value\": \"Pacific/Marquesas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Midway\",\n+                                        \"value\": \"Pacific/Midway\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Nauru\",\n+                                        \"value\": \"Pacific/Nauru\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Niue\",\n+                                        \"value\": \"Pacific/Niue\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Norfolk\",\n+                                        \"value\": \"Pacific/Norfolk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Noumea\",\n+                                        \"value\": \"Pacific/Noumea\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pago_Pago\",\n+                                        \"value\": \"Pacific/Pago_Pago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Palau\",\n+                                        \"value\": \"Pacific/Palau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pitcairn\",\n+                                        \"value\": \"Pacific/Pitcairn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pohnpei\",\n+                                        \"value\": \"Pacific/Pohnpei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Ponape\",\n+                                        \"value\": \"Pacific/Ponape\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Port_Moresby\",\n+                                        \"value\": \"Pacific/Port_Moresby\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Rarotonga\",\n+                                        \"value\": \"Pacific/Rarotonga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Saipan\",\n+                                        \"value\": \"Pacific/Saipan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Samoa\",\n+                                        \"value\": \"Pacific/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tahiti\",\n+                                        \"value\": \"Pacific/Tahiti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tarawa\",\n+                                        \"value\": \"Pacific/Tarawa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tongatapu\",\n+                                        \"value\": \"Pacific/Tongatapu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Truk\",\n+                                        \"value\": \"Pacific/Truk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wake\",\n+                                        \"value\": \"Pacific/Wake\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wallis\",\n+                                        \"value\": \"Pacific/Wallis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Yap\",\n+                                        \"value\": \"Pacific/Yap\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Poland\",\n+                                        \"value\": \"Poland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Portugal\",\n+                                        \"value\": \"Portugal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ROK\",\n+                                        \"value\": \"ROK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Singapore\",\n+                                        \"value\": \"Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4\",\n+                                        \"value\": \"SystemV/AST4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4ADT\",\n+                                        \"value\": \"SystemV/AST4ADT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6\",\n+                                        \"value\": \"SystemV/CST6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6CDT\",\n+                                        \"value\": \"SystemV/CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5\",\n+                                        \"value\": \"SystemV/EST5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5EDT\",\n+                                        \"value\": \"SystemV/EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/HST10\",\n+                                        \"value\": \"SystemV/HST10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7\",\n+                                        \"value\": \"SystemV/MST7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7MDT\",\n+                                        \"value\": \"SystemV/MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8\",\n+                                        \"value\": \"SystemV/PST8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8PDT\",\n+                                        \"value\": \"SystemV/PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9\",\n+                                        \"value\": \"SystemV/YST9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9YDT\",\n+                                        \"value\": \"SystemV/YST9YDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Turkey\",\n+                                        \"value\": \"Turkey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UCT\",\n+                                        \"value\": \"UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Alaska\",\n+                                        \"value\": \"US/Alaska\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Aleutian\",\n+                                        \"value\": \"US/Aleutian\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Arizona\",\n+                                        \"value\": \"US/Arizona\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Central\",\n+                                        \"value\": \"US/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/East-Indiana\",\n+                                        \"value\": \"US/East-Indiana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Eastern\",\n+                                        \"value\": \"US/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Hawaii\",\n+                                        \"value\": \"US/Hawaii\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Indiana-Starke\",\n+                                        \"value\": \"US/Indiana-Starke\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Michigan\",\n+                                        \"value\": \"US/Michigan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Mountain\",\n+                                        \"value\": \"US/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Pacific\",\n+                                        \"value\": \"US/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Samoa\",\n+                                        \"value\": \"US/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Universal\",\n+                                        \"value\": \"Universal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W-SU\",\n+                                        \"value\": \"W-SU\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WET\",\n+                                        \"value\": \"WET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Zulu\",\n+                                        \"value\": \"Zulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST\",\n+                                        \"value\": \"EST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HST\",\n+                                        \"value\": \"HST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST\",\n+                                        \"value\": \"MST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACT\",\n+                                        \"value\": \"ACT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AET\",\n+                                        \"value\": \"AET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AGT\",\n+                                        \"value\": \"AGT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ART\",\n+                                        \"value\": \"ART\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AST\",\n+                                        \"value\": \"AST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BET\",\n+                                        \"value\": \"BET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BST\",\n+                                        \"value\": \"BST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAT\",\n+                                        \"value\": \"CAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CNT\",\n+                                        \"value\": \"CNT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CST\",\n+                                        \"value\": \"CST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CTT\",\n+                                        \"value\": \"CTT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EAT\",\n+                                        \"value\": \"EAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ECT\",\n+                                        \"value\": \"ECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IET\",\n+                                        \"value\": \"IET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IST\",\n+                                        \"value\": \"IST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JST\",\n+                                        \"value\": \"JST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MIT\",\n+                                        \"value\": \"MIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NET\",\n+                                        \"value\": \"NET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NST\",\n+                                        \"value\": \"NST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLT\",\n+                                        \"value\": \"PLT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNT\",\n+                                        \"value\": \"PNT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRT\",\n+                                        \"value\": \"PRT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST\",\n+                                        \"value\": \"PST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SST\",\n+                                        \"value\": \"SST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"VST\",\n+                                        \"value\": \"VST\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of an attribute whose values build toward the rate limit if Rate Control Criteria is set to 'attribute value'. The value of the attribute referenced by this property must be a positive long, or the FlowFile will be routed to failure. This value is ignored if Rate Control Criteria is not set to 'attribute value'. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Rate Controlled Attribute\",\n+                                \"defaultValue\": \"UTC\",\n+                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n+                                \"displayName\": \"Time Zone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Controlled Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"Time Zone\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Rate Exceeded Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The FlowFile will be held in its input queue until the rate of data has fallen below the configured maximum and will then be allowed through.\",\n-                                        \"displayName\": \"Hold FlowFile\",\n-                                        \"value\": \"Hold FlowFile\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be routed to the 'rate exceeded' Relationship.\",\n-                                        \"displayName\": \"Route to 'rate exceeded'\",\n-                                        \"value\": \"Route to 'rate exceeded'\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Hold FlowFile\",\n-                                \"description\": \"Specifies how to handle an incoming FlowFile when the maximum data rate has been exceeded.\",\n-                                \"displayName\": \"Rate Exceeded Strategy\",\n+                            \"Token\": {\n+                                \"description\": \"The token to pass to Splunk.\",\n+                                \"displayName\": \"Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Exceeded Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Token\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Duration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"The amount of time to which the Maximum Rate pertains. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Time Duration\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Duration\",\n-                                \"required\": true,\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be routed to this relationship if they are missing a necessary Rate Controlled Attribute or the attribute is not in the expected format\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\n+                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"rate\",\n-                            \"rate control\",\n-                            \"throttle\",\n-                            \"throughput\"\n+                            \"get\",\n+                            \"logs\",\n+                            \"splunk\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ControlRate\",\n-                        \"typeDescription\": \"Controls the rate at which data is transferred to follow-on processors. If you configure a very small Time Duration, then the accuracy of the throttle gets worse. You can improve this accuracy by decreasing the Yield Duration, at the expense of more Tasks given to the processor.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `data rate`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how much data should be allowed through each second.\\n\\nFor example, to allow through 8 MB per second, set \\\"Maximum Rate\\\" to `8 MB`.\\n\",\n-                                \"description\": \"Limit the rate at which data is sent to a downstream system with little to no bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"data rate\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n+                        \"type\": \"org.apache.nifi.processors.splunk.GetSplunk\",\n+                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many FlowFiles should be allowed through each second.\\n\\nFor example, to allow through 100 FlowFiles per second, set \\\"Maximum Rate\\\" to `100`.\\n\",\n-                                \"description\": \"Limit the rate at which FlowFiles are sent to a downstream system with little to no bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"flowfile rate\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The query that performed to produce the FlowFile.\",\n+                                \"name\": \"splunk.query\"\n                             },\n                             {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each second.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `100`.\\nIf more than 100 requests come in during any one second, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n-                                \"description\": \"Reject requests that exceed a specific rate with little to no bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"request rate\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n+                                \"name\": \"splunk.earliest.time\"\n                             },\n                             {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 min`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each minute.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `6000`.\\nThis will allow through 6,000 FlowFiles per minute, which averages to 100 FlowFiles per second. However, those 6,000 FlowFiles may come all within the first couple of\\nseconds, or they may come in over a period of 60 seconds. As a result, this gives us an average rate of 100 FlowFiles per second but allows for bursts of data.\\nIf more than 6,000 requests come in during any one minute, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n-                                \"description\": \"Reject requests that exceed a specific rate, allowing for bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"request rate\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The value of the latest time that was used when performing the query.\",\n+                                \"name\": \"splunk.latest.time\"\n                             }\n-                        ],\n-                        \"version\": \"2.0.0-M4\"\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16774,67 +16727,165 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Input Character Set\": {\n-                                \"description\": \"The name of the CharacterSet to expect for Input\",\n-                                \"displayName\": \"Input Character Set\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Input Character Set\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Character Set\": {\n-                                \"description\": \"The name of the CharacterSet to convert to\",\n-                                \"displayName\": \"Output Character Set\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Delimiter\": {\n+                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n+                                \"displayName\": \"Message Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Output Character Set\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"TCP\",\n+                                \"description\": \"The protocol for communication.\",\n+                                \"displayName\": \"Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character set\",\n-                            \"characterset\",\n-                            \"convert\",\n-                            \"text\"\n+                            \"logs\",\n+                            \"splunk\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertCharacterSet\",\n-                        \"typeDescription\": \"Converts a FlowFile's content from one character set to another\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n+                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16847,728 +16898,817 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Catalog Name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Catalog Name\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Catalog Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"JDBC Connection Pool\": {\n-                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n-                                \"displayName\": \"JDBC Connection Pool\",\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Schema Name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Schema Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Statement Type\": {\n+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate\",\n-                                \"displayName\": \"Statement Type\",\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Statement Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the table that the statement should update\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"Scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Field Names\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate JSON field names into the appropriate column names for the table specified. If false, the JSON field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Translate Field Names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Unmatched Column Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n                                     },\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n                                     },\n                                     {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the JSON document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming JSON element does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unmatched Column Behavior\",\n+                                \"name\": \"Security Protocol\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Unmatched Field Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unmatched Field Behavior\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Token\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Update Keys\": {\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n-                                \"displayName\": \"Update Keys\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Update Keys\",\n-                                \"required\": false,\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-quoted-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n+                            \"content-type\": {\n+                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-identifiers\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"content-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-quoted-table-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                            \"host\": {\n+                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-table-identifiers\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-sql-param-attr-prefix\": {\n-                                \"defaultValue\": \"sql\",\n-                                \"description\": \"The string to be prepended to the outgoing flow file attributes, such as <sql>.args.1.value, where <sql> is replaced with the specified value\",\n-                                \"displayName\": \"SQL Parameter Attribute Prefix\",\n+                            \"index\": {\n+                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"jts-sql-param-attr-prefix\",\n-                                \"required\": true,\n+                                \"name\": \"index\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"table-schema-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many Table Schemas should be cached\",\n-                                \"displayName\": \"Table Schema Cache Size\",\n+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-schema-cache-size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"request-channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"source\": {\n+                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"source-type\": {\n+                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n-                            \"org.apache.nifi.processors.standard.PutSQL\"\n+                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship when its contents have successfully been converted into a SQL statement\",\n-                                \"name\": \"sql\"\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be converted into a SQL statement. Common causes include invalid JSON content or the JSON content missing a required field (if using an INSERT statement type).\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"When a FlowFile is converted to SQL, the original JSON FlowFile is routed to this relationship\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"database\",\n-                            \"delete\",\n-                            \"flat\",\n-                            \"insert\",\n-                            \"json\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"http\",\n+                            \"logs\",\n+                            \"splunk\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertJSONToSQL\",\n-                        \"typeDescription\": \"Converts a JSON-formatted FlowFile into an UPDATE, INSERT, or DELETE SQL statement. The incoming FlowFile is expected to be \\\"flat\\\" JSON message, meaning that it consists of a single JSON element and each field maps to a simple type. If a field maps to a JSON object, that JSON object will be interpreted as Text. If the input is an array of JSON elements, each element in the array is output as a separate FlowFile to the 'sql' relationship. Upon successful conversion, the original FlowFile is routed to the 'original' relationship and the SQL is routed to the 'sql' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunkHTTP\",\n+                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.table\"\n-                            },\n-                            {\n-                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.catalog\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.args.N.type\"\n+                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\n                             },\n                             {\n-                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.args.N.value\"\n+                                \"description\": \"The time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Include Zero Record FlowFiles\": {\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"defaultValue\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Zero Record FlowFiles\",\n+                                \"name\": \"Scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Security Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"TLSv1_2\",\n+                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"Security Protocol\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Token\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-query-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n+                                \"displayName\": \"Maximum Query Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-query-size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"request-channel\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ttl\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n+                                \"displayName\": \"Maximum Waiting Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"ttl\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"The time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n+                                \"name\": \"unacknowledged\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n+                                \"name\": \"undetermined\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n+                            \"acknowledgement\",\n+                            \"http\",\n                             \"logs\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\"\n+                            \"splunk\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                        \"typeDescription\": \"Converts records from one data format to another using configured Record Reader and Record Write Controller Services. The Reader and Writer must be configured with \\\"matching\\\" schemas. By this, we mean the schemas must have the same field names. The types of the fields do not have to be the same if a field value can be coerced from one type to another. For instance, if the input schema has a field named \\\"balance\\\" of type double, the output schema can have a field named \\\"balance\\\" with a type of string, double, or float. If any field is present in the input that is not present in the output, the field will be left out of the output. If any field is specified in the output schema but is not present in the input data/schema, then the field will not be present in the output or will have a null value, depending on the writer.\",\n-                        \"useCases\": [\n+                        \"type\": \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\",\n+                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-py4j-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-confluent-platform-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"configuration\": \"The Record Reader should be configured according to the incoming data format.\\nThe Record Writer should be configured according to the desired output format.\",\n-                                \"description\": \"Convert data from one record-oriented format to another\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"confluent\",\n+                            \"kafka\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceReader\",\n+                        \"typeDescription\": \"Reads Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceWriter\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"confluent\",\n+                            \"kafka\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceWriter\",\n+                        \"typeDescription\": \"Writes Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Properties that begin with 'request.header.' are populated into a map and passed as http headers in REST requests to the Confluent Schema Registry\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"request.header.*\",\n+                                \"value\": \"String literal, may not be empty\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ajust-immediately\": {\n+                            \"authentication-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"BASIC\",\n+                                        \"value\": \"BASIC\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the counter will be updated immediately, without regard to whether the ProcessSession is commit or rolled back;otherwise, the counter will be incremented only if and when the ProcessSession is committed.\",\n-                                \"displayName\": \"Call Immediate Adjustment\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"HTTP Client Authentication Type for Confluent Schema Registry\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ajust-immediately\",\n-                                \"required\": true,\n+                                \"name\": \"authentication-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\n+                            \"cache-expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-encoding\",\n+                                \"name\": \"cache-expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"split-words-on-symbols\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, the word count will identify strings separated by common logical delimiters [ _ - . ] as independent words (ex. split-words-on-symbols = 4 words).\",\n-                                \"displayName\": \"Split Words on Symbols\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"split-words-on-symbols\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-character-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of characters (including whitespace and symbols, but not including newlines and carriage returns) present in the incoming text.\",\n-                                \"displayName\": \"Count Characters\",\n+                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-character-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"text-line-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If enabled, will count the number of lines present in the incoming text.\",\n-                                \"displayName\": \"Count Lines\",\n+                            \"ssl-context\": {\n+                                \"description\": \"Specifies the SSL Context Service to use for interacting with the Confluent Schema Registry\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-line-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"ssl-context\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"text-line-nonempty-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of lines that contain a non-whitespace character present in the incoming text.\",\n-                                \"displayName\": \"Count Non-Empty Lines\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-line-nonempty-count\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-word-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"url\": {\n+                                \"defaultValue\": \"http://localhost:8081\",\n+                                \"description\": \"A comma-separated list of URLs of the Schema Registry to interact with\",\n+                                \"displayName\": \"Schema Registry URLs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, will count the number of words (alphanumeric character groups bounded by whitespace) present in the incoming text. Common logical delimiters [_-.] do not bound a word unless 'Split Words on Symbols' is true.\",\n-                                \"displayName\": \"Count Words\",\n+                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-word-count\",\n-                                \"required\": true,\n+                                \"name\": \"username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.SplitText\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The flowfile contains the original content with one or more attributes added containing the respective counts\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If the flowfile text cannot be counted for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character\",\n-                            \"count\",\n-                            \"line\",\n-                            \"text\",\n-                            \"word\"\n+                            \"avro\",\n+                            \"confluent\",\n+                            \"kafka\",\n+                            \"registry\",\n+                            \"schema\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CountText\",\n-                        \"typeDescription\": \"Counts various metrics on incoming text. The requested results will be recorded as attributes. The resulting flowfile will not have its content modified.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of lines of text present in the FlowFile content\",\n-                                \"name\": \"text.line.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of lines of text (with at least one non-whitespace character) present in the original FlowFile\",\n-                                \"name\": \"text.line.nonempty.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of words present in the original FlowFile\",\n-                                \"name\": \"text.word.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n-                                \"name\": \"text.character.count\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Confluent Schema Registry so that those Schemas that are stored in the Confluent Schema Registry can be used in NiFi. The Confluent Schema Registry has a notion of a \\\"subject\\\" for schemas, which is their terminology for a schema name. When a Schema is looked up by name by this registry, it will find a Schema in the Confluent Schema Registry with that subject.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-provenance-repository-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jetty-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateful-analysis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-stateful-analysis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -17581,990 +17721,1228 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fail_when_empty\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Route to failure if the content is empty. While hashing an empty value is valid, some flows may want to detect empty input.\",\n-                                \"displayName\": \"Fail if the content is empty\",\n+                            \"Sub-window length\": {\n+                                \"description\": \"When set, values will be batched into sub-windows of the set length. This allows for much larger length total windows to be set but sacrifices some precision. If this is not set (or is 0) then each value is stored in state with the timestamp of when it was received. After the length of time stated in Time window elaspes the value will be removed. If this is set, values will be batched together every X amount of time (where X is the time period set for this property) and removed all at once.\",\n+                                \"displayName\": \"Sub-window length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fail_when_empty\",\n-                                \"required\": true,\n+                                \"name\": \"Sub-window length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hash_algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-160\",\n-                                        \"value\": \"BLAKE2-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-256\",\n-                                        \"value\": \"BLAKE2-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-384\",\n-                                        \"value\": \"BLAKE2-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-512\",\n-                                        \"value\": \"BLAKE2-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy compatibility). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                            \"Time window\": {\n+                                \"description\": \"The time window on which to calculate the rolling window.\",\n+                                \"displayName\": \"Time window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash_algorithm\",\n+                                \"name\": \"Time window\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Value to track\": {\n+                                \"description\": \"The expression on which to evaluate each FlowFile. The result of the expression will be added to the rolling window value.\",\n+                                \"displayName\": \"Value to track\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Value to track\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Store the values backing the rolling window. This includes storing the individual values and their time-stamps or the batches of values and their counts.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"description\": \"When state fails to save when processing a FlowFile, the FlowFile is routed here.\",\n+                                \"name\": \"set state fail\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles are successfully processed are routed here\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\n+                                \"description\": \"When a FlowFile fails for a reason other than failing to set state it is routed here.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"blake2\",\n-                            \"content\",\n-                            \"cryptography\",\n-                            \"hash\",\n-                            \"md5\",\n-                            \"sha\"\n+                            \"Attribute Expression Language\",\n+                            \"data science\",\n+                            \"rolling\",\n+                            \"state\",\n+                            \"window\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashContent\",\n-                        \"typeDescription\": \"Calculates a cryptographic hash value for the flowfile content using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use.\",\n+                        \"type\": \"org.apache.nifi.processors.stateful.analysis.AttributeRollingWindow\",\n+                        \"typeDescription\": \"Track a Rolling Window based on evaluating an Expression Language expression on each FlowFile and add that value to the processor's state. Each FlowFile will be emitted with the count of FlowFiles and total aggregate value of values processed in the current time window.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This processor adds an attribute whose value is the result of hashing the flowfile content. The name of this attribute is specified by the value of the algorithm, e.g. 'content_SHA-256'.\",\n-                                \"name\": \"content_<algorithm>\"\n+                                \"description\": \"The rolling window value (sum of all the values stored).\",\n+                                \"name\": \"rolling_window_value\"\n+                            },\n+                            {\n+                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_count\"\n+                            },\n+                            {\n+                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_mean\"\n+                            },\n+                            {\n+                                \"description\": \"The variance of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_variance\"\n+                            },\n+                            {\n+                                \"description\": \"The standard deviation (positive square root of the variance) of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_stddev\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"@OnScheduled Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnScheduled method, so that the processor can be forced to take a long time to start up\",\n-                                \"displayName\": \"@OnScheduled Pause Time\",\n+                            \"authentication-charset\": {\n+                                \"defaultValue\": \"US-ASCII\",\n+                                \"description\": \"The charset for Basic Authentication header base64 string.\",\n+                                \"displayName\": \"Authentication Header Charset\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnScheduled Pause Time\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"authentication-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"@OnStopped Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnStopped method, so that the processor can be forced to take a long time to shutdown\",\n-                                \"displayName\": \"@OnStopped Pause Time\",\n+                            \"connection-attempt-timeout\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The number of times to try and establish a connection.\",\n+                                \"displayName\": \"Connection Attempt Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"@OnStopped Pause Time\",\n+                                \"name\": \"connection-attempt-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"@OnUnscheduled Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the @OnUnscheduled method, so that the processor can be forced to take a long time to respond when user clicks stop\",\n-                                \"displayName\": \"@OnUnscheduled Pause Time\",\n+                            \"connection-timeout\": {\n+                                \"defaultValue\": \"3 sec\",\n+                                \"description\": \"The timeout to connect the WebSocket URI.\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"connection-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-authorization\": {\n+                                \"description\": \"Configures a custom HTTP Authorization Header as described in RFC 7235 Section 4.2. Setting a custom Authorization Header excludes configuring the User Name and User Password properties for Basic Authentication.\",\n+                                \"displayName\": \"Custom Authorization\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-authorization\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"input-buffer-size\": {\n+                                \"defaultValue\": \"4 kb\",\n+                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n+                                \"displayName\": \"Input Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnUnscheduled Pause Time\",\n+                                \"name\": \"input-buffer-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Size\": {\n-                                \"defaultValue\": \"1 KB\",\n-                                \"description\": \"The number of bytes to write each time that the FlowFile is written to\",\n-                                \"displayName\": \"Content Size\",\n+                            \"max-binary-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n+                                \"displayName\": \"Max Binary Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Size\",\n+                                \"name\": \"max-binary-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"CustomValidate Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n-                                \"displayName\": \"CustomValidate Pause Time\",\n+                            \"max-text-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n+                                \"displayName\": \"Max Text Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CustomValidate Pause Time\",\n+                                \"name\": \"max-text-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnScheduled called\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnScheduled are called\",\n-                                \"displayName\": \"Fail When @OnScheduled called\",\n+                            \"proxy-host\": {\n+                                \"description\": \"The host name of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"proxy-host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-port\": {\n+                                \"description\": \"The port number of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"proxy-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"session-maintenance-interval\": {\n+                                \"defaultValue\": \"10 sec\",\n+                                \"description\": \"The interval between session maintenance activities. A WebSocket session established with a WebSocket server can be terminated due to different reasons including restarting the WebSocket server or timing out inactive sessions. This session maintenance activity is periodically executed in order to reconnect those lost sessions, so that a WebSocket client can reuse the same session id transparently after it reconnects successfully.  The maintenance activity is executed until corresponding processors or this controller service is stopped.\",\n+                                \"displayName\": \"Session Maintenance Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"session-maintenance-interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnScheduled called\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"user-name\": {\n+                                \"description\": \"The user name for Basic Authentication.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"user-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"user-password\": {\n+                                \"description\": \"The user password for Basic Authentication.\",\n+                                \"displayName\": \"User Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"websocket-uri\": {\n+                                \"description\": \"The WebSocket URI this client connects to.\",\n+                                \"displayName\": \"WebSocket URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"websocket-uri\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n-                            \"Fail When @OnStopped called\": {\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"client\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketClient\",\n+                        \"typeDescription\": \"Implementation of WebSocketClientService. This service uses Jetty WebSocket client module to provide WebSocket session management throughout the application.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"auth-path-spec\": {\n+                                \"defaultValue\": \"/*\",\n+                                \"description\": \"Specify a Path Spec to apply Basic Authentication.\",\n+                                \"displayName\": \"Basic Authentication Path Spec\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"auth-path-spec\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"auth-roles\": {\n+                                \"defaultValue\": \"**\",\n+                                \"description\": \"The authenticated user must have one of specified role. Multiple roles can be set as comma separated string. '*' represents any role and so does '**' any role including no role.\",\n+                                \"displayName\": \"Basic Authentication Roles\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"auth-roles\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"basic-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnStopped are called\",\n-                                \"displayName\": \"Fail When @OnStopped called\",\n+                                \"description\": \"If enabled, client connection requests are authenticated with Basic authentication using the specified Login Provider.\",\n+                                \"displayName\": \"Enable Basic Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnStopped called\",\n+                                \"name\": \"basic-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnUnscheduled called\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"want\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"need\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnUnscheduled are called\",\n-                                \"displayName\": \"Fail When @OnUnscheduled called\",\n+                                \"defaultValue\": \"no\",\n+                                \"description\": \"Specifies whether or not the Processor should authenticate client by its certificate. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"SSL Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnUnscheduled called\",\n+                                \"name\": \"client-authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Exception Class\": {\n-                                \"defaultValue\": \"java.lang.RuntimeException\",\n-                                \"description\": \"Exception class to be thrown (must extend java.lang.RuntimeException).\",\n-                                \"displayName\": \"FlowFile Exception Class\",\n+                            \"input-buffer-size\": {\n+                                \"defaultValue\": \"4 kb\",\n+                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n+                                \"displayName\": \"Input Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Class\",\n+                                \"name\": \"input-buffer-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Exception Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to throw exception.\",\n-                                \"displayName\": \"FlowFile Exception Iterations\",\n+                            \"listen-port\": {\n+                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n+                                \"displayName\": \"Listen Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Iterations\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"listen-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Failure Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n-                                \"displayName\": \"FlowFile Failure Iterations\",\n+                            \"login-service\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"See http://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/security/HashLoginService.html for detail.\",\n+                                        \"displayName\": \"HashLoginService\",\n+                                        \"value\": \"hash\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"hash\",\n+                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n+                                \"displayName\": \"Login Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Failure Iterations\",\n-                                \"required\": true,\n+                                \"name\": \"login-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Rollback Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back (without penalty).\",\n-                                \"displayName\": \"FlowFile Rollback Iterations\",\n+                            \"max-binary-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n+                                \"displayName\": \"Max Binary Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Iterations\",\n+                                \"name\": \"max-binary-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Rollback Penalty Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back with penalty.\",\n-                                \"displayName\": \"FlowFile Rollback Penalty Iterations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Penalty Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"FlowFile Rollback Yield Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back and yield.\",\n-                                \"displayName\": \"FlowFile Rollback Yield Iterations\",\n+                            \"max-text-message-size\": {\n+                                \"defaultValue\": \"64 kb\",\n+                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n+                                \"displayName\": \"Max Text Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Yield Iterations\",\n+                                \"name\": \"max-text-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Success Iterations\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Number of FlowFiles to forward to success relationship.\",\n-                                \"displayName\": \"FlowFile Success Iterations\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Success Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Ignore Interrupts When Paused\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If the Processor's thread(s) are sleeping (due to one of the \\\"Pause Time\\\" properties above), and the thread is interrupted, this indicates whether the Processor should ignore the interrupt and continue sleeping or if it should allow itself to be interrupted.\",\n-                                \"displayName\": \"Ignore Interrupts When Paused\",\n+                            \"users-properties-file\": {\n+                                \"description\": \"Specify a property file containing users for Basic Authentication using HashLoginService. See http://www.eclipse.org/jetty/documentation/current/configuring-security.html for detail.\",\n+                                \"displayName\": \"Users Properties File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Interrupts When Paused\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"users-properties-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n-                            \"No FlowFile Exception Class\": {\n-                                \"defaultValue\": \"java.lang.RuntimeException\",\n-                                \"description\": \"Exception class to be thrown if no FlowFile (must extend java.lang.RuntimeException).\",\n-                                \"displayName\": \"No FlowFile Exception Class\",\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"server\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketServer\",\n+                        \"typeDescription\": \"Implementation of WebSocketServerService. This service uses Jetty WebSocket server module to provide WebSocket session management throughout the application.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access keytab\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal.\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Exception Class\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"No FlowFile Exception Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to throw NPE exception if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Exception Iterations\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Exception Iterations\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n-                            \"No FlowFile Skip Iterations\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Number of times to skip onTrigger if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Skip Iterations\",\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosKeytabUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and keytab that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Password\": {\n+                                \"description\": \"Kerberos password associated with the principal.\",\n+                                \"displayName\": \"Kerberos Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Skip Iterations\",\n+                                \"name\": \"Kerberos Password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"No FlowFile Yield Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to yield if no FlowFile.\",\n-                                \"displayName\": \"No FlowFile Yield Iterations\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Yield Iterations\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"OnTrigger Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the onTrigger() method, so that the processor can be forced to take a long time to perform its task\",\n-                                \"displayName\": \"OnTrigger Pause Time\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Password\",\n+                            \"Principal\",\n+                            \"Security\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosPasswordUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and password that other components are able to use in order to perform authentication using Kerberos.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access ticket cache\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"OnTrigger Pause Time\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Principal\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to write to the FlowFile\",\n-                                \"displayName\": \"Write Iterations\",\n+                            \"Kerberos Ticket Cache File\": {\n+                                \"description\": \"Kerberos ticket cache associated with the principal.\",\n+                                \"displayName\": \"Kerberos Ticket Cache File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Iterations\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Ticket Cache File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles processed successfully.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to process.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"FlowFile\",\n-                            \"debug\",\n-                            \"flow\",\n-                            \"processor\",\n-                            \"test\",\n-                            \"utility\"\n+                            \"Authentication\",\n+                            \"Cache\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Principal\",\n+                            \"Security\",\n+                            \"Ticket\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DebugFlow\",\n-                        \"typeDescription\": \"The DebugFlow processor aids testing and debugging the FlowFile framework by allowing various responses to be explicitly triggered in response to the receipt of a FlowFile or a timer event without a FlowFile if using timer or cron based scheduling.  It can force responses needed to exercise or test various failure modes that can occur when a processor runs.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.kerberos.KerberosTicketCacheUserService\",\n+                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and ticket cache that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it an administrator is able to choose which users are allowed to use which ticket caches and principals. This provides a more robust security model for multi-tenant use cases.\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hubspot-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hubspot-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A record's cache key is generated by combining the name of each dynamic property with its evaluated record value (as specified by the corresponding RecordPath).\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of the property.\",\n-                                \"value\": \"A valid RecordPath to the record field to be included in the cache key used for deduplication.\"\n-                            }\n-                        ],\n+                        \"defaultYieldDuration\": \"10 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"bloom-filter-certainty\": {\n-                                \"defaultValue\": \"0.10\",\n-                                \"description\": \"The desired false positive probability when using the BloomFilter type. Using a value of .05 for example, guarantees a five-percent probability that the result is a false positive. The closer to 1 this value is set, the more precise the result at the expense of more storage space utilization.\",\n-                                \"displayName\": \"Bloom Filter Certainty\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bloom-filter-certainty\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-identifier\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"multiple\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"An optional expression language field that overrides the record's computed cache key. This field has an additional attribute available: ${record.hash.value}, which contains the cache key derived from dynamic properties (if set) or record fields.\",\n-                                \"displayName\": \"Cache Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"cache-identifier\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"deduplication-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Single File\",\n-                                        \"value\": \"single\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Multiple Files\",\n-                                        \"value\": \"multiple\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"single\",\n-                                \"description\": \"The strategy to use for detecting and routing duplicate records. The option for detecting duplicates across a single FlowFile operates in-memory, whereas detection spanning multiple FlowFiles utilises a distributed map cache.\",\n-                                \"displayName\": \"Deduplication Strategy\",\n+                            \"access-token\": {\n+                                \"description\": \"Access Token to authenticate requests\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"deduplication-strategy\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"distributed-map-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"multiple\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property is required when the deduplication strategy is set to 'multiple files.' The map cache will for each record, atomically check whether the cache key exists and if not, set it.\",\n-                                \"displayName\": \"Distributed Map Cache client\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-map-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"filter-capacity-hint\": {\n-                                \"defaultValue\": \"25000\",\n+                            \"incremental-delay\": {\n+                                \"defaultValue\": \"30 sec\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"bloom-filter\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Filter Type\",\n-                                        \"propertyName\": \"filter-type\"\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n                                     }\n                                 ],\n-                                \"description\": \"An estimation of the total number of unique records to be processed. The more accurate this number is will lead to fewer false negatives on a BloomFilter.\",\n-                                \"displayName\": \"Filter Capacity Hint\",\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and HubSpot servers' clock are not in sync and to protect against HubSpot's mechanism that changes last updated timestamps after object creation.\",\n+                                \"displayName\": \"Incremental Delay\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-capacity-hint\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"incremental-delay\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filter-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Exactly matches records seen before with 100% accuracy at the expense of more storage usage. Stores the filter data in a single cache entry in the distributed cache, and is loaded entirely into memory during duplicate detection. This filter is preferred for small to medium data sets and offers high performance, being loaded into memory when this processor is running.\",\n-                                        \"displayName\": \"HashSet\",\n-                                        \"value\": \"hash-set\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Space-efficient data structure ideal for large data sets using probability to determine if a record was seen previously. False positive matches are possible, but false negatives are not \\u2013 in other words, a query returns either \\\"possibly in the set\\\" or \\\"definitely not in the set\\\". You should use this option if the FlowFile content is large and you can tolerate some duplication in the data. Uses constant storage space regardless of the record set size.\",\n-                                        \"displayName\": \"BloomFilter\",\n-                                        \"value\": \"bloom-filter\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"hash-set\",\n+                            \"incremental-initial-start-time\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"single\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n                                     }\n                                 ],\n-                                \"description\": \"The filter used to determine whether a record has been seen before based on the matching RecordPath criteria. If hash set is selected, a Java HashSet object will be used to deduplicate all encountered records. If the bloom filter option is selected, a bloom filter will be used. The bloom filter option is less memory intensive, but has a chance of having false positives.\",\n-                                \"displayName\": \"Filter Type\",\n+                                \"description\": \"This property specifies the start time that the processor applies when running the first request. The expected format is a UTC date-time such as '2011-12-03T10:15:30Z'\",\n+                                \"displayName\": \"Incremental Initial Start Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"incremental-initial-start-time\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\n+                            \"is-incremental\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If a FlowFile sent to either the duplicate or non-duplicate relationships contains no records, a value of `false` in this property causes the FlowFile to be dropped. Otherwise, the empty FlowFile is emitted.\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects within a time window where the objects were modified between the previous run time and the current time (optionally adjusted by the Incremental Delay property).\",\n+                                \"displayName\": \"Incremental Loading\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"name\": \"is-incremental\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cache-identifier\": {\n+                            \"object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"In HubSpot, the companies object is a standard CRM object. Individual company records can be used to store information about businesses and organizations within company properties.\",\n+                                        \"displayName\": \"Companies\",\n+                                        \"value\": \"/crm/v3/objects/companies\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"In HubSpot, contacts store information about individuals. From marketing automation to smart content, the lead-specific data found in contact records helps users leverage much of HubSpot's functionality.\",\n+                                        \"displayName\": \"Contacts\",\n+                                        \"value\": \"/crm/v3/objects/contacts\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Distributed Map Cache client\",\n-                                        \"propertyName\": \"distributed-map-cache\"\n-                                    }\n-                                ],\n-                                \"description\": \"For each record, check whether the cache identifier exists in the distributed map cache. If it doesn't exist and this property is true, put the identifier to the cache.\",\n-                                \"displayName\": \"Cache the Entry Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-cache-identifier\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-hashing-algorithm\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"In HubSpot, a deal represents an ongoing transaction that a sales team is pursuing with a contact or company. It\\u2019s tracked through pipeline stages until won or lost.\",\n+                                        \"displayName\": \"Deals\",\n+                                        \"value\": \"/crm/v3/objects/deals\"\n+                                    },\n                                     {\n-                                        \"description\": \"Do not use a hashing algorithm. The value of resolved RecordPaths will be combined with a delimiter (~) to form the unique cache key. This may use significantly more storage depending on the size and shape or your data.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"In HubSpot, line items can be thought of as a subset of products. When a product is attached to a deal, it becomes a line item. Line items can be created that are unique to an individual quote, but they will not be added to the product library.\",\n+                                        \"displayName\": \"Line Items\",\n+                                        \"value\": \"/crm/v3/objects/line_items\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-256 cryptographic hashing algorithm.\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n+                                        \"description\": \"In HubSpot, products represent the goods or services to be sold. Building a product library allows the user to quickly add products to deals, generate quotes, and report on product performance.\",\n+                                        \"displayName\": \"Products\",\n+                                        \"value\": \"/crm/v3/objects/products\"\n                                     },\n                                     {\n-                                        \"description\": \"SHA-512 cryptographic hashing algorithm.\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n+                                        \"description\": \"In HubSpot, a ticket represents a customer request for help or support.\",\n+                                        \"displayName\": \"Tickets\",\n+                                        \"value\": \"/crm/v3/objects/tickets\"\n+                                    },\n+                                    {\n+                                        \"description\": \"In HubSpot, quotes are used to share pricing information with potential buyers.\",\n+                                        \"displayName\": \"Quotes\",\n+                                        \"value\": \"/crm/v3/objects/quotes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get calls on CRM records and on the calls index page.\",\n+                                        \"displayName\": \"Calls\",\n+                                        \"value\": \"/crm/v3/objects/calls\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get emails on CRM records.\",\n+                                        \"displayName\": \"Emails\",\n+                                        \"value\": \"/crm/v3/objects/emails\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get meetings on CRM records.\",\n+                                        \"displayName\": \"Meetings\",\n+                                        \"value\": \"/crm/v3/objects/meetings\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get notes on CRM records.\",\n+                                        \"displayName\": \"Notes\",\n+                                        \"value\": \"/crm/v3/objects/notes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Get tasks on CRM records.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"/crm/v3/objects/tasks\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The algorithm used to hash the cache key.\",\n-                                \"displayName\": \"Record Hashing Algorithm\",\n+                                \"description\": \"The HubSpot Object Type requested\",\n+                                \"displayName\": \"Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-hashing-algorithm\",\n+                                \"name\": \"object-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"result-limit\": {\n+                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n+                                \"displayName\": \"Result Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"result-limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"In case of incremental loading, the start and end timestamps of the last query time window are stored in the state. When the 'Result Limit' property is set, the paging cursor is saved after executing a request. Only the objects after the paging cursor will be retrieved. The maximum number of retrieved objects can be set in the 'Result Limit' property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Records detected as duplicates are routed to this relationship.\",\n-                                \"name\": \"duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"Records not found in the cache are routed to this relationship.\",\n-                                \"name\": \"non-duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input FlowFile is sent to this relationship unless a fatal error occurs.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The HashSet filter type will grow memory space proportionate to the number of unique records processed. The BloomFilter type will use constant memory regardless of the number of records processed.\",\n-                                \"resource\": \"MEMORY\"\n-                            },\n-                            {\n-                                \"description\": \"If a more advanced hash algorithm is chosen, the amount of time required to hash any particular record could increase substantially.\",\n-                                \"resource\": \"CPU\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"change\",\n-                            \"dedupe\",\n-                            \"distinct\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"filter\",\n-                            \"hash\",\n-                            \"modify\",\n-                            \"record\",\n-                            \"replace\",\n-                            \"text\",\n-                            \"unique\",\n-                            \"update\"\n+                            \"hubspot\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DeduplicateRecord\",\n-                        \"typeDescription\": \"This processor de-duplicates individual records within a record set. It can operate on a per-file basis using an in-memory hashset or bloom filter. When configured with a distributed map cache, it de-duplicates records across multiple files.\",\n+                        \"type\": \"org.apache.nifi.processors.hubspot.GetHubSpot\",\n+                        \"typeDescription\": \"Retrieves JSON data from a private HubSpot application. This processor is intended to be run on the Primary Node only.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to the destination FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n+                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n+                                \"requiredPermission\": \"access environment credentials\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"application-default-credentials\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, uses Google Application Default Credentials, which checks the GOOGLE_APPLICATION_CREDENTIALS environment variable for a filepath to a service account JSON key, the config generated by the gcloud sdk, the App Engine service account, and the Compute Engine service account.\",\n+                                \"displayName\": \"Use Application Default Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"application-default-credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"compute-engine-credentials\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, uses Google Compute Engine Credentials of the Compute Engine VM Instance which NiFi is running on.\",\n+                                \"displayName\": \"Use Compute Engine Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"compute-engine-credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"service-account-json\": {\n+                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n+                                \"displayName\": \"Service Account JSON\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"service-account-json\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n+                            \"service-account-json-file\": {\n+                                \"description\": \"Path to a file containing a Service Account key file in JSON format.\",\n+                                \"displayName\": \"Service Account JSON File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-account-json-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n+                                \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"credentials\",\n+                            \"gcp\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.processors.gcp.credentials.service.GCPCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Google Cloud Platform processors. Uses Application Default credentials without configuration. Application Default credentials support environmental variable (GOOGLE_APPLICATION_CREDENTIALS) pointing to a credential file, the config generated by `gcloud auth application-default login`, AppEngine/Compute Engine service accounts, etc.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Directory Path\": {\n-                                \"defaultValue\": \"${absolute.path}\",\n-                                \"description\": \"The path to the directory the file to delete is located in.\",\n-                                \"displayName\": \"Directory Path\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Directory Path\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filename\": {\n+                            \"Name\": {\n                                 \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to delete.\",\n-                                \"displayName\": \"Filename\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Filename\",\n+                                \"name\": \"Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles, for which the file to delete did not exist, are routed to this relationship\",\n-                                \"name\": \"not found\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles, for which an existing file has been deleted, are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles, for which an existing file could not be deleted, are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n                         ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n                             \"file\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"local\",\n-                            \"remove\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DeleteFile\",\n-                        \"typeDescription\": \"Deletes a file from the filesystem.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Retrieve a file from the filesystem, e.g. using 'ListFile' and 'FetchFile'.\\nProcess the file using any combination of processors.\\nStore the resulting file to a destination, e.g. using 'PutSFTP'.\\nUsing 'DeleteFile', delete the file from the filesystem only after the result has been stored.\\n\",\n-                                \"description\": \"Delete source file only after its processing completed\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n+                            \"gcs\",\n+                            \"resource\"\n                         ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Human-readable reason of failure. Only available if FlowFile is routed to relationship 'failure'.\",\n-                                \"name\": \"DeleteFile.failure.reason\"\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.GCSFileResourceService\",\n+                        \"typeDescription\": \"Provides a Google Compute Storage (GCS) file resource for other components.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"The class name of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n-                                \"name\": \"DeleteFile.failure.exception.class\"\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The message of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n-                                \"name\": \"DeleteFile.failure.exception.message\"\n+                            \"group-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression matching on the 'group-name' label value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' label value that matches this Regex will not be fetched.\",\n+                                \"displayName\": \"Group Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"group-name-pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n-                        ]\n-                    },\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"gcp\",\n+                            \"manager\",\n+                            \"secret\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.gcp.GcpSecretManagerParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from GCP Secret Manager.  Each secret becomes a Parameter, which can be mapped to a Parameter Group by adding a GCP label named 'group-name'.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -18577,136 +18955,204 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Age Off Duration\": {\n-                                \"description\": \"Time interval to age off cached FlowFiles\",\n-                                \"displayName\": \"Age Off Duration\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Age Off Duration\",\n-                                \"required\": false,\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"bigquery-api-endpoint\": {\n+                                \"defaultValue\": \"bigquerystorage.googleapis.com:443\",\n+                                \"description\": \"Can be used to override the default BigQuery endpoint. Default is bigquerystorage.googleapis.com:443. Format must be hostname:port.\",\n+                                \"displayName\": \"BigQuery API Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bigquery-api-endpoint\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache Entry Identifier\": {\n-                                \"defaultValue\": \"${hash.value}\",\n-                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the value used to identify duplicates; it is this value that is cached\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n+                            \"bq.append.record.count\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"The number of records to be appended to the write stream at once. Applicable for both batch and stream types\",\n+                                \"displayName\": \"Append Record Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.append.record.count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.dataset\": {\n+                                \"defaultValue\": \"${bq.dataset}\",\n+                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n+                                \"displayName\": \"Dataset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"name\": \"bq.dataset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache The Entry Identifier\": {\n+                            \"bq.record.reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bq.record.reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"bq.skip.invalid.rows\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n+                                \"displayName\": \"Skip Invalid Rows\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"bq.skip.invalid.rows\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.table.name\": {\n+                                \"defaultValue\": \"${bq.table.name}\",\n+                                \"description\": \"BigQuery table name\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"bq.table.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.transfer.type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Use streaming record handling strategy\",\n+                                        \"displayName\": \"STREAM\",\n+                                        \"value\": \"STREAM\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Use batching record handling strategy\",\n+                                        \"displayName\": \"BATCH\",\n+                                        \"value\": \"BATCH\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When true this cause the processor to check for duplicates and cache the Entry Identifier. When false, the processor would only check for duplicates and not cache the Entry Identifier, requiring another processor to add identifiers to the distributed cache.\",\n-                                \"displayName\": \"Cache The Entry Identifier\",\n+                                \"defaultValue\": \"STREAM\",\n+                                \"description\": \"Defines the preferred transfer type streaming or batching\",\n+                                \"displayName\": \"Transfer Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache The Entry Identifier\",\n-                                \"required\": false,\n+                                \"name\": \"bq.transfer.type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache unique identifiers, used to determine duplicates\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"FlowFile Description\": {\n-                                \"defaultValue\": \"\",\n-                                \"description\": \"When a FlowFile is added to the cache, this value is stored along with it so that if a duplicate is found, this description of the original FlowFile will be added to the duplicate's \\\"original.flowfile.description\\\" attribute\",\n-                                \"displayName\": \"FlowFile Description\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"FlowFile Description\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile has been detected to be a duplicate, it will be routed to this relationship\",\n-                                \"name\": \"duplicate\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n-                                \"name\": \"non-duplicate\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dedupe\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"hash\"\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"google\",\n+                            \"google cloud\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DetectDuplicate\",\n-                        \"typeDescription\": \"Caches a value, computed from FlowFile attributes, for each incoming FlowFile and determines if the cached value has already been seen. If so, routes the FlowFile to 'duplicate' with an attribute named 'original.identifier' that specifies the original FlowFile's \\\"description\\\", which is specified in the <FlowFile Description> property. If the FlowFile is not determined to be a duplicate, the Processor routes the FlowFile to 'non-duplicate'\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to a Google BigQuery table. The processor is record based so the schema that is used is driven by the RecordReader. Attributes that are not matched to the target schema are skipped. Exactly once delivery semantics are achieved via stream offsets.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All FlowFiles routed to the duplicate relationship will have an attribute added named original.flowfile.description. The value of this attribute is determined by the attributes of the original copy of the data and by the FlowFile Description property.\",\n-                                \"name\": \"original.flowfile.description\"\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -18714,363 +19160,622 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n                             {\n-                                \"description\": \"Adding a property with the name '5' and value '10' means that the relationship with name '5' will receive 10 FlowFiles in each iteration instead of 1.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The relationship name (positive number)\",\n-                                \"value\": \"The relationship Weight (positive number)\"\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Folder ID\\\" property should be set to the ID of the Google Drive folder that files reside in.     See processor documentation / additional details for more information on how to determine a Google Drive folder's ID.\\n    If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GOOGLE_DRIVE_FOLDER_ID}`.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the folder.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGoogleDrive.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"File ID\\\" = \\\"${drive.id}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in a Google Drive folder\",\n+                                \"keywords\": [\n+                                    \"google\",\n+                                    \"drive\",\n+                                    \"google cloud\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n                             }\n                         ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles are sent to this relationship per the <Distribution Strategy>\",\n-                            \"name\": \"A number 1..<Number Of Relationships>\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Distribution Strategy\": {\n+                            \"Google Doc Export Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Relationship selection is evenly distributed in a round robin fashion; all relationships must be available.\",\n-                                        \"displayName\": \"round robin\",\n-                                        \"value\": \"round robin\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n                                     },\n                                     {\n-                                        \"description\": \"Relationship selection is distributed across all available relationships in order of their weight; at least one relationship must be available.\",\n-                                        \"displayName\": \"next available\",\n-                                        \"value\": \"next available\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Plain Text\",\n+                                        \"value\": \"text/plain\"\n                                     },\n                                     {\n-                                        \"description\": \"Relationship selection is the first available relationship without further distribution among all relationships; at least one relationship must be available.\",\n-                                        \"displayName\": \"overflow\",\n-                                        \"value\": \"overflow\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Microsoft Word\",\n+                                        \"value\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OpenDocument\",\n+                                        \"value\": \"application/vnd.oasis.opendocument.text\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Rich Text\",\n+                                        \"value\": \"application/rtf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Web Page (HTML)\",\n+                                        \"value\": \"application/zip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EPUB\",\n+                                        \"value\": \"application/epub+zip\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"round robin\",\n-                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n-                                \"displayName\": \"Distribution Strategy\",\n+                                \"defaultValue\": \"application/pdf\",\n+                                \"description\": \"Google Documents cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Document, this property specifies the MIME Type to export the document to.\",\n+                                \"displayName\": \"Google Doc Export Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distribution Strategy\",\n+                                \"name\": \"Google Doc Export Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Number of Relationships\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Determines the number of Relationships to which the load should be distributed\",\n-                                \"displayName\": \"Number of Relationships\",\n+                            \"Google Drawing Export Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNG\",\n+                                        \"value\": \"image/png\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JPEG\",\n+                                        \"value\": \"image/jpeg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SVG\",\n+                                        \"value\": \"image/svg+xml\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"application/pdf\",\n+                                \"description\": \"Google Drawings cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Drawing, this property specifies the MIME Type to export the drawing to.\",\n+                                \"displayName\": \"Google Drawing Export Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Number of Relationships\",\n+                                \"name\": \"Google Drawing Export Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Where to route flowfiles for this relationship index\",\n-                                \"name\": \"1\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"distribute\",\n-                            \"load balance\",\n-                            \"round robin\",\n-                            \"route\",\n-                            \"weighted\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": true,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DistributeLoad\",\n-                        \"typeDescription\": \"Distributes FlowFiles to downstream processors based on a Distribution Strategy. If using the Round Robin strategy, the default is to assign each destination a weighting of 1 (evenly distributed). However, optional properties can be added to the change this; adding a property with the name '5' and value '10' means that the relationship with name '5' will be receive 10 FlowFiles in each iteration instead of 1.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n-                                \"name\": \"distribute.load.relationship\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Number of Copies\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many copies of each incoming FlowFile will be made\",\n-                                \"displayName\": \"Number of Copies\",\n+                            },\n+                            \"Google Presentation Export Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Microsoft PowerPoint\",\n+                                        \"value\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Plain Text\",\n+                                        \"value\": \"text/plain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OpenDocument Presentation\",\n+                                        \"value\": \"application/vnd.oasis.opendocument.presentation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNG (first slide only)\",\n+                                        \"value\": \"image/png\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JPEG (first slide only)\",\n+                                        \"value\": \"image/jpeg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Scalable Vector Graphics. Only the first slide will be exported.\",\n+                                        \"displayName\": \"SVG (first slide only)\",\n+                                        \"value\": \"image/svg+xml\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"application/pdf\",\n+                                \"description\": \"Google Presentations cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Presentation, this property specifies the MIME Type to export the presentation to.\",\n+                                \"displayName\": \"Google Presentation Export Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Google Presentation Export Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Google Spreadsheet Export Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Comma-separated values. Only the first sheet will be exported.\",\n+                                        \"displayName\": \"CSV (first sheet only)\",\n+                                        \"value\": \"text/csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Tab-separate values. Only the first sheet will be exported.\",\n+                                        \"displayName\": \"TSV (first sheet only)\",\n+                                        \"value\": \"text/tab-separated-values\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Web Page (HTML)\",\n+                                        \"value\": \"text/html\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OpenDocument Spreadsheet\",\n+                                        \"value\": \"application/x-vnd.oasis.opendocument.spreadsheet\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"text/csv\",\n+                                \"description\": \"Google Spreadsheets cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Spreadsheet, this property specifies the MIME Type to export the spreadsheet to.\",\n+                                \"displayName\": \"Google Spreadsheet Export Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Google Spreadsheet Export Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"drive-file-id\": {\n+                                \"defaultValue\": \"${drive.id}\",\n+                                \"description\": \"The Drive ID of the File to fetch. Please see Additional Details for information on how to obtain the Drive ID.\",\n+                                \"displayName\": \"File ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Number of Copies\",\n+                                \"name\": \"drive-file-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"duplicate\",\n-                            \"load\",\n-                            \"test\"\n+                            \"drive\",\n+                            \"fetch\",\n+                            \"google\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DuplicateFlowFile\",\n-                        \"typeDescription\": \"Intended for load testing, this processor will create the configured number of copies of each incoming FlowFile. The original FlowFile as well as all generated copies are sent to the 'success' relationship. In addition, each FlowFile gets an attribute 'copy.index' set to the copy number, where the original FlowFile gets a value of zero, and all copies receive incremented integer values.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                        \"typeDescription\": \"Fetches files from a Google Drive Folder. Designed to be used in tandem with ListGoogleDrive. Please see Additional Details to set up access to Google Drive.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n-                                \"name\": \"copy.index\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Google Drive\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Google Drive\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Encoded Line Length\": {\n-                                \"defaultValue\": \"76\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"base32\",\n-                                            \"base64\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Encoding\",\n-                                        \"propertyName\": \"Encoding\"\n-                                    },\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Encode\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n-                                    },\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"MULTIPLE_LINES\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Line Output Mode\",\n-                                        \"propertyName\": \"Line Output Mode\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Each line of encoded data will contain up to the configured number of characters, rounded down to the nearest multiple of 4.\",\n-                                \"displayName\": \"Encoded Line Length\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Encoded Line Length\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"folder-id\": {\n+                                \"description\": \"The ID of the folder from which to pull list of files. Please see Additional Details to set up access to Google Drive and obtain Folder ID. WARNING: Unauthorized access to the folder is treated as if the folder was empty. This results in the processor not creating outgoing FlowFiles. No additional error message is provided.\",\n+                                \"displayName\": \"Folder ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"folder-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Encode or decode using Base64 set of characters\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"base64\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Encode or decode using Base32 set of characters\",\n-                                        \"displayName\": \"Base32\",\n-                                        \"value\": \"base32\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Encode or decode using hexadecimal set of characters\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"hex\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"base64\",\n-                                \"description\": \"Specifies the type of encoding used.\",\n-                                \"displayName\": \"Encoding\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Encoding\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Line Output Mode\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The encoded content will be written as a single line.\",\n-                                        \"displayName\": \"Single Line\",\n-                                        \"value\": \"SINGLE_LINE\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"The encoded content will be written as multiple lines.\",\n-                                        \"displayName\": \"Multiple Lines\",\n-                                        \"value\": \"MULTIPLE_LINES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SINGLE_LINE\",\n-                                \"dependencies\": [\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"base32\",\n-                                            \"base64\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Encoding\",\n-                                        \"propertyName\": \"Encoding\"\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Encode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"description\": \"Controls the line formatting for encoded content based on selected property values.\",\n-                                \"displayName\": \"Line Output Mode\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Output Mode\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transform original input to encoded representation\",\n-                                        \"displayName\": \"Encode\",\n-                                        \"value\": \"Encode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Transform encoded input to original representation\",\n-                                        \"displayName\": \"Decode\",\n-                                        \"value\": \"Decode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Encode\",\n-                                \"description\": \"Specifies whether the content should be encoded or decoded.\",\n-                                \"displayName\": \"Mode\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When 'true', will include list of files from concrete sub-folders (ignores shortcuts). Otherwise, will return only files that have the defined 'Folder ID' as their parent directly. WARNING: The listing may fail if there are too many sub-folders (500+).\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mode\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"base32\",\n-                            \"base64\",\n-                            \"decode\",\n-                            \"encode\",\n-                            \"hex\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EncodeContent\",\n-                        \"typeDescription\": \"Encode or decode the contents of a FlowFile using Base64, Base32, or hex encoding schemes\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n+                        \"typeDescription\": \"Performs a listing of concrete files (shortcuts are ignored) in a Google Drive folder. If the 'Record Writer' property is set, a single Output FlowFile is created, and each file in the listing is written as a single record to the output file. Otherwise, for each file in the listing, an individual FlowFile is created, the metadata being written as FlowFile attributes. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Please see Additional Details to set up access to Google Drive.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19083,160 +19788,194 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"batch-count\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n-                                \"displayName\": \"Batch Count\",\n+                            \"chunked-upload-size\": {\n+                                \"defaultValue\": \"10 MB\",\n+                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. Minimum allowed chunk size is 256 KB, maximum allowed chunk size is 1 GB.\",\n+                                \"displayName\": \"Chunked Upload Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-count\",\n-                                \"required\": true,\n+                                \"name\": \"chunked-upload-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"group-id\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Group Identifier\",\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"100 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"group-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"inactive-timeout\": {\n-                                \"defaultValue\": \"30 min\",\n-                                \"description\": \"Indicates the duration after which state for an inactive group will be cleared from managed state. Group is determined as inactive if any new incoming FlowFile has not seen for a group for specified duration. Inactive Timeout must be longer than Wait Timeout. If a FlowFile arrives late after its group is already cleared, it will be treated as a brand new group, but will never match the order since expected preceding FlowFiles are already gone. The FlowFile will eventually timeout for waiting and routed to 'overtook'. To avoid this, group states should be kept long enough, however, shorter duration would be helpful for reusing the same group identifier again.\",\n-                                \"displayName\": \"Inactive Timeout\",\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Google Drive folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"inactive-timeout\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-order\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When the first FlowFile of a group arrives, initial target order will be computed and stored in the managed state. After that, target order will start being tracked by EnforceOrder and stored in the state management store. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and initial order will be left unknown until consecutive FlowFiles provide a valid initial order.\",\n-                                \"displayName\": \"Initial Order\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"initial-order\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"maximum-order\": {\n-                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n-                                \"displayName\": \"Maximum Order\",\n+                            \"folder-id\": {\n+                                \"description\": \"The ID of the shared folder. Please see Additional Details to set up access to Google Drive and obtain Folder ID.\",\n+                                \"displayName\": \"Folder ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum-order\",\n-                                \"required\": false,\n+                                \"name\": \"folder-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"order-attribute\": {\n-                                \"description\": \"A name of FlowFile attribute whose value will be used to enforce order of FlowFiles within a group. If a FlowFile does not have this attribute, or its value is not an integer, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Order Attribute\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"order-attribute\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"wait-timeout\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'overtook' relationship.\",\n-                                \"displayName\": \"Wait Timeout\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Google Drive object.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n-                                \"name\": \"overtook\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n-                                \"name\": \"skipped\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n-                                \"name\": \"wait\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"description\": \"Files that could not be written to Google Drive for some reason are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"order\",\n-                            \"sort\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EnforceOrder\",\n-                        \"typeDescription\": \"Enforces expected ordering of FlowFiles that belong to the same data group within a single node.  Although PriorityAttributePrioritizer can be used on a connection to ensure that flow files going through that connection are in priority order, depending on error-handling, branching, and other flow designs, it is possible for FlowFiles to get out-of-order. EnforceOrder can be used to enforce original ordering for those FlowFiles. [IMPORTANT] In order to take effect of EnforceOrder, FirstInFirstOutPrioritizer should be used at EVERY downstream relationship UNTIL the order of FlowFiles physically get FIXED by operation such as MergeContent or being stored to the final destination.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as a file in Google Drive.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All FlowFiles going through this processor will have this attribute. This value is used to determine wait timeout.\",\n-                                \"name\": \"EnforceOrder.startedAt\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles going through this processor will have this attribute denoting which relationship it was routed to.\",\n-                                \"name\": \"EnforceOrder.result\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n-                                \"name\": \"EnforceOrder.detail\"\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n-                                \"name\": \"EnforceOrder.expectedOrder\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n+                                \"name\": \"drive.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Google Drive\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Google Drive\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19244,189 +19983,153 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then that FlowFile attribute will be set to any JSON objects that match the JsonPath.  If <Destination>='flowfile-content' then the FlowFile content will be updated to any JSON objects that match the JsonPath.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n-                                \"value\": \"A JsonPath expression\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the JsonPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one JsonPath may be specified, and the property name is ignored.\",\n-                                \"displayName\": \"Destination\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n+                            \"api-endpoint\": {\n+                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n+                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n+                                \"displayName\": \"API Endpoint\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"api-endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value Representation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"empty string\",\n-                                        \"value\": \"empty string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"the string 'null'\",\n-                                        \"value\": \"the string 'null'\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"empty string\",\n-                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n-                                \"displayName\": \"Null Value Representation\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Not Found Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"skip\",\n-                                        \"value\": \"skip\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ignore\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"Indicates how to handle missing JSON path expressions when destination is set to 'flowfile-attribute'. Selecting 'warn' will generate a warning when a JSON path expression is not found. Selecting 'skip' will omit attributes for any unmatched JSON path expressions.\",\n-                                \"displayName\": \"Path Not Found Behavior\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Not Found Behavior\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-pubsub-subscription\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"json\",\n-                                        \"value\": \"json\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"scalar\",\n-                                        \"value\": \"scalar\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Indicates the desired return type of the JSON Path expressions.  Selecting 'auto-detect' will set the return type to 'json' for a Destination of 'flowfile-content', and 'scalar' for a Destination of 'flowfile-attribute'.\",\n-                                \"displayName\": \"Return Type\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid JSON\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"JSON\",\n-                            \"JsonPath\",\n-                            \"evaluate\"\n+                            \"consume\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"message\",\n+                            \"pubsub\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\",\n-                        \"typeDescription\": \"Evaluates one or more JsonPath expressions against the content of a FlowFile. The results of those expressions are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. JsonPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid JsonPath expression. A Return Type of 'auto-detect' will make a determination based off the configured destination. When 'Destination' is set to 'flowfile-attribute,' a return type of 'scalar' will be used. When 'Destination' is set to 'flowfile-content,' a return type of 'JSON' will be used.If the JsonPath evaluates to a JSON array or JSON object and the Return Type is set to 'scalar' the FlowFile will be unmodified and will be routed to failure. A Return Type of JSON can return scalar values if the provided JsonPath evaluates to the specified value and will be routed as a match.If Destination is 'flowfile-content' and the JsonPath does not evaluate to a defined path, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is 'flowfile-attribute' and the expression matches nothing, attributes will be created with empty strings as the value unless 'Path Not Found Behaviour' is set to 'skip', and the FlowFile will always be routed to 'matched.'\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\",\n+                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub subscription. If the 'Batch Size' is set, the configured number of messages will be pulled in a single request, else only one message will be pulled.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.ackId\"\n+                            },\n+                            {\n+                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.messageSize\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n+                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp value when the message was published\",\n+                                \"name\": \"gcp.pubsub.publishTime\"\n+                            },\n+                            {\n+                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n+                                \"name\": \"Dynamic Attributes\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19436,151 +20139,291 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XPath Expression.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XPath Expression.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n-                                \"value\": \"An XPath expression\"\n+                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub message\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Attribute name\",\n+                                \"value\": \"Value to be set to the attribute\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Input Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n+                                \"displayName\": \"Input Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Input Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Message Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the XPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one XPath may be specified, and the property name is ignored.\",\n-                                \"displayName\": \"Destination\",\n+                                \"description\": \"The maximum size of a Google PubSub message in bytes. Defaults to 1 MB (1048576 bytes)\",\n+                                \"displayName\": \"Maximum Message Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"Maximum Message Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"Message Derivation Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"nodeset\",\n-                                        \"value\": \"nodeset\"\n+                                        \"description\": \"Each incoming FlowFile is sent as a Google Cloud PubSub message\",\n+                                        \"displayName\": \"FlowFile Oriented\",\n+                                        \"value\": \"FLOWFILE_ORIENTED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"description\": \"Each incoming FlowFile is parsed into NiFi records, which are each sent as a Google Cloud PubSub message\",\n+                                        \"displayName\": \"Record Oriented\",\n+                                        \"value\": \"RECORD_ORIENTED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Indicates the desired return type of the Xpath expressions.  Selecting 'auto-detect' will set the return type to 'nodeset' for a Destination of 'flowfile-content', and 'string' for a Destination of 'flowfile-attribute'.\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n+                                \"description\": \"The strategy used to publish the incoming FlowFile to the Google Cloud PubSub endpoint.\",\n+                                \"displayName\": \"Message Derivation Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Type\",\n+                                \"name\": \"Message Derivation Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n-                                \"allowableValues\": [\n+                            \"Record Reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Record Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to GCPubSub endpoint\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Validate DTD\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"api-endpoint\": {\n+                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n+                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n+                                \"displayName\": \"API Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"api-endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-batch-bytes\": {\n+                                \"defaultValue\": \"3 MB\",\n+                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n+                                \"displayName\": \"Batch Bytes Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-batch-bytes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-pubsub-publish-batch-delay\": {\n+                                \"defaultValue\": \"100 millis\",\n+                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n+                                \"displayName\": \"Batch Delay Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-pubsub-topic\": {\n+                                \"description\": \"Name of the Google Cloud PubSub Topic\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-pubsub-topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid XML, or if the Return Type is 'nodeset' and the XPath evaluates to multiple nodes\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails but attempting the operation again may succeed.\",\n+                                \"name\": \"retry\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n+                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"XML\",\n-                            \"XPath\",\n-                            \"evaluate\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXPath\",\n-                        \"typeDescription\": \"Evaluates one or more XPaths against the content of a FlowFile. The results of those XPaths are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. XPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid XPath expression. If the XPath evaluates to more than one node and the Return Type is set to 'nodeset' (either directly, or via 'auto-detect' with a Destination of 'flowfile-content'), the FlowFile will be unmodified and will be routed to failure. If the XPath does not evaluate to a Node, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is flowfile-attribute and the expression matches nothing, attributes will be created with empty strings as the value, and the FlowFile will always be routed to 'matched'\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\",\n+                        \"typeDescription\": \"Publishes the content of the incoming flowfile to the configured Google Cloud PubSub topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute.\",\n-                                \"name\": \"user-defined\"\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"Count of pubsub messages published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.count.records\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19588,176 +20431,128 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XQuery.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XQuery.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n-                                \"value\": \"An XQuery\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the XQuery evaluation are written to the FlowFile content or a FlowFile attribute. If set to <flowfile-content>, only one XQuery may be specified and the property name is ignored.  If set to <flowfile-attribute> and the XQuery returns more than one result, multiple attributes will be added to theFlowFile, each named with a '.n' one-up number appended to the specified attribute name\",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output: Indent\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n-                                \"displayName\": \"Output: Indent\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Indent\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Output: Method\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xml\",\n-                                        \"value\": \"xml\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"html\",\n-                                        \"value\": \"html\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"xml\",\n-                                \"description\": \"Identifies the overall method that should be used for outputting a result tree.\",\n-                                \"displayName\": \"Output: Method\",\n+                            \"gcp-bytes-outstanding\": {\n+                                \"defaultValue\": \"10 MB\",\n+                                \"description\": \"The number of quota bytes that may be outstanding to the client.\",\n+                                \"displayName\": \"Bytes Outstanding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Method\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-bytes-outstanding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output: Omit XML Declaration\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the processor should output an XML declaration when transforming a result tree.\",\n-                                \"displayName\": \"Output: Omit XML Declaration\",\n+                            \"gcp-messages-outstanding\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The number of messages that may be outstanding to the client.\",\n+                                \"displayName\": \"Messages Outstanding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Omit XML Declaration\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-messages-outstanding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription. Example: projects/8476107443/locations/europe-west1-d/subscriptions/my-lite-subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Validate DTD\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-pubsub-subscription\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery cannot be evaluated against the content of the FlowFile.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"XML\",\n-                            \"XPath\",\n-                            \"XQuery\",\n-                            \"evaluate\"\n+                            \"consume\",\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"pubsub\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXQuery\",\n-                        \"typeDescription\": \"Evaluates one or more XQueries against the content of a FlowFile.  The results of those XQueries are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor.  XQueries are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is 'flowfile-attribute'; otherwise, the property name is ignored).  The value of the property must be a valid XQuery.  If the XQuery returns more than one result, new attributes or FlowFiles (for Destinations of 'flowfile-attribute' or 'flowfile-content' respectively) will be created for each result (attributes will have a '.n' one-up number appended to the specified attribute name).  If any provided XQuery returns a result, the FlowFile(s) will be routed to 'matched'. If no provided XQuery returns a result, the FlowFile will be routed to 'unmatched'.  If the Destination is 'flowfile-attribute' and the XQueries matche nothing, no attributes will be applied to the FlowFile.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n+                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute .\",\n-                                \"name\": \"user-defined\"\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"If non-empty, identifies related messages for which publish order should be respected. If a 'Subscription' has 'enable_message_ordering' set to 'true', messages published with the same non-empty 'ordering_key' value will be delivered to subscribers in the order in which they are received by the Pub/Sub system. All 'PubsubMessage's published in a given 'PublishRequest' must specify the same 'ordering_key' value.\",\n+                                \"name\": \"gcp.pubsub.ordering.key\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n+                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp value when the message was published\",\n+                                \"name\": \"gcp.pubsub.publishTime\"\n+                            },\n+                            {\n+                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n+                                \"name\": \"Dynamic Attributes\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19767,165 +20562,153 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"An environment variable name\",\n-                                \"value\": \"An environment variable value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub Lite message\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Attribute name\",\n+                                \"value\": \"Value to be set to the attribute\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Argument Delimiter\": {\n-                                \"defaultValue\": \" \",\n-                                \"description\": \"Delimiter to use to separate arguments for a command [default: space]. Must be a single character.\",\n-                                \"displayName\": \"Argument Delimiter\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Argument Delimiter\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Duration\": {\n-                                \"description\": \"If the process is expected to be long-running and produce textual output, a batch duration can be specified so that the output will be captured for this amount of time and a FlowFile will then be sent out with the results and a new FlowFile will be started, rather than waiting for the process to finish before sending out the results\",\n-                                \"displayName\": \"Batch Duration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Duration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Command\": {\n-                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n-                                \"displayName\": \"Command\",\n+                            \"gcp-batch-bytes\": {\n+                                \"defaultValue\": \"3 MB\",\n+                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n+                                \"displayName\": \"Batch Bytes Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Command\",\n+                                \"name\": \"gcp-batch-bytes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Command Arguments\": {\n-                                \"description\": \"The arguments to supply to the executable delimited by white space. White space can be escaped by enclosing it in double-quotes.\",\n-                                \"displayName\": \"Command Arguments\",\n+                            \"gcp-ordering-key\": {\n+                                \"description\": \"Messages with the same ordering key will always get published to the same partition. When this property is not set, messages can get published to different partitions if more than one partition exists for the topic.\",\n+                                \"displayName\": \"Ordering Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Command Arguments\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcp-ordering-key\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output MIME type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Batch Duration' is set.\",\n-                                \"displayName\": \"Output MIME Type\",\n+                            \"gcp-pubsub-publish-batch-delay\": {\n+                                \"defaultValue\": \"100 millis\",\n+                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n+                                \"displayName\": \"Batch Delay Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output MIME type\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redirect Error Stream\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n-                                \"displayName\": \"Redirect Error Stream\",\n+                            \"gcp-pubsub-publish-batch-size\": {\n+                                \"defaultValue\": \"15\",\n+                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n+                                \"displayName\": \"Batch Size Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Redirect Error Stream\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Working Directory\": {\n-                                \"description\": \"The directory to use as the current working directory when executing the command\",\n-                                \"displayName\": \"Working Directory\",\n+                            \"gcp-pubsub-topic\": {\n+                                \"description\": \"Name of the Google Cloud PubSub Topic. Example: projects/8476107443/locations/europe-west1-d/topics/my-lite-topic\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Working Directory\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All created FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"command\",\n-                            \"external\",\n-                            \"invoke\",\n-                            \"process\",\n-                            \"script\",\n-                            \"source\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteProcess\",\n-                        \"typeDescription\": \"Runs an operating system command specified by the user and writes the output of that command to a FlowFile. If the command is expected to be long-running, the Processor can output the partial data on a specified interval. When this option is used, the output is expected to be in textual format, as it typically does not make sense to split binary data on arbitrary time-based intervals.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\",\n+                        \"typeDescription\": \"Publishes the content of the incoming FlowFile to the configured Google Cloud PubSub Lite topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Executed command\",\n-                                \"name\": \"command\"\n-                            },\n-                            {\n-                                \"description\": \"Arguments of the command\",\n-                                \"name\": \"command.arguments\"\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n                             },\n                             {\n-                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Batch Duration' is not set\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19933,692 +20716,859 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.format\",\n-                                \"value\": \"SQL format argument to be supplied\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SQL select query\": {\n-                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n-                                \"displayName\": \"SQL select query\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"gcs-generation\": {\n+                                \"description\": \"The generation of the object to be deleted. If null, will use latest version of the object.\",\n+                                \"displayName\": \"Generation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"name\": \"gcs-generation\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-normalize\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-normalize\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-api-url\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"dbf-user-logical-types\": {\n-                                \"allowableValues\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"delete\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                        \"typeDescription\": \"Deletes objects from a Google Cloud Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the GCS bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GCS_SOURCE_BUCKET}`.\\nConfigure the \\\"Project ID\\\" property to reflect the ID of your Google Compute Cloud Project.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGCSObject.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${gcs.bucket}\\\"\\n\\\"Name\\\" = \\\"${filename}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n+                                \"description\": \"Retrieve all files in a Google Compute Storage (GCS) bucket\",\n+                                \"keywords\": [\n+                                    \"gcp\",\n+                                    \"gcs\",\n+                                    \"google cloud\",\n+                                    \"google compute storage\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n-                                \"displayName\": \"Set Auto Commit\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esql-auto-commit\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-fetch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n+                            \"gcs-generation\": {\n+                                \"description\": \"The generation of the Object to download. If not set, the latest generation will be downloaded.\",\n+                                \"displayName\": \"Object Generation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n-                                \"required\": true,\n+                                \"name\": \"gcs-generation\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n+                                \"name\": \"gcs-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sql-post-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Post-Query\",\n+                            \"gcs-object-range-length\": {\n+                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n+                                \"displayName\": \"Range Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n+                                \"name\": \"gcs-object-range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sql-pre-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Pre-Query\",\n+                            \"gcs-object-range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n+                                \"displayName\": \"Range Start\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n+                                \"name\": \"gcs-object-range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"name\": \"sql.args.N.type\"\n                             },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n+                            \"gcs-server-side-encryption-key\": {\n+                                \"description\": \"An AES256 Key (encoded in base64) which the object has been encrypted in.\",\n+                                \"displayName\": \"Server Side Encryption Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-server-side-encryption-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-api-url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"fetch\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to Avro format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                        \"typeDescription\": \"Fetches a file from a Google Cloud Bucket. Designed to be used in tandem with ListGCSBucket.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the number of rows returned by the query. If 'Max Rows Per Flow File' is set, then this number will reflect the number of rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.row.count\"\n+                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.query.duration\"\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n                             },\n                             {\n-                                \"description\": \"Duration of the query execution time in milliseconds. This number will reflect the query execution time regardless of the 'Max Rows Per Flow File' setting.\",\n-                                \"name\": \"executesql.query.executiontime\"\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n                             },\n                             {\n-                                \"description\": \"Duration of the result set fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n-                                \"name\": \"executesql.query.fetchtime\"\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n                             },\n                             {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n                             },\n                             {\n-                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n-                                \"name\": \"input.flowfile.uuid\"\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n+                            },\n+                            {\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.format\",\n-                                \"value\": \"SQL format argument to be supplied\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"window\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n+                                        \"propertyName\": \"et-initial-listing-target\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SQL select query\": {\n-                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n-                                \"displayName\": \"SQL select query\",\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"gcs-bucket\": {\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n+                            \"gcs-prefix\": {\n+                                \"description\": \"The prefix used to filter the object list. In most cases, it should end with a forward slash ('/').\",\n+                                \"displayName\": \"Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcs-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-use-generations\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n+                                \"description\": \"Specifies whether to use GCS Generations, if applicable.  If false, only the latest version of each object will be returned.\",\n+                                \"displayName\": \"Use Generations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n+                                \"name\": \"gcs-use-generations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists all entities without any tracking. The same entities will be listed each time this processor is scheduled. It is recommended to change the default run schedule value. Any property that relates to the persisting state will be ignored.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n-                                \"displayName\": \"Set Auto Commit\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esql-auto-commit\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"esql-fetch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"esql-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"esql-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esqlrecord-normalize\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names. For example, colons and periods will be changed to underscores.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esqlrecord-normalize\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"esqlrecord-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esqlrecord-record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"sql-post-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Post-Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sql-pre-query\": {\n-                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n-                                \"displayName\": \"SQL Pre-Query\",\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"list\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\",\n-                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to the format specified by a Record Writer. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n+                        \"typeDescription\": \"Retrieves a listing of objects from a GCS bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchGCSObject. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the number of rows returned in the select query\",\n-                                \"name\": \"executesql.row.count\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.duration\"\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n                             },\n                             {\n-                                \"description\": \"Duration of the query execution time in milliseconds\",\n-                                \"name\": \"executesql.query.executiontime\"\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n                             },\n                             {\n-                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.fetchtime\"\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n                             },\n                             {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n                             },\n                             {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n                             },\n                             {\n-                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n-                                \"name\": \"input.flowfile.uuid\"\n+                                \"description\": \"The MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n                             },\n                             {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -20628,237 +21578,451 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"An environment variable name\",\n-                                \"value\": \"An environment variable value\"\n-                            },\n-                            {\n-                                \"description\": \"These arguments are supplied to the process spawned by this Processor when using the Command Arguments Strategy : Dynamic Property Arguments. <commandIndex> is a number and it will determine the order.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"command.argument.<commandIndex>\",\n-                                \"value\": \"Argument to be supplied to the command\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"Allows user-defined metadata to be added to the GCS object as key/value pairs\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a User-Defined Metadata field to add to the GCS Object\",\n+                                \"value\": \"The value of a User-Defined Metadata field to add to the GCS Object\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Argument Delimiter\": {\n-                                \"defaultValue\": \";\",\n+                            \"File Resource Service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n+                                            \"FILE_RESOURCE_SERVICE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n                                     }\n                                 ],\n-                                \"description\": \"Delimiter to use to separate arguments for a command [default: ;]. Must be a single character\",\n-                                \"displayName\": \"Argument Delimiter\",\n+                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n+                                \"displayName\": \"File Resource Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Argument Delimiter\",\n+                                \"name\": \"File Resource Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Command Arguments\": {\n-                                \"dependencies\": [\n+                            \"GCP Credentials Provider Service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Resource Transfer Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\n+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n                                     }\n                                 ],\n-                                \"description\": \"The arguments to supply to the executable delimited by the ';' character.\",\n-                                \"displayName\": \"Command Arguments\",\n+                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Command Arguments\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Resource Transfer Source\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Command Path\": {\n-                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n-                                \"displayName\": \"Command Path\",\n+                            \"gcp-retry-count\": {\n+                                \"defaultValue\": \"6\",\n+                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n+                                \"displayName\": \"Number of retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Command Path\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore STDIN\": {\n+                            \"gcs-content-disposition-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Indicates that the object should be loaded and rendered within the browser.\",\n+                                        \"displayName\": \"Inline\",\n+                                        \"value\": \"inline\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Indicates that the object should be saved (using a Save As... dialog) rather than opened directly within the browser\",\n+                                        \"displayName\": \"Attachment\",\n+                                        \"value\": \"attachment\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the contents of the incoming flowfile will not be passed to the executing command\",\n-                                \"displayName\": \"Ignore STDIN\",\n+                                \"description\": \"Type of RFC-6266 Content Disposition to be attached to the object\",\n+                                \"displayName\": \"Content Disposition Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore STDIN\",\n+                                \"name\": \"gcs-content-disposition-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Attribute Length\": {\n-                                \"defaultValue\": \"256\",\n-                                \"description\": \"If routing the output of the stream command to an attribute, the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will truncated to fit. Consider making this smaller if able.\",\n-                                \"displayName\": \"Max Attribute Length\",\n+                            \"gcs-content-type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n+                                \"description\": \"Content Type for the file, i.e. text/plain\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Attribute Length\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-content-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Destination Attribute\": {\n-                                \"description\": \"If set, the output of the stream command will be put into an attribute of the original FlowFile instead of a separate FlowFile. There will no longer be a relationship for 'output stream' or 'nonzero status'. The value of this property will be the key for the output attribute.\",\n-                                \"displayName\": \"Output Destination Attribute\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Destination Attribute\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-key\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output MIME Type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Output Destination Attribute' is set.\",\n-                                \"displayName\": \"Output MIME Type\",\n+                            \"gcs-object-acl\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER and WRITER permissions. All other permissions are removed.\",\n+                                        \"displayName\": \"All Authenticated Users\",\n+                                        \"value\": \"ALL_AUTHENTICATED_USERS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Authenticated Read\",\n+                                        \"value\": \"AUTHENTICATED_READ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the object and bucket owners OWNER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Bucket Owner Full Control\",\n+                                        \"value\": \"BUCKET_OWNER_FULL_CONTROL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the object owner OWNER permission, and gives the bucket owner READER permission. All other permissions are removed.\",\n+                                        \"displayName\": \"Bucket Owner Read Only\",\n+                                        \"value\": \"BUCKET_OWNER_READ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission for a bucket or object, and removes all other access permissions.\",\n+                                        \"displayName\": \"Private\",\n+                                        \"value\": \"PRIVATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives permission to the project team based on their roles. Anyone who is part of the team has READER permission. Project owners and project editors have OWNER permission. This is the default ACL for newly created buckets. This is also the default ACL for newly created objects unless the default object ACL for that bucket has been changed.\",\n+                                        \"displayName\": \"Project Private\",\n+                                        \"value\": \"PROJECT_PRIVATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all users, both authenticated and anonymous, READER permission. When you apply this to an object, anyone on the Internet can read the object without authenticating.\",\n+                                        \"displayName\": \"Public Read Only\",\n+                                        \"value\": \"PUBLIC_READ\"\n+                                    }\n+                                ],\n+                                \"description\": \"Access Control to be attached to the object uploaded. Not providing this will revert to bucket defaults.\",\n+                                \"displayName\": \"Object ACL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output MIME Type\",\n+                                \"name\": \"gcs-object-acl\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Working Directory\": {\n-                                \"description\": \"The directory to use as the current working directory when executing the command\",\n-                                \"displayName\": \"Working Directory\",\n+                            \"gcs-object-crc32c\": {\n+                                \"description\": \"CRC32C Checksum (encoded in Base64, big-Endian order) of the file for server-side validation.\",\n+                                \"displayName\": \"CRC32C Checksum\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Working Directory\",\n+                                \"name\": \"gcs-object-crc32c\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"argumentsStrategy\": {\n+                            \"gcs-overwrite-object\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Arguments to be supplied to the executable are taken from the Command Arguments property\",\n-                                        \"displayName\": \"Command Arguments Property\",\n-                                        \"value\": \"Command Arguments Property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Arguments to be supplied to the executable are taken from dynamic properties with pattern of 'command.argument.<commandIndex>'\",\n-                                        \"displayName\": \"Dynamic Property Arguments\",\n-                                        \"value\": \"Dynamic Property Arguments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Command Arguments Property\",\n-                                \"description\": \"Strategy for configuring arguments to be supplied to the command.\",\n-                                \"displayName\": \"Command Arguments Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n+                                \"displayName\": \"Overwrite Object\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"argumentsStrategy\",\n+                                \"name\": \"gcs-overwrite-object\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-server-side-encryption-key\": {\n+                                \"description\": \"An AES256 Encryption Key (encoded in base64) for server-side encryption of the object.\",\n+                                \"displayName\": \"Server Side Encryption Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-server-side-encryption-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"gzip.content.enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n+                                \"displayName\": \"GZIP Compression Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gzip.content.enabled\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-api-url\": {\n+                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n+                                \"displayName\": \"Storage API URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is zero.\",\n-                                \"name\": \"output stream\"\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is non-zero. All flow files routed to this relationship will be penalized.\",\n-                                \"name\": \"nonzero status\"\n+                                \"description\": \"Uses the FlowFile's MIME type as the content-type for the GCS object\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n+                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile will be routed. It will have new attributes detailing the result of the script execution.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"command\",\n-                            \"command execution\",\n-                            \"execute\",\n-                            \"stream\"\n+                            \"archive\",\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExecuteStreamCommand\",\n-                        \"typeDescription\": \"The ExecuteStreamCommand processor provides a flexible way to integrate external commands and scripts into NiFi data flows. ExecuteStreamCommand can pass the incoming FlowFile's content to the command that it executes similarly how piping works.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.storage.PutGCSObject\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as an object in a Google Cloud Storage.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the command executed\",\n-                                \"name\": \"execution.command\"\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n                             },\n                             {\n-                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n-                                \"name\": \"execution.command.args\"\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n                             },\n                             {\n-                                \"description\": \"The exit status code returned from executing the command\",\n-                                \"name\": \"execution.status\"\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n                             },\n                             {\n-                                \"description\": \"Any error messages returned from executing the command\",\n-                                \"name\": \"execution.error\"\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n                             },\n                             {\n-                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Output Destination Attribute' is not set\",\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.count\"\n+                            },\n+                            {\n+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\n+                            },\n+                            {\n+                                \"description\": \"The content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"The content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME/Content-Type of the object\",\n                                 \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n+                            },\n+                            {\n+                                \"description\": \"The creation time of the object (milliseconds)\",\n+                                \"name\": \"gcs.create.time\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the object (milliseconds)\",\n+                                \"name\": \"gcs.update.time\"\n+                            },\n+                            {\n+                                \"description\": \"The algorithm used to encrypt the object.\",\n+                                \"name\": \"gcs.encryption.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n+                                \"name\": \"gcs.encryption.sha256\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n+                                \"name\": \"gcs.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The service-generated for the object\",\n+                                \"name\": \"gcs.generated.id\"\n+                            },\n+                            {\n+                                \"description\": \"The data generation of the object.\",\n+                                \"name\": \"gcs.generation\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n+                                \"name\": \"gcs.md5\"\n+                            },\n+                            {\n+                                \"description\": \"The media download link to the object.\",\n+                                \"name\": \"gcs.media.link\"\n+                            },\n+                            {\n+                                \"description\": \"The metageneration of the object.\",\n+                                \"name\": \"gcs.metageneration\"\n+                            },\n+                            {\n+                                \"description\": \"The owner (uploader) of the object.\",\n+                                \"name\": \"gcs.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The ACL entity type of the uploader of the object.\",\n+                                \"name\": \"gcs.owner.type\"\n+                            },\n+                            {\n+                                \"description\": \"The URI of the object as a string.\",\n+                                \"name\": \"gcs.uri\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -20866,190 +22030,199 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Patterns can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if Grok output value is written as a new flowfile attributes, in this case each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n-                                \"displayName\": \"Destination\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Grok Expression\": {\n-                                \"description\": \"Grok expression. If other Grok expressions are referenced in this expression, they must be provided in the Grok Pattern File if set or exist in the default Grok patterns\",\n-                                \"displayName\": \"Grok Expression\",\n+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"operationKey\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n+                                \"name\": \"operationKey\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             },\n-                            \"Grok Pattern file\": {\n-                                \"description\": \"Custom Grok pattern definitions. These definitions will be loaded after the default Grok patterns. The Grok Parser will use the default Grok patterns when this property is not configured.\",\n-                                \"displayName\": \"Grok Patterns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Pattern file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Keep Empty Captures\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then empty capture values will be included in the returned capture map.\",\n-                                \"displayName\": \"Keep Empty Captures\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Empty Captures\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the Grok expressions. Files larger than the specified maximum will not be fully evaluated.\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Named captures only\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Only store named captures from grok\",\n-                                \"displayName\": \"Named captures only\",\n+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Named captures only\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"operationKey\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n+                                \"name\": \"operationKey\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when no provided Grok Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the Grok Expression is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delimit\",\n-                            \"extract\",\n-                            \"grok\",\n-                            \"log\",\n-                            \"parse\",\n-                            \"text\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractGrok\",\n-                        \"typeDescription\": \"Evaluates one or more Grok Expressions against the content of a FlowFile, adding the results as attributes or replacing the content of the FlowFile with a JSON notation of the matched content\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n-                                \"name\": \"grok.XXX\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -21058,97 +22231,111 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specifies the number of schemas to cache. This value should reflect the expected number of different schemas that may be in the incoming FlowFiles. This ensures more efficient retrieval of the schemas and thus the processor performance.\",\n-                                \"displayName\": \"Schema Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"json-payload\": {\n+                                \"defaultValue\": \"{\\n    \\\"requests\\\": [\\n        {\\n            \\\"inputConfig\\\": {\\n                \\\"gcsSource\\\": {\\n                    \\\"uri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n                },\\n                \\\"mimeType\\\": \\\"application/pdf\\\"\\n            },\\n            \\\"features\\\": [{\\n                    \\\"type\\\": \\\"${vision-feature-type}\\\",\\n                    \\\"maxResults\\\": 4\\n                }],\\n            \\\"outputConfig\\\": {\\n                \\\"gcsDestination\\\": {\\n                    \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n                },\\n                \\\"batchSize\\\": 2\\n            }\\n        }]\\n}\",\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"output-bucket\": {\n+                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n+                                \"displayName\": \"Output Bucket\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"output-bucket\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"vision-feature-type\": {\n+                                \"defaultValue\": \"TEXT_DETECTION\",\n+                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n+                                \"displayName\": \"Vision Feature Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"vision-feature-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile's record schema cannot be extracted from the configured input format, the FlowFile will be routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\",\n-                            \"xml\"\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractRecordSchema\",\n-                        \"typeDescription\": \"Extracts the record schema from the FlowFile using the supplied Record Reader and writes it to the `avro.schema` attribute.\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on file input. It should be followed by GetGcpVisionAnnotateFilesOperationStatus processor in order to monitor operation status.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n-                                \"name\": \"record.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides the schema extracted from the input FlowFile using the provided RecordReader.\",\n-                                \"name\": \"avro.schema\"\n+                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n+                                \"name\": \"operationKey\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -21156,374 +22343,427 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute\",\n-                                \"value\": \"A Regular Expression with one or more capturing group\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"json-payload\": {\n+                                \"defaultValue\": \"{\\n    \\\"requests\\\": [{\\n        \\\"image\\\": {\\n            \\\"source\\\": {\\n                \\\"imageUri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n            }\\n        },\\n        \\\"features\\\": [{\\n            \\\"type\\\": \\\"${vision-feature-type}\\\",\\n            \\\"maxResults\\\": 4\\n        }]\\n    }],\\n    \\\"outputConfig\\\": {\\n        \\\"gcsDestination\\\": {\\n            \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n        },\\n        \\\"batchSize\\\": 2\\n    }\\n}\",\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Canonical Equivalence\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n-                                \"displayName\": \"Enable Canonical Equivalence\",\n+                            \"output-bucket\": {\n+                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n+                                \"displayName\": \"Output Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Canonical Equivalence\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"output-bucket\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Case-insensitive Matching\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n-                                \"displayName\": \"Enable Case-insensitive Matching\",\n+                            \"vision-feature-type\": {\n+                                \"defaultValue\": \"TEXT_DETECTION\",\n+                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n+                                \"displayName\": \"Vision Feature Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Case-insensitive Matching\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"vision-feature-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Cloud\",\n+                            \"Google\",\n+                            \"Machine Learning\",\n+                            \"Vision\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on image input. It should be followed by GetGcpVisionAnnotateImagesOperationStatus processor in order to monitor operation status.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n+                                \"name\": \"operationKey\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access keytab\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Keytab\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Enable DOTALL Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that the expression '.' should match any character, including a line terminator.  Can also be specified via the embedded flag (?s).\",\n-                                \"displayName\": \"Enable DOTALL Mode\",\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Principal\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.kerberos.KeytabCredentialsService\",\n+                        \"typeDescription\": \"Provides a mechanism for specifying a Keytab and a Principal that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-smbj-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-smbj-client-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable DOTALL Mode\",\n-                                \"required\": true,\n+                                \"name\": \"domain\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Literal Parsing of the Pattern\": {\n+                            \"enable-dfs\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n-                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\n+                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n+                                \"displayName\": \"Enable DFS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Literal Parsing of the Pattern\",\n+                                \"name\": \"enable-dfs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Multiline Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that '^' and '$' should match just after and just before a line terminator or end of sequence, instead of only the beginning or end of the entire input.  Can also be specified via the embeded flag (?m).\",\n-                                \"displayName\": \"Enable Multiline Mode\",\n+                            \"hostname\": {\n+                                \"description\": \"The network host of the SMB file server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Multiline Mode\",\n+                                \"name\": \"hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unicode Predefined Character Classes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies conformance with the Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.  Can also be specified via the embedded flag (?U).\",\n-                                \"displayName\": \"Enable Unicode Predefined Character Classes\",\n+                            \"password\": {\n+                                \"description\": \"The password used for authentication.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode Predefined Character Classes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Enable Unicode-aware Case Folding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n-                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n+                            \"port\": {\n+                                \"defaultValue\": \"445\",\n+                                \"description\": \"Port to use for connection.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode-aware Case Folding\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unix Lines Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that only the '\\n' line terminator is recognized in the behavior of '.', '^', and '$'.  Can also be specified via the embedded flag (?d).\",\n-                                \"displayName\": \"Enable Unix Lines Mode\",\n+                            \"share\": {\n+                                \"description\": \"The network share to which files should be listed from. This is the \\\"first folder\\\"after the hostname: smb://hostname:port/[share]/dir1/dir2\",\n+                                \"displayName\": \"Share\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unix Lines Mode\",\n+                                \"name\": \"share\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable named group support\": {\n+                            \"smb-dialect\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, when named groups are present in the regular expression, the name of the\\ngroup will be used in the attribute name as opposed to the group index.  All capturing groups\\nmust be named, if the number of groups (not including capture group 0) does not equal the\\nnumber of named groups validation will fail.\",\n-                                \"displayName\": \"Enable named group support\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable named group support\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable repeating capture group\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, every string matching the capture groups will be extracted. Otherwise, if the Regular Expression matches more than once, only the first match will be extracted.\",\n-                                \"displayName\": \"Enable repeating capture group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable repeating capture group\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Capture Group 0\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates that Capture Group 0 should be included as an attribute. Capture Group 0 represents the entirety of the regular expression match, is typically not used, and could have considerable length.\",\n-                                \"displayName\": \"Include Capture Group 0\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Capture Group 0\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per FlowFile) in order to apply the regular expressions. FlowFiles larger than the specified maximum will not be fully evaluated.\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Capture Group Length\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Specifies the maximum number of characters a given capture group value can have. Any characters beyond the max will be truncated.\",\n-                                \"displayName\": \"Maximum Capture Group Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Capture Group Length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Permit Whitespace and Comments in Pattern\": {\n+                            \"use-encryption\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"In this mode, whitespace is ignored, and embedded comments starting with # are ignored until the end of a line.  Can also be specified via the embedded flag (?x).\",\n-                                \"displayName\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"name\": \"use-encryption\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"username\": {\n+                                \"defaultValue\": \"Guest\",\n+                                \"description\": \"The username used for authentication.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the Regular Expression is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"artifact\": \"nifi-smb-client-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Regular Expression\",\n-                            \"Text\",\n-                            \"evaluate\",\n-                            \"extract\",\n-                            \"regex\"\n+                            \"samba, smb, cifs, files\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ExtractText\",\n-                        \"typeDescription\": \"Evaluates one or more Regular Expressions against the content of a FlowFile.  The results of those Regular Expressions are assigned to FlowFile Attributes.  Regular Expressions are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed.  The attributes are generated differently based on the enabling of named capture groups.  If named capture groups are not enabled:  The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided, with the exception of a capturing group that is optional and does not match - for example, given the attribute name \\\"regex\\\" and expression \\\"abc(def)?(g)\\\" we would add an attribute \\\"regex.1\\\" with a value of \\\"def\\\" if the \\\"def\\\" matched. If the \\\"def\\\" did not match, no attribute named \\\"regex.1\\\" would be added but an attribute named \\\"regex.2\\\" with a value of \\\"g\\\" will be added regardless.If named capture groups are enabled:  Each named capture group, if found will be placed into the attributes name with the name provided.  If enabled the matching string sequence itself will be placed into the attribute name.  If multiple matches are enabled, and index will be applied after the first set of matches. The exception is a capturing group that is optional and does not match  For example, given the attribute name \\\"regex\\\" and expression \\\"abc(?<NAMED>def)?(?<NAMED-TWO>g)\\\"  we would add an attribute \\\"regex.NAMED\\\" with the value of \\\"def\\\" if the \\\"def\\\" matched.  We would   add an attribute \\\"regex.NAMED-TWO\\\" with the value of \\\"g\\\" if the \\\"g\\\" matched regardless.  The value of the property must be a valid Regular Expressions with one or more capturing groups. If named capture groups are enabled, all capture groups must be named.  If they are not, then the  processor configuration will fail validation.  If the Regular Expression matches more than once, only the first match will be used unless the property enabling repeating capture group is set to true. If any provided Regular Expression matches, the FlowFile(s) will be routed to 'matched'. If no provided Regular Expression matches, the FlowFile will be routed to 'unmatched' and no attributes will be applied to the FlowFile.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.services.smb.SmbjClientProviderService\",\n+                        \"typeDescription\": \"Provides access to SMB Sessions with shared authentication credentials.\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -21532,625 +22772,507 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Entry Identifier\": {\n-                                \"defaultValue\": \"${hash.value}\",\n-                                \"description\": \"A comma-delimited list of FlowFile attributes, or the results of Attribute Expression Language statements, which will be evaluated against a FlowFile in order to determine the value(s) used to identify duplicates; it is these values that are cached. NOTE: Only a single Cache Entry Identifier is allowed unless Put Cache Value In Attribute is specified. Multiple cache lookups are only supported when the destination is a set of attributes (see the documentation for 'Put Cache Value In Attribute' for more details including naming convention.\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n+                            \"Commit Offsets\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether this Processor should commit the offsets to Kafka after receiving messages. Typically, this value should be set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafka in order to provide Exactly Once semantics.\",\n+                                \"displayName\": \"Commit Offsets\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Commit Offsets\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the cached value is encoded. This will only be used when routing to an attribute.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Group ID\": {\n+                                \"description\": \"Kafka Consumer Group Identifier corresponding to Kafka group.id property\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": false,\n+                                \"name\": \"Group ID\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Header Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character encoding applied when reading Kafka Record Header values and writing FlowFile attributes\",\n+                                \"displayName\": \"Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n+                                \"name\": \"Header Encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Max Length To Put In Attribute\": {\n-                                \"defaultValue\": \"256\",\n-                                \"description\": \"If routing the cache value to an attribute of the FlowFile (by setting the \\\"Put Cache Value in attribute\\\" property), the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will be truncated to fit. Consider making this smaller if able.\",\n-                                \"displayName\": \"Max Length To Put In Attribute\",\n+                            \"Header Name Pattern\": {\n+                                \"description\": \"Regular Expression Pattern applied to Kafka Record Header Names for selecting Header Values to be written as FlowFile attributes\",\n+                                \"displayName\": \"Header Name Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Length To Put In Attribute\",\n+                                \"name\": \"Header Name Pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Put Cache Value In Attribute\": {\n-                                \"description\": \"If set, the cache value received will be put into an attribute of the FlowFile instead of a the content of theFlowFile. The attribute key to put to is determined by evaluating value of this property. If multiple Cache Entry Identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier.\",\n-                                \"displayName\": \"Put Cache Value In Attribute\",\n+                            \"Kafka Connection Service\": {\n+                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n+                                \"displayName\": \"Kafka Connection Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Put Cache Value In Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.PutDistributedMapCache\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If the cache was successfully communicated with it will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If unable to communicate with the cache or if the cache entry is evaluated to be blank, the FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kafka Connection Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n-                                \"name\": \"not-found\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"fetch\",\n-                            \"map\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchDistributedMapCache\",\n-                        \"typeDescription\": \"Computes cache key(s) from FlowFile attributes, for each incoming FlowFile, and fetches the value(s) from the Distributed Map Cache associated with each key. If configured without a destination attribute, the incoming FlowFile's content is replaced with the binary data received by the Distributed Map Cache. If there is no value stored under that key then the flow file will be routed to 'not-found'. Note that the processor will always attempt to read the entire cached value into memory before placing it in it's destination. This could be potentially problematic if the cached value is very large.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the 'Put Cache Value In Attribute' property is set then whatever it is set to will become the attribute key and the value would be whatever the response was from the Distributed Map Cache. If multiple cache entry identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier. For example, if the Cache Entry Identifier property is set to 'id,name', and the user-defined property is named 'fetched', then two attributes will be written, fetched.id and fetched.name, containing their respective values.\",\n-                                \"name\": \"user-defined\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{FTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{FTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchFTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFTP\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${ftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${ftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{FTP_PASSWORD}\\\"\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFTP\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve all files in a directory of an FTP Server\",\n-                                \"keywords\": [\n-                                    \"ftp\",\n-                                    \"file\",\n-                                    \"transform\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n+                            \"Key Attribute Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n                                     },\n                                     {\n-                                        \"description\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n+                                \"defaultValue\": \"utf-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"Output Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Encoding for value of configured FlowFile attribute containing Kafka Record Key.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"name\": \"Key Attribute Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Mode\": {\n+                            \"Key Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n+                                        \"displayName\": \"Byte Array\",\n+                                        \"value\": \"byte-array\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"record\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n+                                \"defaultValue\": \"byte-array\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"Output Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how to represent the Kafka Record Key in the output FlowFile\",\n+                                \"displayName\": \"Key Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n+                                \"name\": \"Key Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Key Record Reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"record\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Key Format\",\n+                                        \"propertyName\": \"Key Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for parsing the Kafka Record Key into a Record\",\n+                                \"displayName\": \"Key Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Key Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Max Uncommitted Time\": {\n+                                \"defaultValue\": \"1 s\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed. Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits. This value is also related to maximum poll records and the use of a message demarcator. When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": false,\n+                                \"name\": \"Max Uncommitted Time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Message Demarcator\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"DEMARCATOR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, this Processor has an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Message Demarcator\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                            \"Output Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RECORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The format used to output the Kafka Record into a FlowFile Record.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Output Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n+                            \"Processing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"Write one FlowFile for each Kafka Record consumed\",\n+                                        \"displayName\": \"FLOW_FILE\",\n+                                        \"value\": \"FLOW_FILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Write one FlowFile for each batch of Kafka Records consumed (optionally grouped by Kafka key)\",\n+                                        \"displayName\": \"DEMARCATOR\",\n+                                        \"value\": \"DEMARCATOR\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"Write one FlowFile containing multiple Kafka Records consumed and processed with Record Reader and Record Writer\",\n+                                        \"displayName\": \"RECORD\",\n+                                        \"value\": \"RECORD\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"FLOW_FILE\",\n+                                \"description\": \"Strategy for processing Kafka Records and writing serialized output to FlowFiles\",\n+                                \"displayName\": \"Processing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"Processing Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote File\": {\n-                                \"description\": \"The fully qualified filename on the remote system\",\n-                                \"displayName\": \"Remote File\",\n+                            \"Record Reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RECORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for incoming Kafka messages\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n+                            \"Record Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"dependentValues\": [\n+                                            \"RECORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                                \"description\": \"The Record Writer to use in order to serialize the outgoing FlowFiles\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Record Writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Use Compression\": {\n+                            \"Separate By Key\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Message Demarcator\",\n+                                        \"propertyName\": \"Message Demarcator\"\n+                                    }\n+                                ],\n+                                \"description\": \"When this property is enabled, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Separate By Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n+                            \"Topic Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Topic is a regular expression according to the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topics provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"name\": \"Topic Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"Topics\": {\n+                                \"description\": \"The name or pattern of the Kafka Topics from which the Processor consumes Kafka Records. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topics\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Topics\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset found for the consumer group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Automatic offset configuration applied when no previous consumer offset found corresponding to Kafka auto.offset.reset property\",\n+                                \"displayName\": \"Auto Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                            \"org.apache.nifi.kafka.processors.PublishKafka\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"FlowFiles containing one or more serialized Kafka Records\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchFTP\",\n-                        \"typeDescription\": \"Fetches the content of a file from a remote FTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n+                        \"type\": \"org.apache.nifi.kafka.processors.ConsumeKafka\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka Consumer API. The complementary NiFi processor for sending messages is PublishKafka. The Processor supports consumption of Kafka messages, optionally interpreted as NiFi records. Please note that, at this time (in read record mode), the Processor assumes that all records that are retrieved from a given partition have the same schema. For this mode, if any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"ftp.remote.host\"\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n-                                \"name\": \"ftp.remote.port\"\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"ftp.remote.filename\"\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n                             },\n                             {\n-                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n                             },\n                             {\n-                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n-                                \"name\": \"fetch.failure.reason\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n+                            },\n+                            {\n+                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n+                                \"name\": \"kafka.tombstone\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -22158,883 +23280,525 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n-                                    }\n-                                ],\n-                                \"description\": \"Ingest all files from a directory into NiFi\",\n-                                \"keywords\": [\n-                                    \"local\",\n-                                    \"files\",\n-                                    \"filesystem\",\n-                                    \"ingest\",\n-                                    \"ingress\",\n-                                    \"get\",\n-                                    \"source\",\n-                                    \"input\",\n-                                    \"fetch\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nSet the \\\"File Filter\\\" property to a Regular Expression that matches the filename (without path) of the files that you want to ingest. For example, to ingest all .jpg files, set the value to `.*\\\\.jpg`\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n-                                    }\n-                                ],\n-                                \"description\": \"Ingest specific files from a directory into NiFi, filtering on filename\",\n-                                \"keywords\": [\n-                                    \"local\",\n-                                    \"files\",\n-                                    \"filesystem\",\n-                                    \"ingest\",\n-                                    \"ingress\",\n-                                    \"get\",\n-                                    \"source\",\n-                                    \"input\",\n-                                    \"fetch\",\n-                                    \"filter\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n+                            \"Failure Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Moves the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n                                     },\n                                     {\n-                                        \"description\": \"Deletes the original file from the file system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the file system once it has been pulled into NiFi\",\n-                                \"displayName\": \"Completion Strategy\",\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File to Fetch\": {\n-                                \"defaultValue\": \"${absolute.path}/${filename}\",\n-                                \"description\": \"The fully-qualified filename of the file to fetch from the file system\",\n-                                \"displayName\": \"File to Fetch\",\n+                            \"FlowFile Attribute Header Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the pattern will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"FlowFile Attribute Header Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"File to Fetch\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Attribute Header Pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log level when file not found\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n+                            \"Header Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"propertyDisplayName\": \"FlowFile Attribute Header Pattern\",\n+                                        \"propertyName\": \"FlowFile Attribute Header Pattern\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                                \"description\": \"For any attribute that is added as a Kafka Record Header, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when file not found\",\n+                                \"name\": \"Header Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log level when permission denied\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case user exceptionfactory does not have sufficient permissions to read the file\",\n-                                \"displayName\": \"Log level when permission denied\",\n+                            \"Kafka Connection Service\": {\n+                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n+                                \"displayName\": \"Kafka Connection Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when permission denied\",\n+                                \"name\": \"Kafka Connection Service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Kafka Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Key to use for the Message. If not specified, the FlowFile attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Kafka Key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Move Conflict Strategy\": {\n+                            \"Kafka Key Attribute Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The existing destination file should remain intact. The newly ingested file should be moved to the destination directory but be renamed to a random filename\",\n-                                        \"displayName\": \"Rename\",\n-                                        \"value\": \"Rename\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"The newly ingested file should replace the existing file in the Destination Directory\",\n-                                        \"displayName\": \"Replace File\",\n-                                        \"value\": \"Replace File\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n                                     },\n                                     {\n-                                        \"description\": \"The existing file should in the Destination Directory should stay intact and the newly ingested file should be deleted\",\n-                                        \"displayName\": \"Keep Existing\",\n-                                        \"value\": \"Keep Existing\"\n-                                    },\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The existing destination file should remain intact and the incoming FlowFile should be routed to failure\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Rename\",\n-                                \"description\": \"If Completion Strategy is set to Move File and a file already exists in the destination directory with the same name, this property specifies how that naming conflict should be resolved\",\n-                                \"displayName\": \"Move Conflict Strategy\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Kafka Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Move Conflict Strategy\",\n+                                \"name\": \"Kafka Key Attribute Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory to the move the original file to once it has been fetched from the file system. This property is ignored unless the Completion Strategy is set to \\\"Move File\\\". If the directory does not exist, it will be created.\",\n-                                \"displayName\": \"Move Destination Directory\",\n+                            \"Message Demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n+                                \"name\": \"Message Demarcator\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFile\",\n-                            \"org.apache.nifi.processors.standard.ListFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully fetched from the file system will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system because the file could not be found will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n                             },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchFile\",\n-                        \"typeDescription\": \"Reads the contents of a file from disk and streams it into the contents of an incoming FlowFile. Once this is done, the file is optionally moved elsewhere or deleted to help keep the file system organized.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{SFTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{SFTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchSFTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListSFTP\"\n-                                    },\n+                            \"Message Key Field\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${sftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${sftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{SFTP_PASSWORD}\\\"\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchSFTP\"\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Retrieve all files in a directory of an SFTP Server\",\n-                                \"keywords\": [\n-                                    \"sftp\",\n-                                    \"secure\",\n-                                    \"file\",\n-                                    \"transform\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Key Field\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Completion Strategy\": {\n+                            \"Publish Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\n+                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n+                                        \"displayName\": \"Use Content as Record Value\",\n+                                        \"value\": \"USE_VALUE\"\n                                     },\n                                     {\n-                                        \"description\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n+                                \"displayName\": \"Publish Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Publish Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Record Key Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n+                                \"displayName\": \"Record Key Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n+                                \"name\": \"Record Key Writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Disable Directory Listing\": {\n+                            \"Record Metadata Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n+                                        \"displayName\": \"Metadata From Record\",\n+                                        \"value\": \"FROM_RECORD\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n+                                        \"displayName\": \"Use Configured Values\",\n+                                        \"value\": \"FROM_PROPERTIES\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Control how 'Move Destination Directory' is created when 'Completion Strategy' is 'Move File' and 'Create Directory' is enabled. If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n-                                \"displayName\": \"Disable Directory Listing\",\n+                                \"defaultValue\": \"FROM_PROPERTIES\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n+                                \"displayName\": \"Record Metadata Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"required\": false,\n+                                \"name\": \"Record Metadata Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n+                            \"Topic Name\": {\n+                                \"description\": \"Name of the Kafka Topic to which the Processor publishes Kafka Records\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Topic Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n+                            \"Transactional ID Prefix\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transactions Enabled\",\n+                                        \"propertyName\": \"Transactions Enabled\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"description\": \"Specifies the KafkaProducer config transactional.id will be a generated UUID and will be prefixed with the configured string.\",\n+                                \"displayName\": \"Transactional ID Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Transactional ID Prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote File\": {\n-                                \"description\": \"The fully qualified filename on the remote system\",\n-                                \"displayName\": \"Remote File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Send Keep Alive On Timeout\": {\n+                            \"Transactions Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"description\": \"Specifies whether to provide transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the [Delivery Guarantee] property be set to [Guarantee Replicated Delivery.]\",\n+                                \"displayName\": \"Transactions Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"Transactions Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka Client acks property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Specifies the compression strategy for records sent to Kafka. Corresponds to Kafka Client compression.type property.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka Client max.request.size property.\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"partition\": {\n+                                \"description\": \"Specifies the Kafka Partition destination for Records.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n+                            \"partitioner.class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners.RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners.ExpressionLanguagePartitioner\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n-                                \"displayName\": \"Log level when file not found\",\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka Client partitioner.class property.\",\n+                                \"displayName\": \"Partitioner Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"name\": \"partitioner.class\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If this attribute is set to 'true', if the processor is not configured with a demarcator and if the FlowFile's content is null, then a tombstone message with zero bytes will be sent to Kafka.\",\n+                                \"name\": \"kafka.tombstone\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                            \"org.apache.nifi.kafka.processors.ConsumeKafka\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FetchSFTP\",\n-                        \"typeDescription\": \"Fetches the content of a file from a remote SFTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n+                        \"type\": \"org.apache.nifi.kafka.processors.PublishKafka\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as either a message or as individual records to Apache Kafka using the Kafka Producer API. The messages to send may be individual FlowFiles, may be delimited using a user-specified delimiter (such as a new-line), or may be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafka.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"sftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n-                                \"name\": \"sftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"sftp.remote.filename\"\n-                            },\n-                            {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n-                                \"name\": \"fetch.failure.reason\"\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-groovyx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-groovyx-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -23042,154 +23806,145 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value. Use `CTL.` to access any controller services, `SQL.` to access any DBCPServices, `RecordReader.` to access RecordReaderFactory instances, or `RecordWriter.` to access any RecordSetWriterFactory instances.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A script engine property to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Matching Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provides a set of attribute keys to filter for, separated by a comma delimiter ','.\",\n-                                        \"displayName\": \"Enumerate attributes\",\n-                                        \"value\": \"Enumerate attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides a regular expression to match keys of attributes to filter for.\",\n-                                        \"displayName\": \"Use regular expression\",\n-                                        \"value\": \"Use regular expression\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Enumerate attributes\",\n-                                \"description\": \"Specifies the strategy to filter attributes by.\",\n-                                \"displayName\": \"Attribute Matching Strategy\",\n+                            \"groovyx-additional-classpath\": {\n+                                \"description\": \"Classpath list separated by semicolon or comma. You can use masks like `*`, `*.jar` in file name.\",\n+                                \"displayName\": \"Additional classpath\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Matching Strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"groovyx-additional-classpath\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Filter Mode\": {\n+                            \"groovyx-failure-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n-                                        \"displayName\": \"Retain\",\n-                                        \"value\": \"Retain\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"rollback\",\n+                                        \"value\": \"rollback\"\n                                     },\n                                     {\n-                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"Remove\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"transfer to failure\",\n+                                        \"value\": \"transfer to failure\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Retain\",\n-                                \"description\": \"Specifies the strategy to apply on filtered attributes. Either 'Remove' or 'Retain' only the matching attributes.\",\n-                                \"displayName\": \"Filter Mode\",\n+                                \"defaultValue\": \"rollback\",\n+                                \"description\": \"What to do with unhandled exceptions. If you want to manage exception by code then keep the default value `rollback`. If `transfer to failure` selected and unhandled exception occurred then all flowFiles received from incoming queues in this session will be transferred to `failure` relationship with additional attributes set: ERROR_MESSAGE and ERROR_STACKTRACE. If `rollback` selected and unhandled exception occurred then all flowFiles received from incoming queues will be penalized and returned. If the processor has no incoming connections then this parameter has no effect.\",\n+                                \"displayName\": \"Failure strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filter Mode\",\n+                                \"name\": \"groovyx-failure-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filtered Attributes\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Enumerate attributes\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n-                                        \"propertyName\": \"Attribute Matching Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A set of attribute names to filter from FlowFiles. Each attribute name is separated by the comma delimiter ','.\",\n-                                \"displayName\": \"Filtered Attributes\",\n+                            \"groovyx-script-body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Filtered Attributes\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"groovyx-script-body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Filtered Attributes Pattern\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use regular expression\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n-                                        \"propertyName\": \"Attribute Matching Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A regular expression to match names of attributes to filter from FlowFiles.\",\n-                                \"displayName\": \"Filtered Attributes Pattern\",\n+                            \"groovyx-script-file\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Filtered Attributes Pattern\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"groovyx-script-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles that were successfully processed\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to be processed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"delete\",\n-                            \"filter\",\n-                            \"modification\",\n-                            \"regex\",\n-                            \"regular expression\",\n-                            \"remove\",\n-                            \"retain\"\n+                            \"groovy\",\n+                            \"groovyx\",\n+                            \"script\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FilterAttribute\",\n-                        \"typeDescription\": \"Filters the attributes of a FlowFile by retaining specified attributes and removing the rest or by removing specified attributes and retaining the rest.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Retain\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Use regular expression\\\".\\nSpecify the \\\"Filtered Attributes Pattern\\\", e.g. \\\"my-property|a-prefix[.].*\\\".\\n\",\n-                                \"description\": \"Retain all FlowFile attributes matching a regular expression\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Remove\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Enumerate attributes\\\".\\nSpecify the set of \\\"Filtered Attributes\\\" using the delimiter comma ',', e.g. \\\"my-property,other,filename\\\".\\n\",\n-                                \"description\": \"Remove only a specified set of FlowFile attributes\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"type\": \"org.apache.nifi.processors.groovyx.ExecuteGroovyScript\",\n+                        \"typeDescription\": \"Experimental Extended Groovy script processor. The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back.\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-salesforce-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-salesforce-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -23202,571 +23957,740 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"flatten-json-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"oauth2-access-token-provider\": {\n+                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-character-set\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"flatten-json-pretty-print-json\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"15 s\",\n+                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-pretty-print-json\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"flatten-json-return-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flatten\",\n-                                        \"value\": \"flatten\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"unflatten\",\n-                                        \"value\": \"unflatten\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flatten\",\n-                                \"description\": \"Specifies the desired return type of json such as flatten/unflatten\",\n-                                \"displayName\": \"Return Type\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-json-return-type\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"flatten-json-separator\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n-                                \"displayName\": \"Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"flatten-json-separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"flatten-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flattens every objects into a single level json\",\n-                                        \"displayName\": \"normal\",\n-                                        \"value\": \"normal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flattens every objects and keep arrays format\",\n-                                        \"displayName\": \"keep arrays\",\n-                                        \"value\": \"keep arrays\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n-                                        \"displayName\": \"dot notation\",\n-                                        \"value\": \"dot notation\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flattens every objects except arrays which contain only primitive types (strings, numbers, booleans and null)\",\n-                                        \"displayName\": \"keep primitive arrays\",\n-                                        \"value\": \"keep primitive arrays\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"keep arrays\",\n-                                \"description\": \"Specifies how json should be flattened/unflattened\",\n-                                \"displayName\": \"Flatten Mode\",\n+                            \"salesforce-api-version\": {\n+                                \"defaultValue\": \"54.0\",\n+                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n+                                \"displayName\": \"API Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-api-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-reserved-characters\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, reserved characters in keys will be ignored\",\n-                                \"displayName\": \"Ignore Reserved Characters\",\n+                            \"salesforce-url\": {\n+                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n+                                \"displayName\": \"Salesforce Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-reserved-characters\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"Files that cannot be flattened/unflattened go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n+                                \"name\": \"objectType\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"flatten\",\n-                            \"json\",\n-                            \"unflatten\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.FlattenJson\",\n-                        \"typeDescription\": \"Provides the user with the ability to take a nested JSON document and flatten it into a simple key/value pair document. The keys are combined at each level with a user-defined separator that defaults to '.'. This Processor also allows to unflatten back the flattened json. It supports four kinds of flatten mode such as normal, keep-arrays, dot notation for MongoDB query and keep-primitive-arrays. Default flatten mode is 'keep-arrays'.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\n+                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n-                                \"name\": \"enrichment\"\n+                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"For FlowFiles created as a result of an execution error.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"record\"\n+                            \"put\",\n+                            \"salesforce\",\n+                            \"sobject\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ForkEnrichment\",\n-                        \"typeDescription\": \"Used in conjunction with the JoinEnrichment processor, this processor is responsible for adding the attributes that are necessary for the JoinEnrichment processor to perform its function. Each incoming FlowFile will be cloned. The original FlowFile will have appropriate attributes added and then be transferred to the 'original' relationship. The clone will have appropriate attributes added and then be routed to the 'enrichment' relationship. See the documentation for the JoinEnrichment processor (and especially its Additional Details) for more information on how these Processors work together and how to perform enrichment tasks in NiFi by using these Processors.\",\n+                        \"type\": \"org.apache.nifi.processors.salesforce.PutSalesforceObject\",\n+                        \"typeDescription\": \"Creates new records for the specified Salesforce sObject. The type of the Salesforce object must be set in the input flowfile's 'objectType' attribute. This processor cannot update existing records.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Group ID to use in order to correlate the 'original' FlowFile with the 'enrichment' FlowFile.\",\n-                                \"name\": \"enrichment.group.id\"\n-                            },\n-                            {\n-                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n-                                \"name\": \"enrichment.role\"\n+                                \"description\": \"The error message returned by Salesforce.\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-salesforce-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A Record Path value, pointing to a field of type ARRAY containing RECORD objects\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fork-mode\": {\n-                                \"allowableValues\": [\n+                            \"age-delay\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Generated records will be the elements of the array\",\n-                                        \"displayName\": \"Extract\",\n-                                        \"value\": \"extract\"\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n                                     },\n                                     {\n-                                        \"description\": \"Generated records will preserve the input schema and will contain a one-element array\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"split\"\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"split\",\n-                                \"description\": \"Specifies the forking mode of the processor\",\n-                                \"displayName\": \"Mode\",\n+                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35.\",\n+                                \"displayName\": \"Age Delay\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fork-mode\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"age-delay\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"include-parent-fields\": {\n+                            \"age-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n+                                \"displayName\": \"Age Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"age-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"create-zero-record-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"This parameter is only valid with the 'extract' mode. If set to true, all the fields from the root level to the given array will be added as fields of each element of the array to fork.\",\n-                                \"displayName\": \"Include Parent Fields\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether or not to create a FlowFile when the Salesforce REST API does not return any records\",\n+                                \"displayName\": \"Create Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-parent-fields\",\n+                                \"name\": \"create-zero-record-files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"custom-soql-query\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"custom-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify the SOQL query to run.\",\n+                                \"displayName\": \"Custom SOQL Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"custom-soql-query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-where-condition\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"A custom expression to be added in the WHERE clause of the query\",\n+                                \"displayName\": \"Custom WHERE Condition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"custom-where-condition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"field-names\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n+                                \"displayName\": \"Field Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"field-names\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"initial-age-filter\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    },\n+                                    {\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property specifies the start time that the processor applies when running the first query.\",\n+                                \"displayName\": \"Initial Age Start Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"initial-age-filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"oauth2-access-token-provider\": {\n+                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"oauth2-access-token-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n+                            \"query-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide query by properties.\",\n+                                        \"displayName\": \"Property Based Query\",\n+                                        \"value\": \"property-based-query\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provide custom SOQL query.\",\n+                                        \"displayName\": \"Custom Query\",\n+                                        \"value\": \"custom-query\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"property-based-query\",\n+                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n+                                \"displayName\": \"Query Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"query-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"15 s\",\n+                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service used for writing records returned from the Salesforce REST API\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"salesforce-api-version\": {\n+                                \"defaultValue\": \"54.0\",\n+                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n+                                \"displayName\": \"API Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-api-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"salesforce-url\": {\n+                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n+                                \"displayName\": \"Salesforce Instance URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sobject-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Salesforce sObject to be queried\",\n+                                \"displayName\": \"sObject Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sobject-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.salesforce.PutSalesforceObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"When 'Age Field' is set, after performing a query the time of execution is stored. Subsequent queries will be augmented with an additional condition so that only records that are newer than the stored execution time (adjusted with the optional value of 'Age Delay') will be retrieved. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"In case a FlowFile generates an error during the fork operation, it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n-                                \"name\": \"fork\"\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"array\",\n-                            \"content\",\n-                            \"event\",\n-                            \"fork\",\n-                            \"record\",\n-                            \"stream\"\n+                            \"query\",\n+                            \"salesforce\",\n+                            \"sobject\",\n+                            \"soql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ForkRecord\",\n-                        \"typeDescription\": \"This processor allows the user to fork a record into multiple records. The user must specify at least one Record Path, as a dynamic property, pointing to a field of type ARRAY containing RECORD objects. The processor accepts two modes: 'split' and 'extract'. In both modes, there is one record generated per element contained in the designated array. In the 'split' mode, each generated record will preserve the same schema as given in the input but the array will contain only one element. In the 'extract' mode, the element of the array must be of record type and will be the generated record. Additionally, in the 'extract' mode, it is possible to specify if each generated record should contain all the fields of the parent records from the root level to the extracted record. This assumes that the fields to add in the record are defined in the schema of the Record Writer controller service. See examples in the additional details documentation of this processor.\",\n+                        \"type\": \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\",\n+                        \"typeDescription\": \"Retrieves records from a Salesforce sObject. Users can add arbitrary filter conditions by setting the 'Custom WHERE Condition' property. The processor can also run a custom query, although record processing is not supported in that case. Supports incremental retrieval: users can define a field in the 'Age Field' property that will be used to determine when the record was created. When this property is set the processor will retrieve new records. Incremental loading and record-based processing are only supported in property-based queries. It's also possible to define an initial cutoff value for the age, filtering out all older records even for the first run. In case of 'Property Based Query' this processor should run on the Primary Node only. FlowFile attribute 'record.count' indicates how many records were retrieved and written to the output. The processor can accept an optional input FlowFile and reference the FlowFile attributes in the query.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The generated FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type indicated by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n+                                \"description\": \"Sets the total number of records in the FlowFile.\",\n+                                \"name\": \"total.record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-3-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-3-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Specifies an attribute on generated FlowFiles defined by the Dynamic Property's key and value. If Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles.\",\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"Generated FlowFile attribute name\",\n-                                \"value\": \"Generated FlowFile attribute value\"\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of FlowFiles to be transferred in each invocation\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 s\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that the service will wait for a response from Kafka.\\nIf Kafka does not acknowledge the message within this time period, the service will throw an exception.\\n\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Format\": {\n+                            \"bootstrap.servers\": {\n+                                \"description\": \"Comma-separated list of Kafka Bootstrap Servers in the format host:port. Corresponds to Kafka bootstrap.servers property\",\n+                                \"displayName\": \"Bootstrap Servers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"default.api.timeout.ms\": {\n+                                \"defaultValue\": \"60 s\",\n+                                \"description\": \"Default timeout for Kafka client operations. Mapped to Kafka default.api.timeout.ms. The Kafka request.timeout.ms property is derived from half of the configured timeout\",\n+                                \"displayName\": \"Client Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"default.api.timeout.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"isolation.level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Read records from Kafka only after the producer has committed a transaction.\",\n+                                        \"displayName\": \"Read Committed\",\n+                                        \"value\": \"read_committed\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"Read records from Kafka as soon as the produced has sent the record, regardless of transaction status.\",\n+                                        \"displayName\": \"Read Uncommitted\",\n+                                        \"value\": \"read_uncommitted\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Text\",\n-                                \"description\": \"Specifies whether the data should be Text or Binary\",\n-                                \"displayName\": \"Data Format\",\n+                                \"defaultValue\": \"read_committed\",\n+                                \"description\": \"Specifies how the service should handle transaction isolation levels when communicating with Kafka.\\nThe uncommited option means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions.\\nThe committed option configures the service to not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the\\nconsumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\\nCorresponds to Kafka isolation.level property.\\n\",\n+                                \"displayName\": \"Transaction Isolation Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Format\",\n+                                \"name\": \"isolation.level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Size\": {\n-                                \"defaultValue\": \"0B\",\n-                                \"description\": \"The size of the file that will be used\",\n-                                \"displayName\": \"File Size\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 s\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the\\nentire 'send' call. Corresponds to Kafka max.block.ms property\\n\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Size\",\n+                                \"name\": \"max.poll.records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Unique FlowFiles\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, each FlowFile that is generated will be unique. If false, a random value will be generated and all FlowFiles will get the same content but this offers much higher throughput\",\n-                                \"displayName\": \"Unique FlowFiles\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unique FlowFiles\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set to use when writing the bytes of Custom Text to a flow file.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"SASL Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-set\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"generate-ff-custom-text\": {\n-                                \"description\": \"If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored. Finally, if Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles\",\n-                                \"displayName\": \"Custom Text\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"SASL Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"generate-ff-custom-text\",\n-                                \"required\": false,\n+                                \"name\": \"sasl.username\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mime-type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute.\",\n-                                \"displayName\": \"Mime Type\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mime-type\",\n-                                \"required\": false,\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"generate\",\n-                            \"load\",\n-                            \"random\",\n-                            \"test\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateFlowFile\",\n-                        \"typeDescription\": \"This processor creates FlowFiles with random data or custom content. GenerateFlowFile is useful for load testing, configuration, and simulation. Also see DuplicateFlowFile for additional load testing.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type of the output if the 'Mime Type' property is set\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.kafka.service.Kafka3ConnectionService\",\n+                        \"typeDescription\": \"Provides and manages connections to Kafka Brokers for producer or consumer operations.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-windows-event-log-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-windows-event-log-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -23774,2300 +24698,1942 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Custom properties define the generated record schema using configured field names and value data types in absence of the Schema Text property\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Field name in generated record\",\n-                                \"value\": \"Faker category for generated record values\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"null-percentage\": {\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Nullable Fields\",\n-                                        \"propertyName\": \"nullable-fields\"\n-                                    }\n-                                ],\n-                                \"description\": \"The percent probability (0-100%) that a generated value for any nullable field will be null. Set this property to zero to have no null values, or 100 to have all null values.\",\n-                                \"displayName\": \"Null Value Percentage\",\n+                            \"channel\": {\n+                                \"defaultValue\": \"System\",\n+                                \"description\": \"The Windows Event Log Channel to listen to.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"null-percentage\",\n+                                \"name\": \"channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"nullable-fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether the generated fields will be nullable. Note that this property is ignored if Schema Text is set. Also it only affects the schema of the generated data, not whether any values will be null. If this property is true, see 'Null Value Percentage' to set the probability that any generated field will be null.\",\n-                                \"displayName\": \"Nullable Fields\",\n+                            \"inactiveDurationToReconnect\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"If no new event logs are processed for the specified time period, this processor will try reconnecting to recover from a state where any further messages cannot be consumed. Such situation can happen if Windows Event Log service is restarted, or ERROR_EVT_QUERY_RESULT_STALE (15011) is returned. Setting no duration, e.g. '0 ms' disables auto-reconnection.\",\n+                                \"displayName\": \"Inactive duration to reconnect\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nullable-fields\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"inactiveDurationToReconnect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"number-of-records\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many records will be generated for each outgoing FlowFile.\",\n-                                \"displayName\": \"Number of Records\",\n+                            \"maxBuffer\": {\n+                                \"defaultValue\": \"1048576\",\n+                                \"description\": \"The individual Event Log XMLs are rendered to a buffer.  This specifies the maximum size in bytes that the buffer will be allowed to grow to. (Limiting the maximum size of an individual Event XML.)\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"number-of-records\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maxBuffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"maxQueue\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Events are received asynchronously and must be output as FlowFiles when the processor is triggered.  This specifies the maximum number of events to queue for transformation into FlowFiles.\",\n+                                \"displayName\": \"Maximum queue size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"maxQueue\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"description\": \"The text of an Avro-formatted Schema used to generate record data. If this property is set, any user-defined properties are ignored.\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"query\": {\n+                                \"defaultValue\": \"*\",\n+                                \"description\": \"XPath Query to filter events. (See https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx for examples.)\",\n+                                \"displayName\": \"XPath Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"name\": \"query\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n+                                \"description\": \"Relationship for successfully consumed events.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fake\",\n-                            \"generate\",\n-                            \"random\",\n-                            \"test\"\n+                            \"event\",\n+                            \"ingest\",\n+                            \"windows\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateRecord\",\n-                        \"typeDescription\": \"This processor creates FlowFiles with records having random value for the specified fields. GenerateRecord is useful for testing, configuration, and simulation. It uses either user-defined properties to define a record schema or a provided schema and generates the specified number of records using random data for the fields in the schema.\",\n+                        \"type\": \"org.apache.nifi.processors.windows.event.log.ConsumeWindowsEventLog\",\n+                        \"typeDescription\": \"Registers a Windows Event Log Subscribe Callback to receive FlowFiles from Events on Windows.  These can be filtered via channel and XPath.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"Will set a MIME type value of application/xml.\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an initial max value for max value columns. Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified). In the case of incoming connections, the value is only used the first time for each table specified in the FlowFiles.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Database User\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"mongo-uri\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"mongo-uri\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"mongo-write-concern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement, using the default write concern configured on the server\",\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"Write operations that use this write concern will return as soon as the message is written to the socket. Exceptions are raised for network issues, but not server errors\",\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"Deprecated.  Use of \\\"JOURNALED\\\" is preferred\",\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"Write operations wait for the server to group commit to the journal file on disk\",\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"Deprecated.  Use of \\\"W2\\\" is preferred\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"Exceptions are raised for network issues, and server errors; waits on a majority of servers for the write operation\",\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from a single member\",\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from two members\",\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from three members\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"defaultValue\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-column-for-val-partitioning\": {\n-                                \"description\": \"The name of a column whose values will be used for partitioning. The default behavior is to use row numbers on the result set for partitioning into 'pages' to be fetched from the database, using an offset/limit strategy. However for certain databases, it can be more efficient under the right circumstances to use the column values themselves to define the 'pages'. This property should only be used when the default queries are not performing well, when there is no maximum-value column or a single maximum-value column whose type can be coerced to a long integer (i.e. not date or timestamp), and the column values are evenly distributed and not sparse, for best performance.\",\n-                                \"displayName\": \"Column for Value Partitioning\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gen-table-column-for-val-partitioning\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-custom-orderby-column\": {\n-                                \"description\": \"The name of a column to be used for ordering the results if Max-Value Columns are not provided and partitioning is enabled. This property is ignored if either Max-Value Columns is set or Partition Size = 0. NOTE: If neither Max-Value Columns nor Custom ORDER BY Column is set, then depending on the the database/driver, the processor may report an error and/or the generated SQL may result in missing and/or duplicate rows. This is because without an explicit ordering, fetching each partition is done using an arbitrary ordering.\",\n-                                \"displayName\": \"Custom ORDER BY Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gen-table-custom-orderby-column\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gen-table-fetch-partition-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The number of result rows to be fetched by each generated SQL statement. The total number of rows in the table divided by the partition size gives the number of SQL statements (i.e. FlowFiles) generated. A value of zero indicates that a single FlowFile is to be generated whose SQL statement will fetch all rows in the table.\",\n-                                \"displayName\": \"Partition Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gen-table-fetch-partition-size\",\n+                                \"name\": \"mongo-write-concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gen-table-output-flowfile-on-zero-results\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Depending on the specified properties, an execution of this processor may not result in any SQL statements generated. When this property is true, an empty FlowFile will be generated (having the parent of the incoming FlowFile if present) and transferred to the 'success' relationship. When this property is false, no output FlowFiles will be generated.\",\n-                                \"displayName\": \"Output Empty FlowFile on Zero Results\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n-                            \"org.apache.nifi.processors.standard.QueryDatabaseTable\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"This relationship is only used when SQL query execution (using an incoming FlowFile) failed. The incoming FlowFile will be penalized and routed to this relationship. If no incoming connection(s) are specified, this relationship is unused.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"fetch\",\n-                            \"generate\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"service\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n-                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the Environment/System properties.\\n  - If incoming connection(s) are specified and no FlowFile is available to a processor task, no work will be performed.\\n  - If incoming connection(s) are specified and a FlowFile is available to a processor task, the FlowFile's attributes may be used in Expression Language for such fields as Table Name and others. However, the Max-Value Columns and Columns to Return fields must be empty or refer to columns that are available in each specified table.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the processor has incoming connections, and processing an incoming FlowFile causes a SQL Exception, the FlowFile is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"generatetablefetch.sql.error\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the database table to be queried.\",\n-                                \"name\": \"generatetablefetch.tableName\"\n-                            },\n-                            {\n-                                \"description\": \"The comma-separated list of column names used in the query.\",\n-                                \"name\": \"generatetablefetch.columnNames\"\n-                            },\n-                            {\n-                                \"description\": \"Where clause used in the query to get the expected rows.\",\n-                                \"name\": \"generatetablefetch.whereClause\"\n-                            },\n-                            {\n-                                \"description\": \"The comma-separated list of column names used to keep track of data that has been returned since the processor started running.\",\n-                                \"name\": \"generatetablefetch.maxColumnNames\"\n-                            },\n-                            {\n-                                \"description\": \"The number of result rows to be fetched by the SQL statement.\",\n-                                \"name\": \"generatetablefetch.limit\"\n-                            },\n-                            {\n-                                \"description\": \"Offset to be used to retrieve the corresponding partition.\",\n-                                \"name\": \"generatetablefetch.offset\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles generated from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"This is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"This is the position of this FlowFile in the list of outgoing FlowFiles that were all generated from the same execution. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same execution and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.mongodb.MongoDBControllerService\",\n+                        \"typeDescription\": \"Provides a controller service that configures a connection to MongoDB and provides access to that connection to other Mongo-related components.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n+                            \"mongo-collection-name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-collection-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"mongo-db-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-db-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-lookup-client-service\": {\n+                                \"description\": \"A MongoDB controller service to use with this lookup service.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"mongo-lookup-client-service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"mongo-lookup-projection\": {\n+                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n+                                \"displayName\": \"Projection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-lookup-projection\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"mongo-lookup-value-field\": {\n+                                \"description\": \"The field whose value will be returned when the lookup key(s) match a record. If not specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n+                                \"displayName\": \"Lookup Value Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"mongo-lookup-value-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Delete Original\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n-                                \"displayName\": \"Delete Original\",\n+                                \"defaultValue\": \"infer\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delete Original\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"lookup\",\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"record\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.mongodb.MongoDBLookupService\",\n+                        \"typeDescription\": \"Provides a lookup service based around MongoDB. Each key that is specified \\nwill be added to a query as-is. For example, if you specify the two keys, \\nuser and email, the resulting query will be { \\\"user\\\": \\\"tester\\\", \\\"email\\\": \\\"tester@test.com\\\" }.\\nThe query is limited to the first result (findOne in the Mongo documentation). If no \\\"Lookup Value Field\\\" is specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"Compress Events\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Selects\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in a single connection\",\n-                                \"displayName\": \"Max Selects\",\n+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Selects\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"record-sink-record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"s2s-transport-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"HTTP\",\n                                         \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n+                                \"name\": \"s2s-transport-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"db\",\n+                            \"record\",\n+                            \"s2s\",\n+                            \"site\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.sink.SiteToSiteReportingRecordSink\",\n+                        \"typeDescription\": \"Provides a service to write records using a configured RecordSetWriter over a Site-to-Site connection.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to send sensitive details contained in bulletin events to any external system.\",\n+                                \"requiredPermission\": \"export nifi details\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\n+                            \"Compress Events\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Platform\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The value to use for the platform field in each event.\",\n+                                \"displayName\": \"Platform\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Use Natural Ordering\": {\n+                            \"include-null-values\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n-                                \"displayName\": \"Use Natural Ordering\",\n+                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Natural Ordering\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-transport-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"s2s-transport-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n+                        \"restricted\": true,\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"FTP\",\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"bulletin\",\n+                            \"site\",\n+                            \"site to site\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetFTP\",\n-                        \"typeDescription\": \"Fetches files from an FTP Server and creates FlowFiles from them\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteBulletinReportingTask\",\n+                        \"typeDescription\": \"Publishes Bulletin events using the Site To Site protocol. Note: only up to 5 bulletins are stored per component and up to 10 bulletins at controller level for a duration of up to 5 minutes. If this reporting task is not scheduled frequently enough some bulletins may not be sent.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of files to pull in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"Compress Events\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Directory\",\n+                                \"name\": \"Destination URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\n+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"include-null-values\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n-                                \"displayName\": \"Keep Source File\",\n+                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"s2s-http-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"name\": \"s2s-http-proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"s2s-metrics-application-id\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics\",\n+                                \"displayName\": \"Application ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-metrics-application-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-metrics-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Metrics will be formatted according to the Ambari Metrics API. See Additional Details in Usage documentation.\",\n+                                        \"displayName\": \"Ambari Format\",\n+                                        \"value\": \"ambari-format\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Metrics will be formatted using the Record Writer property of this reporting task. See Additional Details in Usage documentation to have the description of the default schema.\",\n+                                        \"displayName\": \"Record Format\",\n+                                        \"value\": \"record-format\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ambari-format\",\n+                                \"description\": \"The output format that will be used for the metrics. If Record Format is selected, a Record Writer must be provided. If Ambari Format is selected, the Record Writer property should be empty.\",\n+                                \"displayName\": \"Output Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"s2s-metrics-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"s2s-metrics-hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-metrics-hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-transport-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n+                                \"name\": \"s2s-transport-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All files are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n+                            \"metrics\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"status\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetFile\",\n-                        \"typeDescription\": \"Creates FlowFiles from files in a directory.  NiFi will ignore files it doesn't have at least read permissions for.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on disk\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on disk. For example, if the <Input Directory> property is set to /tmp, files picked up from /tmp will have the path attribute set to ./. If the <Recurse Subdirectories> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n-                                \"name\": \"file.creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The owner of the file. May not work on all file systems\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group owner of the file. May not work on all file systems\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the file. May not work on all file systems\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteMetricsReportingTask\",\n+                        \"typeDescription\": \"Publishes same metrics as the Ambari Reporting task using the Site To Site protocol.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to send sensitive details contained in Provenance events to any external system.\",\n+                                \"requiredPermission\": \"export nifi details\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Delete Original\": {\n+                            \"Compress Events\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n-                                \"displayName\": \"Delete Original\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delete Original\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n+                            \"Platform\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The value to use for the platform field in each event.\",\n+                                \"displayName\": \"Platform\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"include-null-values\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Max Selects\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in a single connection\",\n-                                \"displayName\": \"Max Selects\",\n+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Selects\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"name\": \"s2s-http-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"60 sec\",\n-                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n+                                \"name\": \"s2s-http-proxy-username\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"s2s-prov-task-event-filter\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Event Type to Include\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n+                                \"name\": \"s2s-prov-task-event-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"s2s-prov-task-event-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Event Type to Exclude\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                            \"s2s-prov-task-id-filter\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component ID to Include\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"s2s-prov-task-id-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component ID to Exclude\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Search Recursively\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                            \"s2s-prov-task-name-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Name to Include\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                            \"s2s-prov-task-name-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Name to Exclude\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                            \"s2s-prov-task-type-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Type to Include\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                            \"s2s-prov-task-type-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Type to Exclude\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Natural Ordering\": {\n+                            \"s2s-transport-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n-                                \"displayName\": \"Use Natural Ordering\",\n+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Natural Ordering\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"s2s-transport-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n+                            \"start-position\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n+                                        \"displayName\": \"Beginning of Stream\",\n+                                        \"value\": \"beginning-of-stream\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n+                                        \"displayName\": \"End of Stream\",\n+                                        \"value\": \"end-of-stream\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                                \"defaultValue\": \"beginning-of-stream\",\n+                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n+                                \"displayName\": \"Start Position\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"start-position\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n+                        \"restricted\": true,\n+                        \"stateful\": {\n+                            \"description\": \"Stores the Reporting Task's last event Id so that on restart the task knows where it left off.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"lineage\",\n+                            \"provenance\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"tracking\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n-                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteProvenanceReportingTask\",\n+                        \"typeDescription\": \"Publishes Provenance events using the Site To Site protocol.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Additional HTTP Methods\": {\n-                                \"description\": \"A comma-separated list of non-standard HTTP Methods that should be allowed\",\n-                                \"displayName\": \"Additional HTTP Methods\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional HTTP Methods\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Allow DELETE\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP DELETE Method\",\n-                                \"displayName\": \"Allow DELETE\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow DELETE\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow GET\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP GET Method\",\n-                                \"displayName\": \"Allow GET\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow GET\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow HEAD\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow HTTP HEAD Method\",\n-                                \"displayName\": \"Allow HEAD\",\n+                            \"Component Name Filter Regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A regex specifying which component names to report.  Any component name matching this regex will be included.\",\n+                                \"displayName\": \"Component Name Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow HEAD\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Component Name Filter Regex\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow OPTIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow HTTP OPTIONS Method\",\n-                                \"displayName\": \"Allow OPTIONS\",\n+                            \"Component Type Filter Regex\": {\n+                                \"defaultValue\": \"(Processor|ProcessGroup|RemoteProcessGroup|RootProcessGroup|Connection|InputPort|OutputPort)\",\n+                                \"description\": \"A regex specifying which component types to report.  Any component type matching this regex will be included.  Component types are: Processor, RootProcessGroup, ProcessGroup, RemoteProcessGroup, Connection, InputPort, OutputPort\",\n+                                \"displayName\": \"Component Type Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow OPTIONS\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Component Type Filter Regex\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow POST\": {\n+                            \"Compress Events\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP POST Method\",\n-                                \"displayName\": \"Allow POST\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow POST\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow PUT\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP PUT Method\",\n-                                \"displayName\": \"Allow PUT\",\n+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow PUT\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allowed Paths\": {\n-                                \"description\": \"A Regular Expression that specifies the valid HTTP Paths that are allowed in the incoming URL Requests. If this value is specified and the path of the HTTP Requests does not match this Regular Expression, the Processor will respond with a 404: NotFound\",\n-                                \"displayName\": \"Allowed Paths\",\n+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allowed Paths\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Processor should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Authentication\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Default URL Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The character set to use for decoding URL parameters if the HTTP Request does not supply one\",\n-                                \"displayName\": \"Default URL Character Set\",\n+                            \"Platform\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The value to use for the platform field in each status record.\",\n+                                \"displayName\": \"Platform\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Default URL Character Set\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Platform\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP Context Map\": {\n-                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n-                                \"displayName\": \"HTTP Context Map\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Context Map\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"HTTP Protocols\": {\n+                            \"include-null-values\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HTTP_1_1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n-                                \"displayName\": \"Hostname\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Listening Port\": {\n-                                \"defaultValue\": \"80\",\n-                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Listening Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Maximum Threads\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The maximum number of threads that the embedded HTTP server will use for handling requests.\",\n-                                \"displayName\": \"Maximum Threads\",\n+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Threads\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-hostname\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"s2s-http-proxy-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"container-queue-size\": {\n-                                \"defaultValue\": \"50\",\n-                                \"description\": \"The size of the queue for Http Request Containers\",\n-                                \"displayName\": \"Container Queue Size\",\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"container-queue-size\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-read-buffer-size\": {\n-                                \"defaultValue\": \"512 KB\",\n-                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n-                                \"displayName\": \"Multipart Read Buffer Size\",\n+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-read-buffer-size\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-request-max-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n-                                \"displayName\": \"Multipart Request Max Size\",\n+                            \"s2s-transport-protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-request-max-size\",\n+                                \"name\": \"s2s-transport-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"parameters-to-attributes\": {\n-                                \"description\": \"A comma-separated list of HTTP parameters or form data to output as attributes\",\n-                                \"displayName\": \"Parameters to Attributes List\",\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"history\",\n+                            \"metrics\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"status\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteStatusReportingTask\",\n+                        \"typeDescription\": \"Publishes Status events using the Site To Site protocol.  The component type and name filter regexes form a union: only components matching both regexes will be reported.  However, all process groups are recursively searched for matching components, regardless of whether the process group matches the component filters.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-network-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"FIELDS_DESTINATION\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile JSON content\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile attributes\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attribute, fields will be populated as attributes. If set to flowfile-content, the netflowv5 field will be converted into a flat JSON object.\",\n+                                \"displayName\": \"Parsed fields destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameters-to-attributes\",\n-                                \"required\": false,\n+                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n+                                \"name\": \"udp.port\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be parsed as a netflowv5 message will be transferred to this Relationship without any attributes being added\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original raw content\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"https\",\n-                            \"ingress\",\n-                            \"listen\",\n-                            \"request\",\n-                            \"web service\"\n+                            \"attributes\",\n+                            \"byte\",\n+                            \"datagram\",\n+                            \"netflow\",\n+                            \"network\",\n+                            \"packet\",\n+                            \"v5\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n-                        \"typeDescription\": \"Starts an HTTP Server and listens for HTTP Requests. For each request, creates a FlowFile and transfers to 'success'. This Processor is designed to be used in conjunction with the HandleHttpResponse Processor in order to create a Web Service. In case  of a multipart request, one FlowFile is generated for each part.\",\n+                        \"type\": \"org.apache.nifi.processors.network.ParseNetflowv5\",\n+                        \"typeDescription\": \"Parses netflowv5 byte ingest and add to NiFi flowfile as attributes or JSON content.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"An identifier that allows the HandleHttpRequest and HandleHttpResponse to coordinate which FlowFile belongs to which HTTP Request/Response.\",\n-                                \"name\": \"http.context.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n-                                \"name\": \"http.servlet.path\"\n-                            },\n-                            {\n-                                \"description\": \"The part of the request URL that is considered to be the Context Path\",\n-                                \"name\": \"http.context.path\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP Method that was used for the request, such as GET or POST\",\n-                                \"name\": \"http.method\"\n-                            },\n-                            {\n-                                \"description\": \"IP address/hostname of the server\",\n-                                \"name\": \"http.local.name\"\n-                            },\n-                            {\n-                                \"description\": \"Listening port of the server\",\n-                                \"name\": \"http.server.port\"\n-                            },\n-                            {\n-                                \"description\": \"The query string portion of the Request URL\",\n-                                \"name\": \"http.query.string\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the requestor\",\n-                                \"name\": \"http.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname:port combination of the requestor\",\n-                                \"name\": \"http.remote.addr\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the requestor\",\n-                                \"name\": \"http.remote.user\"\n-                            },\n-                            {\n-                                \"description\": \"The protocol used to communicate\",\n-                                \"name\": \"http.protocol\"\n-                            },\n-                            {\n-                                \"description\": \"The full Request URL\",\n-                                \"name\": \"http.request.uri\"\n-                            },\n-                            {\n-                                \"description\": \"The type of HTTP Authorization used\",\n-                                \"name\": \"http.auth.type\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the authenticated user making the request\",\n-                                \"name\": \"http.principal.name\"\n-                            },\n-                            {\n-                                \"description\": \"Each of query parameters in the request will be added as an attribute, prefixed with \\\"http.query.param.\\\"\",\n-                                \"name\": \"http.query.param.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"Form parameters in the request that are configured by \\\"Parameters to Attributes List\\\" will be added as an attribute, prefixed with \\\"http.param.\\\". Putting form parameters of large size is not recommended.\",\n-                                \"name\": \"http.param.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"The Distinguished Name of the requestor. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n-                                \"name\": \"http.subject.dn\"\n-                            },\n-                            {\n-                                \"description\": \"The Distinguished Name of the entity that issued the Subject's certificate. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n-                                \"name\": \"http.issuer.dn\"\n-                            },\n-                            {\n-                                \"description\": \"X.509 Client Certificate Subject Alternative Name value from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate\",\n-                                \"name\": \"http.certificate.sans.N.name\"\n-                            },\n-                            {\n-                                \"description\": \"X.509 Client Certificate Subject Alternative Name type from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate. The attribute value is one of the General Names from RFC 3280 Section 4.1.2.7\",\n-                                \"name\": \"http.certificate.sans.N.nameType\"\n-                            },\n-                            {\n-                                \"description\": \"Each of the HTTP Headers that is received in the request will be added as an attribute, prefixed with \\\"http.headers.\\\" For example, if the request contains an HTTP Header named \\\"x-my-header\\\", then the value will be added to an attribute named \\\"http.headers.x-my-header\\\"\",\n-                                \"name\": \"http.headers.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"Each of the HTTP Headers that is received in the multipart request will be added as an attribute, prefixed with \\\"http.headers.multipart.\\\" For example, if the multipart request contains an HTTP Header named \\\"content-disposition\\\", then the value will be added to an attribute named \\\"http.headers.multipart.content-disposition\\\"\",\n-                                \"name\": \"http.headers.multipart.XXX\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content size is recorded into this attribute\",\n-                                \"name\": \"http.multipart.size\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content type is recorded into this attribute\",\n-                                \"name\": \"http.multipart.content.type\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's name is recorded into this attribute\",\n-                                \"name\": \"http.multipart.name\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", when the part contains an uploaded file, the name of the file is recorded into this attribute. Files are stored temporarily at the default temporary-file directory specified in \\\"java.io.File\\\" Java Docs)\",\n-                                \"name\": \"http.multipart.filename\"\n-                            },\n-                            {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's index is recorded into this attribute. The index starts with 1.\",\n-                                \"name\": \"http.multipart.fragments.sequence.number\"\n+                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n+                                \"name\": \"netflowv5.header.*\"\n                             },\n                             {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the count of all parts is recorded into this attribute.\",\n-                                \"name\": \"http.multipart.fragments.total.number\"\n+                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n+                                \"name\": \"netflowv5.record.*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-network-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -26075,131 +26641,241 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These HTTPHeaders are set in the HTTP Response\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"An HTTP header name\",\n-                                \"value\": \"An HTTP header value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to add to the HTTP Response (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be added to the HTTP response\",\n-                                \"displayName\": \"Attributes to add to the HTTP Response (Regex)\",\n+                            \"PCAP Max Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Maximum size of each output PCAP file. PCAP packets larger than the configured size result in routing FlowFiles to the failure relationship.\",\n+                                \"displayName\": \"PCAP Max Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n-                                \"required\": false,\n+                                \"name\": \"PCAP Max Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             },\n-                            \"HTTP Context Map\": {\n-                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n-                                \"displayName\": \"HTTP Context Map\",\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The individual PCAP 'segments' of the original PCAP FlowFile will be routed to this relationship.\",\n+                                \"name\": \"split\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Capture\",\n+                            \"Network\",\n+                            \"PCAP\",\n+                            \"Packet\",\n+                            \"Splitter\",\n+                            \"TShark\",\n+                            \"TcpDump\",\n+                            \"WinDump\",\n+                            \"Wireshark\",\n+                            \"sniffers\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.network.pcap.SplitPCAP\",\n+                        \"typeDescription\": \"Splits one pcap file into multiple pcap files based on a maximum size.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The reason the FlowFile was sent to the failure relationship.\",\n+                                \"name\": \"error.reason\"\n+                            },\n+                            {\n+                                \"description\": \"All split PCAP FlowFiles produced from the same parent PCAP FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split PCAP FlowFiles that were created from a single parent PCAP FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split PCAP FlowFiles generated from the parent PCAP FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent PCAP FlowFile\",\n+                                \"name\": \"segment.original.filename\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-web-client-provider-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"connect-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing during initial socket connection\",\n+                                \"displayName\": \"Connect Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Context Map\",\n+                                \"name\": \"connect-timeout\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"HTTP Status Code\": {\n-                                \"description\": \"The HTTP Status Code to use when responding to the HTTP Request. See Section 10 of RFC 2616 for more information.\",\n-                                \"displayName\": \"HTTP Status Code\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing while reading socket responses\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP Status Code\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The value of this attribute is used to lookup the HTTP Response so that the proper message can be sent back to the requestor. If this attribute is missing, the FlowFile will be routed to 'failure.'\",\n-                                \"name\": \"http.context.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n-                                \"name\": \"http.request.uri\"\n-                            },\n-                            {\n-                                \"description\": \"IP address of the client. Used for provenance event.\",\n-                                \"name\": \"http.remote.host\"\n                             },\n-                            {\n-                                \"description\": \"IP address/hostname of the server. Used for provenance event.\",\n-                                \"name\": \"http.local.name\"\n+                            \"redirect-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FOLLOWED\",\n+                                        \"value\": \"FOLLOWED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORED\",\n+                                        \"value\": \"IGNORED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FOLLOWED\",\n+                                \"description\": \"Handling strategy for responding to HTTP 301 or 302 redirects received with a Location header\",\n+                                \"displayName\": \"Redirect Handling Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redirect-handling-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Listening port of the server. Used for provenance event.\",\n-                                \"name\": \"http.server.port\"\n+                            \"ssl-context-service\": {\n+                                \"description\": \"SSL Context Service overrides system default TLS settings for HTTPS communication\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n-                                \"name\": \"http.subject.dn\"\n+                            \"write-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"Maximum amount of time to wait before failing while writing socket requests\",\n+                                \"displayName\": \"Write Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"write-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.http.StandardHttpContextMap\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles will be routed to this Relationship after the response has been successfully sent to the requestor\",\n-                                \"name\": \"success\"\n-                            },\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles will be routed to this Relationship if the Processor is unable to respond to the requestor. This may happen, for instance, if the connection times out or if NiFi is restarted before responding to the HTTP Request.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"http\",\n-                            \"https\",\n-                            \"response\",\n-                            \"web service\"\n+                            \"Client\",\n+                            \"HTTP\",\n+                            \"Web\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpResponse\",\n-                        \"typeDescription\": \"Sends an HTTP Response to the Requestor that generated a FlowFile. This Processor is designed to be used in conjunction with the HandleHttpRequest in order to create a web service.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.web.client.provider.service.StandardWebClientServiceProvider\",\n+                        \"typeDescription\": \"Web Client Service Provider with support for configuring standard HTTP connection properties\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-update-attribute-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-update-attribute-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -26207,932 +26883,1105 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A FlowFile attribute to update\",\n+                                \"value\": \"The value to set it to\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"config-body\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Replace\",\n-                                            \"Merge\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Config Strategy\",\n-                                        \"propertyName\": \"config-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Body of MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config Body\",\n+                            \"Delete Attributes Expression\": {\n+                                \"description\": \"Regular expression for attributes to be deleted from FlowFiles.  Existing attributes that match will be deleted regardless of whether they are updated by this processor.\",\n+                                \"displayName\": \"Delete Attributes Expression\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"config-body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Delete Attributes Expression\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"config-file\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Replace\",\n-                                            \"Merge\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Config Strategy\",\n-                                        \"propertyName\": \"config-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Path to MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config File\",\n+                            \"Stateful Variables Initial Value\": {\n+                                \"description\": \"If using state to set/reference variables then this value is used to set the initial value of the stateful variable. This will only be used in the @OnScheduled method when state does not contain a value for the variable. This is required if running statefully but can be empty if needed.\",\n+                                \"displayName\": \"Stateful Variables Initial Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"config-file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Stateful Variables Initial Value\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"config-strategy\": {\n+                            \"Store State\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use default NiFi MIME Types.\",\n-                                        \"displayName\": \"Preset\",\n-                                        \"value\": \"Preset\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use config MIME Types only.\",\n-                                        \"displayName\": \"Replace\",\n-                                        \"value\": \"Replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Do not store state\",\n+                                        \"value\": \"Do not store state\"\n                                     },\n                                     {\n-                                        \"description\": \"Use config together with default NiFi MIME Types.\",\n-                                        \"displayName\": \"Merge\",\n-                                        \"value\": \"Merge\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Store state locally\",\n+                                        \"value\": \"Store state locally\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Preset\",\n-                                \"description\": \"Select the loading strategy for MIME Type configuration to be used.\",\n-                                \"displayName\": \"Config Strategy\",\n+                                \"defaultValue\": \"Do not store state\",\n+                                \"description\": \"Select whether or not state will be stored. Selecting 'Stateless' will offer the default functionality of purely updating the attributes on a FlowFile in a stateless manner. Selecting a stateful option will not only store the attributes on the FlowFile but also in the Processors state. See the 'Stateful Usage' topic of the 'Additional Details' section of this processor's documentation for more information\",\n+                                \"displayName\": \"Store State\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"config-strategy\",\n+                                \"name\": \"Store State\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-filename-in-detection\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true will pass the filename to Tika to aid in detection.\",\n-                                \"displayName\": \"Use Filename In Detection\",\n+                            \"canonical-value-lookup-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many canonical lookup values should be stored in the cache\",\n+                                \"displayName\": \"Cache Value Lookup Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-filename-in-detection\",\n+                                \"name\": \"canonical-value-lookup-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n+                        \"stateful\": {\n+                            \"description\": \"Gives the option to store values not only on the FlowFile but as stateful variables to be referenced in a recursive manner.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to success\",\n+                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"MIME\",\n-                            \"bzip2\",\n-                            \"compression\",\n-                            \"file\",\n-                            \"gzip\",\n-                            \"identify\",\n-                            \"mime.type\",\n-                            \"zip\"\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"delete\",\n+                            \"modification\",\n+                            \"state\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.IdentifyMimeType\",\n-                        \"typeDescription\": \"Attempts to identify the MIME Type used for a FlowFile. If the MIME Type can be identified, an attribute with the name 'mime.type' is added with the value being the MIME Type. If the MIME Type cannot be determined, the value will be set to 'application/octet-stream'. In addition, the attribute 'mime.extension' will be set if a common file extension for the MIME Type is known. If the MIME Type detected is of type text/*, attempts to identify the charset used and an attribute with the name 'mime.charset' is added with the value being the charset.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                        \"type\": \"org.apache.nifi.processors.attributes.UpdateAttribute\",\n+                        \"typeDescription\": \"Updates the Attributes for a FlowFile by using the Attribute Expression Language and/or deletes the attributes based on a regular expression\",\n+                        \"useCases\": [\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.type attribute to the detected MIME Type. If unable to detect the MIME Type, the attribute's value will be set to application/octet-stream\",\n-                                \"name\": \"mime.type\"\n+                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the newly added attribute.\\nThe value of the property will become the value of the newly added attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\",\n+                                \"description\": \"Add a new FlowFile attribute\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.extension attribute to the file extension associated with the detected MIME Type. If there is no correlated extension, the attribute's value will be empty\",\n-                                \"name\": \"mime.extension\"\n+                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the attribute whose value will be overwritten.\\nThe value of the property will become the new value of the attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\\nFor example, to change the `txId` attribute to the uppercase version of its current value, add a property named `txId` with a value of `${txId:toUpper()}`\\n\",\n+                                \"description\": \"Overwrite a FlowFile attribute with a new value\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"This Processor sets the FlowFile's mime.charset attribute to the detected charset. If unable to detect the charset or the detected MIME type is not of type text/*, the attribute will not be set\",\n-                                \"name\": \"mime.charset\"\n+                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property whose name is `filename` and whose value is the desired filename.\\n\\nFor example, to set the filename to `abc.txt`, add a property named `filename` with a value of `abc.txt`.\\nTo add the `txId` attribute as a prefix to the filename, add a property named `filename` with a value of `${txId}${filename}`.\\nOr, to make the filename more readable, separate the txId from the rest of the filename with a hyphen by using a value of `${txId}-${filename}`.\\n\",\n+                                \"description\": \"Rename a file\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor may write or remove zero or more attributes as described in additional details\",\n+                                \"name\": \"See additional details\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-framework-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-2-6-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Send request header with a key matching the Dynamic Property Key and a value created by evaluating the Attribute Expression Language set in the value of the Dynamic Property.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Header Name\",\n-                                \"value\": \"Attribute Expression Language\"\n-                            },\n-                            {\n-                                \"description\": \"When the HTTP Method is POST, dynamic properties with the property name in the form of post:form:<NAME>, where the <NAME> will be the form data name, will be used to fill out the multipart form parts.  If send message body is false, the flowfile will not be sent, but any other form data will be.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"post:form:<NAME>\",\n-                                \"value\": \"Attribute Expression Language\"\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Timeout\": {\n+                            \"ack.wait.time\": {\n                                 \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP Method\": {\n-                                \"defaultValue\": \"GET\",\n-                                \"description\": \"HTTP request method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS). Arbitrary methods are also supported. Methods other than POST, PUT and PATCH will be sent without a message body.\",\n-                                \"displayName\": \"HTTP Method\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP Method\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP URL\": {\n-                                \"description\": \"HTTP remote URL including a scheme of http or https, as well as a hostname or IP address with optional port and path elements. Any encoding of the URL must be done by the user.\",\n-                                \"displayName\": \"HTTP URL\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP URL\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP/2 Disabled\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"Disable negotiation of HTTP/2 protocol. HTTP/2 requires TLS. HTTP/1.1 protocol supported is required when HTTP/2 is disabled.\",\n-                                \"displayName\": \"HTTP/2 Disabled\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP/2 Disabled\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Body Enabled\": {\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n-                                \"displayName\": \"Request Body Enabled\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Body Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Chunked Transfer-Encoding Enabled\": {\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl.context.service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"kafka\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Commit Offsets\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sending HTTP requests with the Transfer-Encoding Header set to chunked, and disable sending the Content-Length Header. Transfer-Encoding applies to the body in HTTP/1.1 requests as described in RFC 7230 Section 3.3.1\",\n-                                \"displayName\": \"Request Chunked Transfer-Encoding Enabled\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. This value should be false when a PublishKafkaRecord processor is expected to commit the offsets using Exactly Once semantics, and should be reserved for dataflows that are designed to run within Stateless NiFi. See Processor's Usage / Additional Details for more information. Note that setting this value to false can lead to significant data duplication or potentially even data loss if the dataflow is not properly configured.\",\n+                                \"displayName\": \"Commit Offsets\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Chunked Transfer-Encoding Enabled\",\n+                                \"name\": \"Commit Offsets\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Content-Encoding\": {\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Content encoding not applied during transmission\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Content-Encoding applied to request body during transmission. The receiving server must support the selected encoding to avoid request failures.\",\n-                                \"displayName\": \"Request Content-Encoding\",\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Content-Encoding\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Content-Type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Content-Type Header applied to when sending an HTTP request body for PATCH, POST, or PUT methods. The Content-Type defaults to application/octet-stream when not configured.\",\n-                                \"displayName\": \"Request Content-Type\",\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Request Content-Type\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Date Header Enabled\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable sending HTTP Date Header on HTTP requests as described in RFC 7231 Section 7.1.1.2.\",\n-                                \"displayName\": \"Request Date Header Enabled\",\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Date Header Enabled\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"group.id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Digest Authentication Enabled\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n+                            \"header-name-regex\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Request Username\",\n-                                        \"propertyName\": \"Request Username\"\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n-                                \"displayName\": \"Request Digest Authentication Enabled\",\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Digest Authentication Enabled\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Failure Penalization Enabled\": {\n+                            \"honor-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enable penalization of request FlowFiles when receiving HTTP response with a status code between 400 and 499.\",\n-                                \"displayName\": \"Request Failure Penalization Enabled\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Failure Penalization Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"honor-transactions\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Header Attributes Pattern\": {\n-                                \"description\": \"Regular expression that defines which FlowFile attributes to send as HTTP headers in the request. If not defined, no attributes are sent as headers. Dynamic properties will be always be sent as headers. The dynamic property name will be the header key and the dynamic property value, interpreted as Expression Language, will be the header value. Attributes and their values are limited to ASCII characters due to the requirement of the HTTP protocol.\",\n-                                \"displayName\": \"Request Header Attributes Pattern\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Header Attributes Pattern\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Request Multipart Form-Data Filename Enabled\": {\n+                            \"key-attribute-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n+                                \"defaultValue\": \"utf-8\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n-                                        \"propertyName\": \"Request Multipart Form-Data Name\"\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending the FlowFile filename attribute as the filename parameter in the Content-Disposition Header for multipart/form-data HTTP requests.\",\n-                                \"displayName\": \"Request Multipart Form-Data Filename Enabled\",\n+                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Multipart Form-Data Filename Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Multipart Form-Data Name\": {\n+                            \"key-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n+                                        \"displayName\": \"Byte Array\",\n+                                        \"value\": \"byte-array\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"byte-array\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"USE_WRAPPER\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Request Body Enabled\",\n-                                        \"propertyName\": \"Request Body Enabled\"\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending HTTP request body formatted using multipart/form-data and using the form name configured.\",\n-                                \"displayName\": \"Request Multipart Form-Data Name\",\n+                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n+                                \"displayName\": \"Key Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Request Multipart Form-Data Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request OAuth2 Access Token Provider\": {\n-                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n-                                \"displayName\": \"Request OAuth2 Access Token Provider\",\n+                            \"key-record-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"record\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Key Format\",\n+                                        \"propertyName\": \"key-format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n+                                \"displayName\": \"Key Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request OAuth2 Access Token Provider\",\n+                                \"name\": \"key-record-reader\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Request Password\": {\n-                                \"description\": \"The password provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Request Password\",\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Request User-Agent\": {\n-                                \"description\": \"HTTP User-Agent Header applied to requests. RFC 7231 Section 5.5.3 describes recommend formatting.\",\n-                                \"displayName\": \"Request User-Agent\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Request User-Agent\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Username\": {\n-                                \"description\": \"The username provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Request Username\",\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Response Body Attribute Name\": {\n-                                \"description\": \"FlowFile attribute name used to write an HTTP response body for FlowFiles transferred to the Original relationship.\",\n-                                \"displayName\": \"Response Body Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Response Body Attribute Name\",\n+                                \"name\": \"max.poll.records\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Body Attribute Size\": {\n-                                \"defaultValue\": \"256\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n-                                        \"propertyName\": \"Response Body Attribute Name\"\n-                                    }\n-                                ],\n-                                \"description\": \"Maximum size in bytes applied when writing an HTTP response body to a FlowFile attribute. Attributes exceeding the maximum will be truncated.\",\n-                                \"displayName\": \"Response Body Attribute Size\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Body Attribute Size\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Body Ignored\": {\n+                            \"output-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n-                                \"displayName\": \"Response Body Ignored\",\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Body Ignored\",\n+                                \"name\": \"output-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Cache Enabled\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n-                                \"displayName\": \"Response Cache Enabled\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Value Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Cache Enabled\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Response Cache Size\": {\n-                                \"defaultValue\": \"10MB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n-                                        \"propertyName\": \"Response Cache Enabled\"\n-                                    }\n-                                ],\n-                                \"description\": \"Maximum size of HTTP response cache in bytes. Caching responses considers ETag and other headers.\",\n-                                \"displayName\": \"Response Cache Size\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Value Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Cache Size\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Cookie Strategy\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACCEPT_ALL\",\n-                                        \"value\": \"ACCEPT_ALL\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"description\": \"Strategy for accepting and persisting HTTP cookies. Accepting cookies enables persistence across multiple requests.\",\n-                                \"displayName\": \"Response Cookie Strategy\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Cookie Strategy\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Response FlowFile Naming Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile filename attribute will be a random value.\",\n-                                        \"displayName\": \"RANDOM\",\n-                                        \"value\": \"RANDOM\"\n-                                    },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"FlowFile filename attribute will be extracted from the remote URL path. The attribute may contain URL encoded characters. If the path doesn't exist, the attribute will be a random value.\",\n-                                        \"displayName\": \"URL_PATH\",\n-                                        \"value\": \"URL_PATH\"\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"RANDOM\",\n-                                \"description\": \"Determines the strategy used for setting the filename attribute of FlowFiles transferred to the Response relationship.\",\n-                                \"displayName\": \"Response FlowFile Naming Strategy\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response FlowFile Naming Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Response Generation Required\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enable generation and transfer of a FlowFile to the Response relationship regardless of HTTP response received.\",\n-                                \"displayName\": \"Response Generation Required\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Generation Required\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Header Request Attributes Enabled\": {\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enable adding HTTP response headers as attributes to FlowFiles transferred to the Original relationship.\",\n-                                \"displayName\": \"Response Header Request Attributes Enabled\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Header Request Attributes Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Redirects Enabled\": {\n+                            \"separate-by-key\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable following HTTP redirects sent with HTTP 300 series responses as described in RFC 7231 Section 6.4.\",\n-                                \"displayName\": \"Response Redirects Enabled\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Redirects Enabled\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Socket Idle Connections\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Maximum number of idle connections to the HTTP URL.\",\n-                                \"displayName\": \"Socket Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Socket Idle Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Socket Idle Timeout\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"Maximum time to wait before closing idle connections to the HTTP URL.\",\n-                                \"displayName\": \"Socket Idle Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Socket Idle Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Socket Read Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Maximum time to wait for receiving responses from a socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Socket Read Timeout\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Socket Read Timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Socket Write Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Maximum time to wait for write operations while sending requests from a socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Socket Write Timeout\",\n+                            \"topic_type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Socket Write Timeout\",\n+                                \"name\": \"topic_type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Original\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n-                                \"name\": \"Failure\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n-                                \"name\": \"Retry\"\n-                            },\n-                            {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Response\"\n+                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             },\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 400 an 499.\",\n-                                \"name\": \"No Retry\"\n+                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"http\",\n-                            \"https\",\n-                            \"rest\"\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.InvokeHTTP\",\n-                        \"typeDescription\": \"An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. When the HTTP Method is PUT, POST or PATCH, the FlowFile contents are included as the body of the request and FlowFile attributes are converted to HTTP headers, optionally, based on configuration properties.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_6. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The status code that is returned\",\n-                                \"name\": \"invokehttp.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"The status message that is returned\",\n-                                \"name\": \"invokehttp.status.message\"\n-                            },\n-                            {\n-                                \"description\": \"In the instance where the status code received is not a success (2xx) then the response body will be put to the 'invokehttp.response.body' attribute of the request FlowFile.\",\n-                                \"name\": \"invokehttp.response.body\"\n-                            },\n-                            {\n-                                \"description\": \"The original request URL\",\n-                                \"name\": \"invokehttp.request.url\"\n-                            },\n-                            {\n-                                \"description\": \"Duration (in milliseconds) of the HTTP call to the external endpoint\",\n-                                \"name\": \"invokehttp.request.duration\"\n-                            },\n-                            {\n-                                \"description\": \"The URL that was ultimately requested after any redirects were followed\",\n-                                \"name\": \"invokehttp.response.url\"\n-                            },\n-                            {\n-                                \"description\": \"The transaction ID that is returned after reading the response\",\n-                                \"name\": \"invokehttp.tx.id\"\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The DN of the remote server\",\n-                                \"name\": \"invokehttp.remote.dn\"\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.class\"\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.message\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"If the 'Put Response Body In Attribute' property is set then whatever it is set to will become the attribute key and the value would be the body of the HTTP response.\",\n-                                \"name\": \"user-defined\"\n+                                \"description\": \"The topic records are from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -27140,3775 +27989,3502 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Enrichment Record Reader\": {\n-                                \"description\": \"The Record Reader for reading the 'enrichment' FlowFile\",\n-                                \"displayName\": \"Enrichment Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enrichment Record Reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Insertion Record Path\": {\n-                                \"defaultValue\": \"/\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Insert Enrichment Fields\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies where in the 'original' Record the 'enrichment' Record's fields should be inserted. Note that if the RecordPath does not point to any existing field in the original Record, the enrichment will not be inserted.\",\n-                                \"displayName\": \"Insertion Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Insertion Record Path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Join Strategy\": {\n+                            \"Commit Offsets\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The output is a Record that contains two fields: (1) 'original', containing the Record from the original FlowFile and (2) 'enrichment' containing the corresponding Record from the enrichment FlowFile. Records will be correlated based on their index in the FlowFile. If one FlowFile has more Records than the other, a null value will be used.\",\n-                                        \"displayName\": \"Wrapper\",\n-                                        \"value\": \"Wrapper\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The output is derived by evaluating a SQL SELECT statement that allows for two tables: 'original' and 'enrichment'. This allows for SQL JOIN statements to be used in order to correlate the Records of the two FlowFiles, so the index in which the Record is encountered in the FlowFile does not matter.\",\n-                                        \"displayName\": \"SQL\",\n-                                        \"value\": \"SQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The enrichment is joined together with the original FlowFile by placing all fields of the enrichment Record into the corresponding Record from the original FlowFile. Records will be correlated based on their index in the FlowFile.\",\n-                                        \"displayName\": \"Insert Enrichment Fields\",\n-                                        \"value\": \"Insert Enrichment Fields\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Wrapper\",\n-                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n-                                \"displayName\": \"Join Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. Typically, we want this value set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafkaRecord in order to provide Exactly Once semantics. See Processor's Usage / Additional Details for more information.\",\n+                                \"displayName\": \"Commit Offsets\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Join Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Commit Offsets\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum number of Bins\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n-                                \"displayName\": \"Maximum number of Bins\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Original Record Reader\": {\n-                                \"description\": \"The Record Reader for reading the 'original' FlowFile\",\n-                                \"displayName\": \"Original Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Original Record Reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for writing the results. If the Record Writer is configured to inherit the schema from the Record, the schema that it will inherit will be the result of merging both the 'original' record schema and the 'enrichment' record schema.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"SQL\": {\n-                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"The SQL SELECT statement to evaluate. Expression Language may be provided, but doing so may result in poorer performance. Because this Processor is dealing with two FlowFiles at a time, it's also important to understand how attributes will be referenced. If both FlowFiles have an attribute with the same name but different values, the Expression Language will resolve to the value provided by the 'enrichment' FlowFile.\",\n-                                \"displayName\": \"SQL\",\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL\",\n-                                \"required\": true,\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Specifies the maximum amount of time to wait for the second FlowFile once the first arrives at the processor, after which point the first FlowFile will be routed to the 'timeout' relationship.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SQL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"group.id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SQL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n-                                \"name\": \"timeout\"\n-                            },\n-                            {\n-                                \"description\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n-                                \"name\": \"joined\"\n-                            },\n-                            {\n-                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Both of the incoming FlowFiles ('original' and 'enrichment') will be routed to this Relationship. I.e., this is the 'original' version of both of these FlowFiles.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"This Processor will load into heap all FlowFiles that are on its incoming queues. While it loads the FlowFiles themselves, and not their content, the FlowFile attributes can be very memory intensive. Additionally, if the Join Strategy is set to SQL, the SQL engine may require buffering the entire contents of the enrichment FlowFile for each concurrent task. See Processor's Additional Details for more details and for steps on how to mitigate these concerns.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"combine\",\n-                            \"enrichment\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"merge\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"sql\",\n-                            \"streams\",\n-                            \"wrap\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.JoinEnrichment\",\n-                        \"typeDescription\": \"Joins together Records from two different FlowFiles where one FlowFile, the 'original' contains arbitrary records and the second FlowFile, the 'enrichment' contains additional data that should be used to enrich the first. See Additional Details for more information on how to configure this processor and the different use cases that it aims to accomplish.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n                             },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\nLeave the RecordWriter property unset.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog; leave it empty to include all catalogs.\\nSet the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; leave it empty to include all Schemas.\\nSet the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included; leave it empty to include all Tables.\\n\\nConnect the \\\"success\\\" relationship to GenerateTableFetch.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to match the appropriate value for your RDBMS vendor.\\nSet \\\"Table Name\\\" to `${db.table.fullname}`\\nLeave the RecordWriter property unset.\\n\\nConnect the \\\"success\\\" relationship to ExecuteSQLRecord.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nConfigure the \\\"Record Writer\\\" property to specify a Record Writer that is appropriate for the desired output data type.\\nLeave the \\\"SQL select query\\\" unset.\\n\\nConnect the \\\"success\\\" relationship to the next Processor in the flow.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\"\n-                                    }\n-                                ],\n-                                \"description\": \"Perform a full load of a database, retrieving all rows from all tables, or a specific set of tables.\",\n-                                \"keywords\": [\n-                                    \"full load\",\n-                                    \"rdbms\",\n-                                    \"jdbc\",\n-                                    \"database\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"list-db-include-count\": {\n+                            \"honor-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n-                                \"displayName\": \"Include Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-include-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-refresh-interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The amount of time to elapse before resetting the processor state, thereby causing all current tables to be listed. During this interval, the processor may continue to run, but tables that have already been listed will not be re-listed. However new/added tables will be listed as the processor runs. A value of zero means the state will never be automatically reset, the user must Clear State manually.\",\n-                                \"displayName\": \"Refresh Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-refresh-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-catalog\": {\n-                                \"description\": \"The name of a catalog from which to list database tables. The name must match the catalog name as it is stored in the database. If the property is not set, the catalog name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a catalog will be listed.\",\n-                                \"displayName\": \"Catalog\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-catalog\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-db-connection\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n+                                \"displayName\": \"Honor Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-db-connection\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"list-db-tables-name-pattern\": {\n-                                \"description\": \"A pattern for matching tables in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the table name as it is stored in the database. If the property is not set, all tables will be retrieved.\",\n-                                \"displayName\": \"Table Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-name-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-schema-pattern\": {\n-                                \"description\": \"A pattern for matching schemas in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the schema name as it is stored in the database. If the property is not set, the schema name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a schema will be listed.\",\n-                                \"displayName\": \"Schema Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-schema-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-types\": {\n-                                \"defaultValue\": \"TABLE\",\n-                                \"description\": \"A comma-separated list of table types to include. For example, some databases support TABLE and VIEW types. If the property is not set, tables of all types will be returned.\",\n-                                \"displayName\": \"Table Types\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-types\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of tables, the timestamp of the query is stored. This allows the Processor to not re-list tables the next time that the Processor is run. Specifying the refresh interval in the processor properties will indicate that when the processor detects the interval has elapsed, the state will be reset and tables will be re-listed as a result. This processor is meant to be run on the primary node only.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"list\",\n-                            \"sql\",\n-                            \"table\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n-                        \"typeDescription\": \"Generates a set of flow files, each containing attributes corresponding to metadata about a table from a database connection. Once metadata about a table has been fetched, it will not be fetched again until the Refresh Interval (if set) has elapsed, or until state has been manually cleared.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Contains the name of a database table from the connection\",\n-                                \"name\": \"db.table.name\"\n-                            },\n-                            {\n-                                \"description\": \"Contains the name of the catalog to which the table belongs (may be null)\",\n-                                \"name\": \"db.table.catalog\"\n-                            },\n-                            {\n-                                \"description\": \"Contains the name of the schema to which the table belongs (may be null)\",\n-                                \"name\": \"db.table.schema\"\n-                            },\n-                            {\n-                                \"description\": \"Contains the fully-qualifed table name (possibly including catalog, schema, etc.)\",\n-                                \"name\": \"db.table.fullname\"\n-                            },\n-                            {\n-                                \"description\": \"Contains the type of the database table from the connection. Typical types are \\\"TABLE\\\", \\\"VIEW\\\", \\\"SYSTEM TABLE\\\", \\\"GLOBAL TEMPORARY\\\", \\\"LOCAL TEMPORARY\\\", \\\"ALIAS\\\", \\\"SYNONYM\\\"\",\n-                                \"name\": \"db.table.type\"\n-                            },\n-                            {\n-                                \"description\": \"Contains the name of a database table from the connection\",\n-                                \"name\": \"db.table.remarks\"\n                             },\n-                            {\n-                                \"description\": \"Contains the number of rows in the table\",\n-                                \"name\": \"db.table.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\n+                            \"key-attribute-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n+                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n+                                \"displayName\": \"Max Uncommitted Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"max.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n+                                \"displayName\": \"Max Poll Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"name\": \"max.poll.records\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n-                                \"displayName\": \"Port\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Remote Path\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Search Recursively\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"separate-by-key\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n+                                \"displayName\": \"Separate By Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topic Name(s)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"topic_type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Name Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"topic_type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFTP\",\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ftp\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"source\"\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListFTP\",\n-                        \"typeDescription\": \"Performs a listing of the files residing on an FTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchFTP in order to fetch those files.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_6.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname of the FTP Server\",\n-                                \"name\": \"ftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was connected to on the FTP Server\",\n-                                \"name\": \"ftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the user that performed the FTP Listing\",\n-                                \"name\": \"ftp.listing.user\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n+                                \"name\": \"kafka.key\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the source file\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"The name of the file on the FTP Server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n                             },\n                             {\n-                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n+                                \"name\": \"kafka.tombstone\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"Record Metadata Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n+                                        \"displayName\": \"Use Configured Values\",\n+                                        \"value\": \"Use Configured Values\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n+                                        \"displayName\": \"Metadata From Record\",\n+                                        \"value\": \"Metadata From Record\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"defaultValue\": \"Use Configured Values\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n+                                \"displayName\": \"Record Metadata Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"Record Metadata Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include File Attributes\": {\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to include information such as the file's Last Modified Time and Owner as FlowFile Attributes. Depending on the File System being used, gathering this information can be expensive and as a result should be disabled. This is especially true of remote file shares.\",\n-                                \"displayName\": \"Include File Attributes\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include File Attributes\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which files to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"attribute-name-regex\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Directory\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory Location\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Input Directory is located on a local disk. State will be stored locally on each node in the cluster.\",\n-                                        \"displayName\": \"Local\",\n-                                        \"value\": \"Local\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Input Directory is located on a remote system. State will be stored across the cluster so that the listing can be performed on Primary Node Only and another node can pick up where the last node left off, if the Primary Node changes\",\n-                                        \"displayName\": \"Remote\",\n-                                        \"value\": \"Remote\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Local\",\n-                                \"description\": \"Specifies where the Input Directory is located. This is used to determine whether state should be stored locally or across the cluster.\",\n-                                \"displayName\": \"Input Directory Location\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Directory Location\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max.block.ms\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"message-key-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n+                                \"displayName\": \"Message Key Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"message-key-field\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n+                                \"displayName\": \"Partition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"partitioner.class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n+                                        \"displayName\": \"RecordPath Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"publish-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n+                                        \"displayName\": \"Use Content as Record Value\",\n+                                        \"value\": \"USE_VALUE\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n+                                \"displayName\": \"Publish Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"publish-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-node-identifier\": {\n-                                \"defaultValue\": \"${hostname()}\",\n-                                \"description\": \"The configured value will be appended to the cache key so that listing state can be tracked per NiFi node rather than cluster wide when tracking state is scoped to LOCAL. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Node Identifier\",\n+                            \"record-key-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n+                                \"displayName\": \"Record Key Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-node-identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-key-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-listing-time\": {\n-                                \"defaultValue\": \"3 mins\",\n-                                \"description\": \"The maximum amount of time that listing any single directory is expected to take. If the listing for the directory specified by the 'Input Directory' property, or the listing of any subdirectory (if 'Recurse' is set to true) takes longer than this amount of time, a warning bulletin will be generated for each directory listing that exceeds this amount of time.\",\n-                                \"displayName\": \"Max Directory Listing Time\",\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-listing-time\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-operation-time\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum amount of time that any single disk operation is expected to take. If any disk operation takes longer than this amount of time, a warning bulletin will be generated for each operation that exceeds this amount of time.\",\n-                                \"displayName\": \"Max Disk Operation Time\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-operation-time\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-performance-metrics\": {\n-                                \"defaultValue\": \"100000\",\n-                                \"description\": \"If the 'Track Performance' property is set to 'true', this property indicates the maximum number of files whose performance metrics should be held onto. A smaller value for this property will result in less heap utilization, while a larger value may provide more accurate insights into how the disk access operations are performing\",\n-                                \"displayName\": \"Maximum Number of Files to Track\",\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-performance-metrics\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"target-system-timestamp-precision\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n-                                    },\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"transactional-id-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"track-performance\": {\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not the Processor should track the performance of disk access operations. If true, all accesses to disk will be recorded, including the file being accessed, the information being obtained, and how long it takes. This is then logged periodically at a DEBUG level. While the amount of data will be capped, this option may still consume a significant amount of heap (controlled by the 'Maximum Number of Files to Track' property), but it can be very useful for troubleshooting purposes if performance is poor is degraded.\",\n-                                \"displayName\": \"Track Performance\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"track-performance\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.GetFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. Whether the state is stored with a Local or Cluster scope depends on the value of the <Input Directory Location> property.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n+                            \"2.6\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListFile\",\n-                        \"typeDescription\": \"Retrieves a listing of files from the input directory. For each file listed, creates a FlowFile that represents the file so that it can be fetched in conjunction with FetchFile. This Processor is designed to run on Primary Node only in a cluster when 'Input Directory Location' is set to 'Remote'. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all the data. When 'Input Directory Location' is 'Local', the 'Execution' mode can be anything, and synchronization won't happen. Unlike GetFile, this Processor does not delete any data from the local filesystem.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.6 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_6.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on filesystem compared to the Input Directory property. For example, if Input Directory is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3/\\\".\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The absolute.path is set to the absolute path of the file's directory on filesystem. For example, if the Input Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/tmp/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3/\\\".\",\n-                                \"name\": \"absolute.path\"\n-                            },\n-                            {\n-                                \"description\": \"The user that owns the file in filesystem\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group that owns the file in filesystem\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes in the file in filesystem\",\n-                                \"name\": \"file.size\"\n-                            },\n-                            {\n-                                \"description\": \"The permissions for the file in filesystem. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file in filesystem was last modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file in filesystem was last accessed as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file in filesystem was created as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.creationTime\"\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n+                                \"displayName\": \"Acknowledgment Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"File Filter Regex\": {\n-                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n-                                \"displayName\": \"File Filter Regex\",\n+                            \"acks\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n+                                        \"displayName\": \"Guarantee Single Node Delivery\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n+                                        \"displayName\": \"Guarantee Replicated Delivery\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter Regex\",\n-                                \"required\": false,\n+                                \"name\": \"acks\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n+                                \"name\": \"attribute-name-regex\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n+                                \"name\": \"aws.profile.name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"bootstrap.servers\": {\n+                                \"defaultValue\": \"localhost:9092\",\n+                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n+                                \"displayName\": \"Kafka Brokers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                            \"kafka-key\": {\n+                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"kafka-key\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data that is encoded using hexadecimal characters with uppercase letters.\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n-                                \"required\": false,\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n+                                \"displayName\": \"Max Metadata Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"max.block.ms\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n+                                \"displayName\": \"Max Request Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"message-demarcator\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Path Filter Regex\": {\n-                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n-                                \"displayName\": \"Path Filter Regex\",\n+                            \"message-header-encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Message Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"partition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"partitioner.class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n+                                        \"displayName\": \"DefaultPartitioner\",\n+                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n+                                        \"displayName\": \"Expression Language Partitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"name\": \"partitioner.class\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"sasl.kerberos.service.name\": {\n+                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n+                                \"displayName\": \"Kerberos Service Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Remote Path\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Search Recursively\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-256\",\n+                                        \"value\": \"SCRAM-SHA-256\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n+                                        \"displayName\": \"SCRAM-SHA-512\",\n+                                        \"value\": \"SCRAM-SHA-512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Use Compression\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"PLAINTEXT\",\n+                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n+                                \"displayName\": \"Security Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n+                                    }\n+                                ],\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"transactional-id-prefix\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n+                                \"displayName\": \"Use Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchSFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If this attribute is set to 'true', if the processor is not configured with a demarcator and if the FlowFile's content is null, then a tombstone message with zero bytes will be sent to Kafka.\",\n+                                \"name\": \"kafka.tombstone\"\n+                            }\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"2.6\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListSFTP\",\n-                        \"typeDescription\": \"Performs a listing of the files residing on an SFTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchSFTP in order to fetch those files.\",\n+                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.6 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_6.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname of the SFTP Server\",\n-                                \"name\": \"sftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was connected to on the SFTP Server\",\n-                                \"name\": \"sftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the user that performed the SFTP Listing\",\n-                                \"name\": \"sftp.listing.user\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes in the source file\",\n-                                \"name\": \"file.size\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file on the SFTP Server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The fully qualified name of the directory on the SFTP Server from which the file was pulled\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-aws-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"bind-address\": {\n-                                \"description\": \"The address the FTP server should be bound to. If not set (or set to 0.0.0.0), the server binds to all available addresses (i.e. all network interfaces of the host machine).\",\n-                                \"displayName\": \"Bind Address\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bind-address\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"listening-port\": {\n-                                \"defaultValue\": \"2221\",\n-                                \"description\": \"The Port to listen on for incoming connections. On Linux, root privileges are required to use port numbers below 1024.\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"listening-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"If the Username is set, then a password must also be specified. The password provided by the client trying to log in to the FTP server will be checked against this password.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"Specifies the SSL Context Service that can be used to create secure connections. If an SSL Context Service is selected, then a keystore file must also be specified in the SSL Context Service. Without a keystore file, the processor cannot be started successfully.Specifying a truststore file is optional. If a truststore file is specified, client authentication is required (the client needs to send a certificate to the server).Regardless of the selected TLS protocol, the highest available protocol is used for the connection. For example if NiFi is running on Java 11 and TLSv1.2 is selected in the controller service as the preferred TLS Protocol, TLSv1.3 will be used (regardless of TLSv1.2 being selected) because Java 11 supports TLSv1.3.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"aws-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"aws-credentials-provider-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"username\": {\n-                                \"description\": \"The name of the user that is allowed to log in to the FTP server. If a username is provided, a password must also be provided. If no username is specified, anonymous connections will be permitted.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Relationship for successfully received files.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"FTP\",\n-                            \"FTPS\",\n-                            \"ingest\",\n-                            \"listen\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenFTP\",\n-                        \"typeDescription\": \"Starts an FTP server that listens on the specified port and transforms incoming files into FlowFiles. The URI of the service will be ftp://{hostname}:{port}. The default port is 2221.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path pointing to the file's target directory. E.g.: file.txt is uploaded to /Folder1/SubFolder, then the value of the path attribute will be \\\"/Folder1/SubFolder/\\\" (note that it ends with a separator character).\",\n-                                \"name\": \"path\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Authorized DN Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression to apply against the Subject's Distinguished Name of incoming connections. If the Pattern does not match the Subject DN, the the processor will respond with a status of HTTP 403 Forbidden.\",\n-                                \"displayName\": \"Authorized Subject DN Pattern\",\n+                            \"cache-expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n+                                \"displayName\": \"Cache Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authorized DN Pattern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Base Path\": {\n-                                \"defaultValue\": \"contentListener\",\n-                                \"description\": \"Base path for incoming connections\",\n-                                \"displayName\": \"Base Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Base Path\",\n+                                \"name\": \"cache-expiration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP Headers to receive as Attributes (Regex)\": {\n-                                \"description\": \"Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes\",\n-                                \"displayName\": \"HTTP Headers to receive as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Headers to receive as Attributes (Regex)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"HTTP Protocols\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HTTP_1_1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n-                                    }\n-                                ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Listening Port\": {\n-                                \"description\": \"The Port to listen on for incoming connections\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Listening Port\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Data to Receive per Second\": {\n-                                \"description\": \"The maximum amount of data to receive per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n-                                \"displayName\": \"Max Data to Receive per Second\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Data to Receive per Second\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Unconfirmed Flowfile Time\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"The maximum amount of time to wait for a FlowFile to be confirmed before it is removed from the cache\",\n-                                \"displayName\": \"Max Unconfirmed Flowfile Time\",\n+                            \"communications-timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Unconfirmed Flowfile Time\",\n+                                \"name\": \"communications-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Code\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The HTTP return code returned after every HTTP call\",\n-                                \"displayName\": \"Return Code\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Code\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service enables support for HTTPS\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"authorized-issuer-dn-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression to apply against the Issuer's Distinguished Name of incoming connections. If the Pattern does not match the Issuer DN, the processor will respond with a status of HTTP 403 Forbidden.\",\n-                                \"displayName\": \"Authorized Issuer DN Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorized-issuer-dn-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-authentication\": {\n+                            \"region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Inferred based on SSL Context Service properties. The presence of Trust Store properties implies REQUIRED, otherwise NONE is configured.\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Requests the client certificate on handshake and validates if present but does not require it\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Requests the client certificate on handshake and rejects the connection if it is not present and valid\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Does not request the client certificate on handshake\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"description\": \"Client Authentication policy for TLS connections. Required when SSL Context Service configured.\",\n-                                \"displayName\": \"Client Authentication\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"health-check-port\": {\n-                                \"description\": \"The port to listen on for incoming health check requests. If set, it must be different from the Listening Port. Configure this port if the processor is set to use two-way SSL and a load balancer that does not support client authentication for health check requests is used. Only /<base_path>/healthcheck service is available via this port and only GET and HEAD requests are supported. If the processor is set not to use SSL, SSL will not be used on this port, either. If the processor is set to use one-way SSL, one-way SSL will be used on this port. If the processor is set to use two-way SSL, one-way SSL will be used on this port (client authentication not required).\",\n-                                \"displayName\": \"Listening Port for Health Check Requests\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"health-check-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-thread-pool-size\": {\n-                                \"defaultValue\": \"200\",\n-                                \"description\": \"The maximum number of threads to be used by the embedded Jetty server. The value can be set between 8 and 1000. The value of this property affects the performance of the flows and the operating system, therefore the default value should only be changed in justified cases. A value that is less than the default value may be suitable if only a small number of HTTP clients connect to the server. A greater value may be suitable if a large number of HTTP clients are expected to make requests to the server simultaneously.\",\n-                                \"displayName\": \"Maximum Thread Pool Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-thread-pool-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"multipart-read-buffer-size\": {\n-                                \"defaultValue\": \"512 KB\",\n-                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n-                                \"displayName\": \"Multipart Read Buffer Size\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The region of the cloud resources\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-read-buffer-size\",\n+                                \"name\": \"region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"multipart-request-max-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n-                                \"displayName\": \"Multipart Request Max Size\",\n+                            \"schema-registry-name\": {\n+                                \"description\": \"The name of the Schema Registry\",\n+                                \"displayName\": \"Schema Registry Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-request-max-size\",\n+                                \"name\": \"schema-registry-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Relationship for successfully received FlowFiles\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"https\",\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"rest\"\n+                            \"avro\",\n+                            \"aws\",\n+                            \"glue\",\n+                            \"registry\",\n+                            \"schema\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenHTTP\",\n-                        \"typeDescription\": \"Starts an HTTP Server and listens on a given base path to transform incoming requests into FlowFiles. The default URI of the Service will be http://{hostname}:{port}/contentListener. Only HEAD and POST requests are supported. GET, PUT, DELETE, OPTIONS and TRACE will result in an error and the HTTP response status code 405; CONNECT will also result in an error and the HTTP response status code 400. GET is supported on <service_URI>/healthcheck. If the service is available, it returns \\\"200 OK\\\" with the content \\\"OK\\\". The health check functionality can be configured to be accessible via a different port. For details see the documentation of the \\\"Listening Port for health check requests\\\" property.A Record Reader and Record Writer property can be enabled on the processor to process incoming requests as records. Record processing is not allowed for multipart requests and request in FlowFileV3 format (minifi).\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.aws.schemaregistry.AmazonGlueSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry that interacts with the AWS Glue Schema Registry so that those Schemas that are stored in the Glue Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Glue Schema Registry with their names.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n+                                \"requiredPermission\": \"access environment credentials\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client Auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"Access Key\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Access Key ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"Access Key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n-                                \"displayName\": \"Max Number of Worker Threads\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"Assume Role ARN\": {\n+                                \"description\": \"The AWS Role ARN for cross account access. This is used in conjunction with Assume Role Session Name and other Assume Role properties.\",\n+                                \"displayName\": \"Assume Role ARN\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n+                                \"name\": \"Assume Role ARN\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"Assume Role Session Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"The AWS Role Session Name for cross account access. This is used in conjunction with Assume Role ARN.\",\n+                                \"displayName\": \"Assume Role Session Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"Assume Role Session Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"Credentials File\": {\n+                                \"description\": \"Path to a file containing AWS access key and secret key in properties file format.\",\n+                                \"displayName\": \"Credentials File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"Credentials File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"Secret Key\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Secret Access Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Secret Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Session Time\": {\n+                                \"defaultValue\": \"3600\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"Session time for role based session (between 900 and 3600 seconds). This is used in conjunction with Assume Role ARN.\",\n+                                \"displayName\": \"Assume Role Session Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Session Time\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"relp\",\n-                            \"tcp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenRELP\",\n-                        \"typeDescription\": \"Listens for RELP messages being sent to a given port over TCP. Each message will be acknowledged after successfully writing the message to a FlowFile. Each FlowFile will contain data portion of one or more RELP frames. In the case where the RELP frames contain syslog messages, the output of this processor can be sent to a ParseSyslog processor for further processing.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The command of the RELP frames.\",\n-                                \"name\": \"relp.command\"\n-                            },\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"relp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received over.\",\n-                                \"name\": \"relp.port\"\n-                            },\n-                            {\n-                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n-                                \"name\": \"relp.txnr\"\n-                            },\n-                            {\n-                                \"description\": \"The mime.type of the content which is text/plain\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Auth\": {\n+                            \"anonymous-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, uses Anonymous credentials\",\n+                                \"displayName\": \"Use Anonymous Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"anonymous-credentials\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of Syslog events to add to a single FlowFile. If multiple events are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"assume-role-external-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"External ID for cross-account access. This is used in conjunction with Assume Role ARN.\",\n+                                \"displayName\": \"Assume Role External ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-external-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n+                            \"assume-role-proxy-host\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum number of concurrent connections to accept Syslog messages in TCP mode.\",\n-                                \"displayName\": \"Max Number of TCP Connections\",\n+                                \"description\": \"Proxy host for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n+                                \"displayName\": \"Assume Role Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-proxy-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"assume-role-proxy-port\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy port for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n+                                \"displayName\": \"Assume Role Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n+                            \"assume-role-ssl-context-service\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"description\": \"SSL Context Service used when connecting to the STS Endpoint.\",\n+                                \"displayName\": \"Assume Role SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"assume-role-ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between Syslog messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Message Delimiter\",\n+                            \"assume-role-sts-endpoint\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"The default AWS Security Token Service (STS) endpoint (\\\"sts.amazonaws.com\\\") works for all accounts that are not for China (Beijing) region or GovCloud. You only need to set this property to \\\"sts.cn-north-1.amazonaws.com.cn\\\" when you are requesting session credentials for services in China(Beijing) region or to \\\"sts.us-gov-west-1.amazonaws.com\\\" for GovCloud.\",\n+                                \"displayName\": \"Assume Role STS Endpoint Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-endpoint\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Parse Messages\": {\n+                            \"assume-role-sts-region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates if the processor should parse the Syslog messages. If set to false, each outgoing FlowFile will only contain the sender, protocol, and port, and no additional attributes.\",\n-                                \"displayName\": \"Parse Messages\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"The AWS Security Token Service (STS) region\",\n+                                \"displayName\": \"Assume Role STS Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Parse Messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-region\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"assume-role-sts-signer-override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWS4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"The AWS STS library uses Signature Version 4 by default. This property allows you to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Assume Role STS Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-signer-override\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive Syslog messages. Adjust this value appropriately based on the expected size of the incoming Syslog messages. When UDP is selected each buffer will hold one Syslog message. When TCP is selected messages are read from an incoming connection until the buffer is full, or the connection is closed. \",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n+                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n+                            \"custom-signer-module-location\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n+                                        \"propertyName\": \"assume-role-sts-signer-override\"\n                                     }\n                                 ],\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"socket-keep-alive\": {\n+                            \"default-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not to have TCP socket keep alive turned on. Timing details depend on operating system properties.\",\n-                                \"displayName\": \"Socket Keep Alive\",\n+                                \"description\": \"If true, uses the Default Credential chain, including EC2 instance profiles or roles, environment variables, default user credentials, etc.\",\n+                                \"displayName\": \"Use Default Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"socket-keep-alive\",\n-                                \"required\": true,\n+                                \"name\": \"default-credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"profile-name\": {\n+                                \"description\": \"The AWS profile name for credentials from the profile configuration file.\",\n+                                \"displayName\": \"Profile Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"profile-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Syslog messages that match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-aws-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n                             {\n-                                \"description\": \"Syslog messages that do not match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n-                                \"name\": \"invalid\"\n+                                \"artifact\": \"nifi-aws-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.AwsCredentialsProviderService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"aws\",\n+                            \"credentials\",\n+                            \"provider\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                        \"typeDescription\": \"Listens for Syslog messages being sent to a given port over TCP or UDP. Incoming messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The format of each message is: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If an incoming messages matches one of these patterns, the message will be parsed and the individual pieces will be placed in FlowFile attributes, with the original message in the content of the FlowFile. If an incoming message does not match one of these patterns it will not be parsed and the syslog.valid attribute will be set to false with the original message in the content of the FlowFile. Valid messages will be transferred on the success relationship, and invalid messages will be transferred on the invalid relationship.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n-                            },\n-                            {\n-                                \"description\": \"An indicator of whether this message matched the expected formats. If this value is false, the other attributes will be empty and only the original message will be available in the content.\",\n-                                \"name\": \"syslog.valid\"\n-                            },\n-                            {\n-                                \"description\": \"The protocol over which the Syslog message was received.\",\n-                                \"name\": \"syslog.protocol\"\n-                            },\n-                            {\n-                                \"description\": \"The port over which the Syslog message was received.\",\n-                                \"name\": \"syslog.port\"\n-                            },\n-                            {\n-                                \"description\": \"The mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Amazon Web Services processors. Uses default credentials without configuration. Default credentials support EC2 instance profile/role, default user profile, environment variables, etc. Additional options include access key / secret key pairs, credentials file, named profile, and assume role credentials.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client Auth\": {\n+                            \"encryption-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"No encryption.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Use server-side, S3-managed encryption.\",\n+                                        \"displayName\": \"Server-side S3\",\n+                                        \"value\": \"SSE_S3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Use server-side, KMS key to perform encryption.\",\n+                                        \"displayName\": \"Server-side KMS\",\n+                                        \"value\": \"SSE_KMS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use server-side, customer-supplied key to perform encryption.\",\n+                                        \"displayName\": \"Server-side Customer Key\",\n+                                        \"value\": \"SSE_C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use client-side, KMS key to perform encryption.\",\n+                                        \"displayName\": \"Client-side KMS\",\n+                                        \"value\": \"CSE_KMS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use client-side, customer-supplied key to perform encryption.\",\n+                                        \"displayName\": \"Client-side Customer Key\",\n+                                        \"value\": \"CSE_C\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n-                                \"displayName\": \"Max Number of Worker Threads\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Strategy to use for S3 data encryption and decryption.\",\n+                                \"displayName\": \"Encryption Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n+                                \"name\": \"encryption-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"key-id-or-key-material\": {\n+                                \"description\": \"For None and Server-side S3: not used. For Server-side KMS and Client-side KMS: the KMS Key ID must be configured. For Server-side Customer Key and Client-side Customer Key: the Key Material must be specified in Base64 encoded form. In case of Server-side Customer Key, the key must be an AES-256 key. In case of Client-side Customer Key, it can be an AES-256, AES-192 or AES-128 key.\",\n+                                \"displayName\": \"Key ID or Key Material\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"idle-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The amount of time a client's connection will remain open if no data is received. The default of 0 seconds will leave connections open until they are closed by the client.\",\n-                                \"displayName\": \"Idle Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"idle-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-receiving-threads\": {\n-                                \"description\": \"This property is deprecated and no longer used.\",\n-                                \"displayName\": \"Max Number of Receiving Message Handler Threads\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-receiving-threads\",\n+                                \"name\": \"key-id-or-key-material\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"pool-receive-buffers\": {\n+                            \"kms-region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"True\",\n-                                \"description\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n-                                \"displayName\": \"Pool Receive Buffers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pool-receive-buffers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"listen\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenTCP\",\n-                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a line separator as the message demarcator. The default behavior is for each message to produce a single FlowFile, however this can be controlled by increasing the Batch Size to a larger value for higher throughput. The Receive Buffer Size must be set as large as the largest messages expected to be received, meaning if every 100kb there is a line separator, then the Receive Buffer Size must be greater than 100kb. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"tcp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"tcp.port\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.issuer.dn\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.subject.dn\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-auth\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The Region of the AWS Key Management Service. Only used in case of Client-side KMS.\",\n+                                \"displayName\": \"KMS Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-auth\",\n+                                \"name\": \"kms-region\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"max-number-tcp-connections\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"The maximum number of concurrent TCP connections to accept. In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection.\",\n-                                \"displayName\": \"Max Number of TCP Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-number-tcp-connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-size-socket-buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-aws-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"aws\",\n+                            \"decrypt\",\n+                            \"decryption\",\n+                            \"encrypt\",\n+                            \"encryption\",\n+                            \"key\",\n+                            \"s3\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.encryption.StandardS3EncryptionService\",\n+                        \"typeDescription\": \"Adds configurable encryption to S3 Put and S3 Fetch operations.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-size-socket-buffer\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait before timing out when reading from a connection.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reader-error-handling-strategy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transfers any records already received and closes the connection.\",\n-                                        \"displayName\": \"Transfer\",\n-                                        \"value\": \"Transfer\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Discards any records already received and closes the connection.\",\n-                                        \"displayName\": \"Discard\",\n-                                        \"value\": \"Discard\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Transfer\",\n-                                \"description\": \"Indicates how to deal with an error while reading the next record from a connection, when previous records have already been read from the connection.\",\n-                                \"displayName\": \"Read Error Strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reader-error-handling-strategy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"record-batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of records to write to a single FlowFile.\",\n-                                \"displayName\": \"Record Batch Size\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"S3\",\n+                            \"file\",\n+                            \"resource\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.service.S3FileResourceService\",\n+                        \"typeDescription\": \"Provides an Amazon Web Services (AWS) S3 file resource for other components.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"aws-communications-timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-batch-size\",\n+                                \"name\": \"aws-communications-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"aws-credentials-provider-service\": {\n+                                \"description\": \"Service used to obtain an Amazon Web Services Credentials Provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"aws-credentials-provider-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"aws-region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"aws-region\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                            \"aws-ssl-context-service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"aws-ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"secret-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression matching on Secret Name that identifies Secrets whose parameters should be fetched. Any secrets whose names do not match this pattern will not be fetched.\",\n+                                \"displayName\": \"Secret Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-name-pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"record\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\n+                            \"aws\",\n+                            \"manager\",\n+                            \"secrets\",\n+                            \"secretsmanager\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenTCPRecord\",\n-                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a configured record reader, and writes the records to a flow file using a configured record writer. The type of record reader selected will determine how clients are expected to send data. For example, when using a Grok reader to read logs, a client can keep an open connection and continuously stream data, but when using an JSON reader, the client cannot send an array of JSON documents and then send another array on the same connection, as the reader would be in a bad state at that point. Records will be read from the connection in blocking mode, and will timeout according to the Read Timeout specified in the processor. If the read times out, or if any other error is encountered when reading, the connection will be closed, and any records read up to that point will be handled according to the configured Read Error Strategy (Discard or Transfer). In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The host that sent the data.\",\n-                                \"name\": \"tcp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The port that the processor accepted the connection on.\",\n-                                \"name\": \"tcp.port\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.issuer.dn\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.subject.dn\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.parameter.aws.AwsSecretsManagerParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from AWS SecretsManager.  Each secret becomes a Parameter group, which can map to a Parameter Context, with key/value pairs in the secret mapping to Parameters in the group.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -30916,168 +31492,448 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows dimension name/value pairs to be added to the metric. AWS supports a maximum of 10 dimensions.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Dimension Name\",\n+                                \"value\": \"Dimension Value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Batch Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n-                                \"displayName\": \"Max Batch Size\",\n+                            \"MetricName\": {\n+                                \"description\": \"The name of the metric\",\n+                                \"displayName\": \"Metric Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"MetricName\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"Namespace\": {\n+                                \"description\": \"The namespace for the metric data for CloudWatch\",\n+                                \"displayName\": \"Namespace\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Namespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n-                                \"displayName\": \"Batching Message Delimiter\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Timestamp\": {\n+                                \"description\": \"A point in time expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC. If not specified, the default value is set to the time the metric data was received\",\n+                                \"displayName\": \"Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Timestamp\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"Unit\": {\n+                                \"description\": \"The unit of the metric. (e.g Seconds, Bytes, Megabytes, Percent, Count,  Kilobytes/Second, Terabits/Second, Count/Second) For details see http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html\",\n+                                \"displayName\": \"Unit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Unit\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"Value\": {\n+                                \"description\": \"The value for the metric. Must be a double\",\n+                                \"displayName\": \"Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"maximum\": {\n+                                \"description\": \"The maximum value of the sample set. Must be a double\",\n+                                \"displayName\": \"Maximum\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"maximum\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"minimum\": {\n+                                \"description\": \"The minimum value of the sample set. Must be a double\",\n+                                \"displayName\": \"Minimum\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"minimum\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Sending Host\": {\n-                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host\",\n+                            \"sampleCount\": {\n+                                \"description\": \"The number of samples used for the statistic set. Must be a double\",\n+                                \"displayName\": \"Sample Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sending Host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sampleCount\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Sending Host Port\": {\n-                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host Port\",\n+                            \"sum\": {\n+                                \"description\": \"The sum of values for the sample set. Must be a double\",\n+                                \"displayName\": \"Sum\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sending Host Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sum\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"source\",\n-                            \"udp\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"cloudwatch\",\n+                            \"metrics\",\n+                            \"publish\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenUDP\",\n-                        \"typeDescription\": \"Listens for Datagram Packets on a given port. The default behavior produces a FlowFile per datagram, however for higher throughput the Max Batch Size property may be increased to specify the number of datagrams to batch together in a single FlowFile. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.cloudwatch.PutCloudWatchMetric\",\n+                        \"typeDescription\": \"Publishes metrics to Amazon CloudWatch. Metric can be either a single value, or a StatisticSet comprised of minimum, maximum, sum and sample count.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"udp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"udp.port\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31086,212 +31942,518 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the received data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"Batch items for each request (between 1 and 50)\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The items to be retrieved in one batch\",\n+                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"Batch items for each request (between 1 and 50)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\n+                            \"Hash Key Name\": {\n+                                \"description\": \"The hash key name of the item\",\n+                                \"displayName\": \"Hash Key Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Hash Key Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n+                            \"Hash Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n+                                \"description\": \"The hash key value of the item\",\n+                                \"displayName\": \"Hash Key Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hash Key Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of datagrams to write as records to a single FlowFile. The Batch Size will only be reached when data is coming in more frequently than the Poll Timeout.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Hash Key Value Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The hash key value type of the item\",\n+                                \"displayName\": \"Hash Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n+                                \"name\": \"Hash Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"poll-timeout\": {\n-                                \"defaultValue\": \"50 ms\",\n-                                \"description\": \"The amount of time to wait when polling the internal queue for more datagrams. If no datagrams are found after waiting for the configured timeout, then the processor will emit whatever records have been obtained up to that point.\",\n-                                \"displayName\": \"Poll Timeout\",\n+                            \"Range Key Name\": {\n+                                \"description\": \"The range key name of the item\",\n+                                \"displayName\": \"Range Key Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Range Key Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Range Key Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Range Key Value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Value Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The range key value type of the item\",\n+                                \"displayName\": \"Range Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-timeout\",\n+                                \"name\": \"Range Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading the content of incoming datagrams.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a flow file.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"sending-host\": {\n-                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host\",\n+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sending-host\",\n-                                \"required\": false,\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sending-host-port\": {\n-                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n-                                \"displayName\": \"Sending Host Port\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sending-host-port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Items hash key value\",\n+                                \"name\": \"  dynamodb.item.hash.key.value\"\n+                            },\n+                            {\n+                                \"description\": \"Items range key value\",\n+                                \"name\": \"  dynamodb.item.range.key.value\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a datagram cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"record\",\n-                            \"source\",\n-                            \"udp\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Delete\",\n+                            \"DynamoDB\",\n+                            \"Remove\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenUDPRecord\",\n-                        \"typeDescription\": \"Listens for Datagram Packets on a given port and reads the content of each datagram using the configured Record Reader. Each record will then be written to a flow file using the configured Record Writer. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                        \"typeDescription\": \"Deletes a document from DynamoDB based on hash and range key. The key can be string or number. The request requires all the primary keys for the operation (hash or hash and range key)\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"udp.sender\"\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"udp.port\"\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n                             },\n                             {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n                             },\n                             {\n-                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31304,214 +32466,528 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attributes to Ignore\": {\n-                                \"description\": \"A comma-separated list of Attributes to ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore by Regular Expression` is modified. There's an OR relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Ignore\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Ignore\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Batch items for each request (between 1 and 50)\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The items to be retrieved in one batch\",\n+                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Batch items for each request (between 1 and 50)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Attributes to Log\": {\n-                                \"description\": \"A comma-separated list of Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log by Regular Expression` is modified. There's an AND relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Log\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Log\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log FlowFile Properties\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not to log FlowFile \\\"properties\\\", such as Entry Date, Lineage Start Date, and content size\",\n-                                \"displayName\": \"Log FlowFile Properties\",\n+                            \"Hash Key Name\": {\n+                                \"description\": \"The hash key name of the item\",\n+                                \"displayName\": \"Hash Key Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log FlowFile Properties\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hash Key Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Level\": {\n+                            \"Hash Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n+                                \"description\": \"The hash key value of the item\",\n+                                \"displayName\": \"Hash Key Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hash Key Value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hash Key Value Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"trace\",\n-                                        \"value\": \"trace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"debug\",\n-                                        \"value\": \"debug\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"info\",\n-                                        \"value\": \"info\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"error\",\n-                                        \"value\": \"error\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the Attributes\",\n-                                \"displayName\": \"Log Level\",\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The hash key value type of the item\",\n+                                \"displayName\": \"Hash Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log Level\",\n+                                \"name\": \"Hash Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Payload\": {\n+                            \"Json Document attribute\": {\n+                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n+                                \"displayName\": \"Json Document attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Json Document attribute\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Name\": {\n+                                \"description\": \"The range key name of the item\",\n+                                \"displayName\": \"Range Key Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Range Key Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Range Key Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Range Key Value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Value Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n-                                \"displayName\": \"Log Payload\",\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The range key value type of the item\",\n+                                \"displayName\": \"Range Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log Payload\",\n+                                \"name\": \"Range Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log prefix\": {\n-                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogAttribute processors.\",\n-                                \"displayName\": \"Log prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Log prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Format\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Each FlowFile attribute will be logged using a single line for the attribute name and another line for the attribute value. This format is often most advantageous when looking at the attributes of a single FlowFile.\",\n-                                        \"displayName\": \"Line per Attribute\",\n-                                        \"value\": \"Line per Attribute\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"All FlowFile attribute names and values will be logged on a single line. This format is often most advantageous when comparing logs from multiple FlowFiles.\",\n-                                        \"displayName\": \"Single Line\",\n-                                        \"value\": \"Single Line\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Line per Attribute\",\n-                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n-                                \"displayName\": \"Output Format\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Format\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-ignore-regex\": {\n-                                \"description\": \"A regular expression indicating the Attributes to Ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore` is modified. There's an OR relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Ignore by Regular Expression\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-ignore-regex\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attributes-to-log-regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A regular expression indicating the Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log` is modified. There's an AND relationship between the two properties.\",\n-                                \"displayName\": \"Attributes to Log by Regular Expression\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-log-regex\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the CharacterSet to use\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Items hash key value\",\n+                                \"name\": \"  dynamodb.item.hash.key.value\"\n+                            },\n+                            {\n+                                \"description\": \"Items range key value\",\n+                                \"name\": \"  dynamodb.item.range.key.value\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to not found relationship if key not found in the table\",\n+                                \"name\": \"not found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"DynamoDB\",\n+                            \"Fetch\",\n+                            \"Get\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LogAttribute\",\n-                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                        \"typeDescription\": \"Retrieves a document from DynamoDB based on hash and range key.  The key can be string or number.For any get request all the primary keys are required (hash or hash and range based on the table keys).A Json Document ('Map') attribute of the DynamoDB item is read into the content of the FlowFile.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31524,433 +33000,545 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"log-level\": {\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the message: [trace, debug, info, warn, error]\",\n-                                \"displayName\": \"Log Level\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"log-level\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Batch items for each request (between 1 and 50)\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The items to be retrieved in one batch\",\n+                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Batch items for each request (between 1 and 50)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Character set of document\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character set of data in the document\",\n+                                \"displayName\": \"Character set of document\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character set of document\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"log-message\": {\n-                                \"description\": \"The log message to emit\",\n-                                \"displayName\": \"Log message\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"log-message\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"log-prefix\": {\n-                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogMessage processors.\",\n-                                \"displayName\": \"Log prefix\",\n+                            \"Hash Key Name\": {\n+                                \"description\": \"The hash key name of the item\",\n+                                \"displayName\": \"Hash Key Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hash Key Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hash Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n+                                \"description\": \"The hash key value of the item\",\n+                                \"displayName\": \"Hash Key Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"log-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Hash Key Value\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n-                        \"typeDescription\": \"Emits a log message at the specified log level\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a FlowFile attribute specified by the dynamic property's key with the value found in the lookup service using the the dynamic property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the attribute to add to the FlowFile\",\n-                                \"value\": \"The name of the key or property to retrieve from the lookup service\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"include-empty-values\": {\n+                            },\n+                            \"Hash Key Value Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Include null or blank values for keys that are null or blank\",\n-                                \"displayName\": \"Include Empty Values\",\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The hash key value type of the item\",\n+                                \"displayName\": \"Hash Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-empty-values\",\n+                                \"name\": \"Hash Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-service\": {\n-                                \"description\": \"The lookup service to use for attribute lookups\",\n-                                \"displayName\": \"Lookup Service\",\n+                            \"Json Document attribute\": {\n+                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n+                                \"displayName\": \"Json Document attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Json Document attribute\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n-                                \"name\": \"unmatched\"\n+                            \"Range Key Name\": {\n+                                \"description\": \"The range key name of the item\",\n+                                \"displayName\": \"Range Key Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Range Key Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"FlowFiles with matching lookups are routed to this relationship\",\n-                                \"name\": \"matched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"lookup\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n-                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A RecordPath that points to the field whose value will be looked up in the configured Lookup Service\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Value To Lookup\",\n-                                \"value\": \"Valid Record Path\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Root Record Path\": {\n-                                \"description\": \"A RecordPath that points to a child Record within each of the top-level Records in the FlowFile. If specified, the additional RecordPath properties will be evaluated against this child Record instead of the top-level Record. This allows for performing enrichment against multiple child Records within a single top-level Record.\",\n-                                \"displayName\": \"Root Record Path\",\n+                            \"Range Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Range Key Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Root Record Path\",\n+                                \"name\": \"Range Key Value\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-service\": {\n-                                \"description\": \"The Lookup Service to use in order to lookup a value in each Record\",\n-                                \"displayName\": \"Lookup Service\",\n+                            \"Range Key Value Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The range key value type of the item\",\n+                                \"displayName\": \"Range Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-path-lookup-miss-result-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached.Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"record-path-lookup-miss-result-cache-size\",\n+                                \"name\": \"Range Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-update-strategy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The \\\"Result RecordPath\\\" property will be ignored and the lookup service must be a single simple key lookup service. Every dynamic property value should be a record path. For each dynamic property, the value contained in the field corresponding to the record path will be used as the key in the Lookup Service and the value returned by the Lookup Service will be used to replace the existing value. It is possible to configure multiple dynamic properties to replace multiple values in one execution. This strategy only supports simple types replacements (strings, integers, etc).\",\n-                                        \"displayName\": \"Replace Existing Values\",\n-                                        \"value\": \"replace-existing-values\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"The \\\"Result RecordPath\\\" property will be used to determine which part of the record should be updated with the value returned by the Lookup Service\",\n-                                        \"displayName\": \"Use \\\"Result RecordPath\\\" Property\",\n-                                        \"value\": \"use-property\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"use-property\",\n-                                \"description\": \"This property defines the strategy to use when updating the record with the value returned by the Lookup Service.\",\n-                                \"displayName\": \"Record Update Strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-update-strategy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"result-contents\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The entire Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n-                                        \"displayName\": \"Insert Entire Record\",\n-                                        \"value\": \"insert-entire-record\"\n-                                    },\n-                                    {\n-                                        \"description\": \"All of the fields in the Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n-                                        \"displayName\": \"Insert Record Fields\",\n-                                        \"value\": \"record-fields\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"insert-entire-record\",\n-                                \"description\": \"When a result is obtained that contains a Record, this property determines whether the Record itself is inserted at the configured path or if the contents of the Record (i.e., the sub-fields) will be inserted at the configured path.\",\n-                                \"displayName\": \"Record Result Contents\",\n+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"result-contents\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"result-record-path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"use-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Record Update Strategy\",\n-                                        \"propertyName\": \"record-update-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A RecordPath that points to the field whose value should be updated with whatever value is returned from the Lookup Service. If not specified, the value that is returned from the Lookup Service will be ignored, except for determining whether the FlowFile should be routed to the 'matched' or 'unmatched' Relationship.\",\n-                                \"displayName\": \"Result RecordPath\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"result-record-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"routing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Records will be routed to a 'success' Relationship regardless of whether or not there is a match in the configured Lookup Service\",\n-                                        \"displayName\": \"Route to 'success'\",\n-                                        \"value\": \"route-to-success\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records will be routed to either a 'matched' or an 'unmatched' Relationship depending on whether or not there was a match in the configured Lookup Service. A single input FlowFile may result in two different output FlowFiles. If the given Record Paths evaluate such that multiple sub-records are evaluated, the parent Record will be routed to 'unmatched' unless all sub-records match.\",\n-                                        \"displayName\": \"Route to 'matched' or 'unmatched'\",\n-                                        \"value\": \"route-to-matched-unmatched\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"route-to-success\",\n-                                \"description\": \"Specifies how to route records after a Lookup has completed\",\n-                                \"displayName\": \"Routing Strategy\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Items hash key value\",\n+                                \"name\": \"  dynamodb.item.hash.key.value\"\n+                            },\n+                            {\n+                                \"description\": \"Items range key value\",\n+                                \"name\": \"  dynamodb.item.range.key.value\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n-                            \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n-                            \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\"\n+                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All records will be sent to this Relationship if configured to do so, unless a failure occurs\",\n+                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be enriched, the unchanged FlowFile will be routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"csv\",\n-                            \"database\",\n-                            \"db\",\n-                            \"enrichment\",\n-                            \"filter\",\n-                            \"json\",\n-                            \"logs\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"route\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"DynamoDB\",\n+                            \"Insert\",\n+                            \"Put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupRecord\",\n-                        \"typeDescription\": \"Extracts one or more fields from a Record and looks up a value for those fields in a LookupService. If a result is returned by the LookupService, that result is optionally added to the Record. In this case, the processor functions as an Enrichment processor. Regardless, the Record is then routed to either the 'matched' relationship or 'unmatched' relationship (if the 'Routing Strategy' property is configured to do so), indicating whether or not a result was returned by the LookupService, allowing the processor to also function as a Routing processor. The \\\"coordinates\\\" to use for looking up a value in the Lookup Service are defined by adding a user-defined property. Each property that is added will have an entry added to a Map, where the name of the property becomes the Map Key and the value returned by the RecordPath becomes the value for that key. If multiple values are returned by the RecordPath, then the Record will be routed to the 'unmatched' relationship (or 'success', depending on the 'Routing Strategy' property's configuration). If one or more fields match the Result RecordPath, all fields that match will be updated. If there is no match in the configured LookupService, then no fields will be updated. I.e., it will not overwrite an existing value in the Record with a null value. Please note, however, that if the results returned by the LookupService are not accounted for in your schema (specifically, the schema that is configured for your Record Writer) then the fields will not be written out to the FlowFile.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n+                        \"typeDescription\": \"Puts a document from DynamoDB based on hash and range key.  The table can have either hash and range or hash key alone. Currently the keys supported are string and number and value can be json document. In case of hash and range keys both key are required for the operation. The FlowFile content must be JSON. FlowFile content is mapped to the specified Json Document attribute in the DynamoDB item.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n+                            },\n+                            {\n+                                \"description\": \"IO exception message on creating item\",\n+                                \"name\": \"dynamodb.item.io.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31963,674 +33551,551 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n-                                        \"displayName\": \"Keep Only Common Attributes\",\n-                                        \"value\": \"Keep Only Common Attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n-                                        \"displayName\": \"Keep All Unique Attributes\",\n-                                        \"value\": \"Keep All Unique Attributes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Keep Only Common Attributes\",\n-                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n-                                \"displayName\": \"Attribute Strategy\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compression Level\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored\",\n-                                \"displayName\": \"Compression Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Correlation Attribute Name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"If specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n-                                \"displayName\": \"Correlation Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Correlation Attribute Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Delimiter Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"No Header, Footer, or Demarcator will be used\",\n-                                        \"displayName\": \"Do Not Use Delimiters\",\n-                                        \"value\": \"Do Not Use Delimiters\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"The values of Header, Footer, and Demarcator will be retrieved from the contents of a file\",\n-                                        \"displayName\": \"Filename\",\n-                                        \"value\": \"Filename\"\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"The values of Header, Footer, and Demarcator will be specified as property values\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do Not Use Delimiters\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.\",\n-                                \"displayName\": \"Delimiter Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delimiter Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Demarcator File\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the demarcator to use. If not specified, no demarcator is supplied.\",\n-                                \"displayName\": \"Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Demarcator File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Footer File\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the footer to use. If not specified, no footer is supplied.\",\n-                                \"displayName\": \"Footer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Footer File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Header File\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n-                                \"displayName\": \"Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Header File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Keep Path\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\",\n-                                            \"TAR\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"description\": \"If using the Zip or Tar Merge Format, specifies whether or not the FlowFiles' paths should be included in their entry names.\",\n-                                \"displayName\": \"Keep Path\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Path\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Bin Age\": {\n-                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n-                                \"displayName\": \"Max Bin Age\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Bin Age\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Maximum Group Size\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum.\",\n-                                \"displayName\": \"Maximum Group Size\",\n+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Group Size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Number of Entries\": {\n-                                \"defaultValue\": \"1000\",\n+                            \"partition-key-attribute\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n+                                            \"ByAttribute\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n+                                        \"propertyDisplayName\": \"Partition Key Strategy\",\n+                                        \"propertyName\": \"partition-key-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum number of files to include in a bundle\",\n-                                \"displayName\": \"Maximum Number of Entries\",\n+                                \"description\": \"Specifies the FlowFile attribute that will be used as the value of the partition key when using \\\"Partition by attribute\\\" partition key strategy.\",\n+                                \"displayName\": \"Partition Key Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Number of Entries\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"partition-key-attribute\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum number of Bins\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n-                                \"displayName\": \"Maximum number of Bins\",\n+                            \"partition-key-field\": {\n+                                \"description\": \"Defines the name of the partition key field in the DynamoDB table. Partition key is also known as hash key. Depending on the \\\"Partition Key Strategy\\\" the field value might come from the incoming Record or a generated one.\",\n+                                \"displayName\": \"Partition Key Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"partition-key-field\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Merge Format\": {\n+                            \"partition-key-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single TAR file. The FlowFiles' <path> attribute will be used to create a directory in the TAR file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the TAR file. If a FlowFile has an attribute named <tar.permissions> that is 3 characters, each between 0-7, that attribute will be used as the TAR entry's 'mode'.\",\n-                                        \"displayName\": \"TAR\",\n-                                        \"value\": \"TAR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single ZIP file. The FlowFiles' <path> attribute will be used to create a directory in the ZIP file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the ZIP file. The <Compression Level> property indicates the ZIP compression to use.\",\n-                                        \"displayName\": \"ZIP\",\n-                                        \"value\": \"ZIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 3 FlowFile Stream\",\n-                                        \"displayName\": \"FlowFile Stream, v3\",\n-                                        \"value\": \"FlowFile Stream, v3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 2 FlowFile Stream\",\n-                                        \"displayName\": \"FlowFile Stream, v2\",\n-                                        \"value\": \"FlowFile Stream, v2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 1 FlowFile Package\",\n-                                        \"displayName\": \"FlowFile Tar, v1\",\n-                                        \"value\": \"FlowFile Tar, v1\"\n+                                        \"description\": \"Uses the value of the Record field identified by the \\\"Partition Key Field\\\" property as partition key value.\",\n+                                        \"displayName\": \"Partition By Field\",\n+                                        \"value\": \"ByField\"\n                                     },\n                                     {\n-                                        \"description\": \"The contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Binary Concatenation\",\n-                                        \"value\": \"Binary Concatenation\"\n+                                        \"description\": \"Uses an incoming FlowFile attribute identified by \\\"Partition Key Attribute\\\" as the value of the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n+                                        \"displayName\": \"Partition By Attribute\",\n+                                        \"value\": \"ByAttribute\"\n                                     },\n                                     {\n-                                        \"description\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Avro\",\n-                                        \"value\": \"Avro\"\n+                                        \"description\": \"Uses a generated UUID as value for the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n+                                        \"displayName\": \"Generated UUID\",\n+                                        \"value\": \"Generated\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary Concatenation\",\n-                                \"description\": \"Determines the format that will be used to merge the content.\",\n-                                \"displayName\": \"Merge Format\",\n+                                \"defaultValue\": \"ByField\",\n+                                \"description\": \"Defines the strategy the processor uses to assign partition key value to the inserted Items.\",\n+                                \"displayName\": \"Partition Key Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Merge Format\",\n+                                \"name\": \"partition-key-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Merge Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n-                                        \"displayName\": \"Bin-Packing Algorithm\",\n-                                        \"value\": \"Bin-Packing Algorithm\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier>, <fragment.count>, and <fragment.index>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. All FlowFiles in this group must have a unique value for the \\\"fragment.index\\\" attribute between 0 and the value of the \\\"fragment.count\\\" attribute.\",\n-                                        \"displayName\": \"Defragment\",\n-                                        \"value\": \"Defragment\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Bin-Packing Algorithm\",\n-                                \"description\": \"Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n-                                \"displayName\": \"Merge Strategy\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Merge Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Minimum Group Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The minimum size for the bundle\",\n-                                \"displayName\": \"Minimum Group Size\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Group Size\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Minimum Number of Entries\": {\n-                                \"defaultValue\": \"1\",\n+                            \"sort-key-field\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n+                                            \"ByField\",\n+                                            \"BySequence\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n+                                        \"propertyDisplayName\": \"Sort Key Strategy\",\n+                                        \"propertyName\": \"sort-key-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The minimum number of files to include in a bundle\",\n-                                \"displayName\": \"Minimum Number of Entries\",\n+                                \"description\": \"Defines the name of the sort key field in the DynamoDB table. Sort key is also known as range key.\",\n+                                \"displayName\": \"Sort Key Field\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Number of Entries\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sort-key-field\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Tar Modified Time\": {\n-                                \"defaultValue\": \"${file.lastModifiedTime}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"TAR\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression (e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'.\",\n-                                \"displayName\": \"Tar Modified Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Tar Modified Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mergecontent-metadata-strategy\": {\n+                            \"sort-key-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), the metadata for the first FlowFile in the bin will be set on the output FlowFile.\",\n-                                        \"displayName\": \"Use First Metadata\",\n-                                        \"value\": \"Use First Metadata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values match those of the first FlowFile, any additional metadata will be dropped but the FlowFile will be merged. Any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n-                                        \"displayName\": \"Keep Only Common Metadata\",\n-                                        \"value\": \"Keep Only Common Metadata\"\n+                                        \"description\": \"The processor will not assign sort key to the inserted Items.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n-                                        \"displayName\": \"Do Not Merge Uncommon Metadata\",\n-                                        \"value\": \"Do Not Merge Uncommon Metadata\"\n+                                        \"description\": \"Uses the value of the Record field identified by the \\\"Sort Key Field\\\" property as sort key value.\",\n+                                        \"displayName\": \"Sort By Field\",\n+                                        \"value\": \"ByField\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignores (does not transfer, compare, etc.) any metadata from a FlowFile whose content supports embedded metadata.\",\n-                                        \"displayName\": \"Ignore Metadata\",\n-                                        \"value\": \"Ignore Metadata\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do Not Merge Uncommon Metadata\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Avro\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"The processor will assign a number for every item based on the original record's position in the incoming FlowFile. This will be used as sort key value.\",\n+                                        \"displayName\": \"Generate Sequence\",\n+                                        \"value\": \"BySequence\"\n                                     }\n                                 ],\n-                                \"description\": \"For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.\",\n-                                \"displayName\": \"Metadata Strategy\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Defines the strategy the processor uses to assign sort key to the inserted Items.\",\n+                                \"displayName\": \"Sort Key Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mergecontent-metadata-strategy\",\n+                                \"name\": \"sort-key-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n-                                \"name\": \"segment.original.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n-                                \"name\": \"tar.permissions\"\n+                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n+                                \"name\": \"dynamodb.chunks.processed\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeRecord\",\n-                            \"org.apache.nifi.processors.standard.SegmentContent\"\n+                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The FlowFile containing the merged content\",\n-                                \"name\": \"merged\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"While content is not stored in memory, the FlowFiles' attributes are. The configuration of MergeContent (maximum bin size, maximum group size, maximum bin age, max number of entries) will influence how much memory is used. If merging together many small FlowFiles, a two-stage approach may be necessary in order to avoid excessive use of memory.\",\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"NETWORK\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"archive\",\n-                            \"concatenation\",\n-                            \"content\",\n-                            \"correlation\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"merge\",\n-                            \"stream\",\n-                            \"tar\",\n-                            \"zip\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"DynamoDB\",\n+                            \"Insert\",\n+                            \"Put\",\n+                            \"Record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n-                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n-                        \"useCases\": [\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\",\n+                        \"typeDescription\": \"Inserts items into DynamoDB based on record-oriented data. The record fields are mapped into DynamoDB item fields, including partition and sort keys if set. Depending on the number of records the processor might execute the insert in multiple chunks in order to overcome DynamoDB's limitation on batch writing. This might result partially processed FlowFiles in which case the FlowFile will be transferred to the \\\"unprocessed\\\" relationship with the necessary attribute to retry later without duplicating the already executed inserts.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Demarcator\\\" = \\\"\\\\n\\\" (a newline can be inserted by pressing Shift + Enter)\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n-                                \"description\": \"Concatenate FlowFiles with textual content together in order to create fewer, larger FlowFiles.\",\n-                                \"keywords\": [\n-                                    \"concatenate\",\n-                                    \"bundle\",\n-                                    \"aggregate\",\n-                                    \"bin\",\n-                                    \"merge\",\n-                                    \"combine\",\n-                                    \"smash\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n+                                \"name\": \"dynamodb.chunks.processed\"\n                             },\n                             {\n-                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n-                                \"description\": \"Concatenate FlowFiles with binary content together in order to create fewer, larger FlowFiles.\",\n-                                \"keywords\": [\n-                                    \"concatenate\",\n-                                    \"bundle\",\n-                                    \"aggregate\",\n-                                    \"bin\",\n-                                    \"merge\",\n-                                    \"combine\",\n-                                    \"smash\"\n-                                ],\n-                                \"notes\": \"Not all binary data can be concatenated together. Whether or not this configuration is valid depends on the type of your data.\"\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Defragment\\\"\\n\\\"Merge Format\\\" = the value of Merge Format depends on the desired output format. If the file was previously zipped together and was split apart by UnpackContent,\\n    a Merge Format of \\\"ZIP\\\" makes sense. If it was previously a .tar file, a Merge Format of \\\"TAR\\\" makes sense. If the data is textual, \\\"Binary Concatenation\\\" can be\\n    used to combine the text into a single document.\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the fragments to 'failure'. A reasonable value might be \\\"5 mins\\\"\\n\\nFor textual data, \\\"Demarcator\\\" should be set to a newline (\\\\n), set by pressing Shift+Enter in the UI. For binary data, \\\"Demarcator\\\" should be left blank.\\n\",\n-                                \"description\": \"Reassemble a FlowFile that was previously split apart into smaller FlowFiles by a processor such as SplitText, UnpackContext, SplitRecord, etc.\",\n-                                \"keywords\": [\n-                                    \"reassemble\",\n-                                    \"repack\",\n-                                    \"merge\",\n-                                    \"recombine\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n+                            },\n                             {\n-                                \"description\": \"When more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n                             },\n                             {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n-                                \"name\": \"merge.bin.age\"\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n                             },\n                             {\n-                                \"description\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n-                                \"name\": \"merge.uuid\"\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n                             },\n                             {\n-                                \"description\": \"This processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.\",\n-                                \"name\": \"merge.reason\"\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n+                            },\n+                            {\n+                                \"description\": \"IO exception message on creating item\",\n+                                \"name\": \"dynamodb.item.io.error\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -32640,282 +34105,378 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\n\\nAdd a single additional property. The name of the property should describe the field on which the data is being merged together.\\nThe property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, to merge together data that has the same value for the \\\"productSku\\\" field, add a property named `productSku` with a value of `/productSku`.\\n\\nConnect the \\\"success\\\" Relationship to MergeRecord.\\nAuto-terminate the \\\"original\\\" Relationship.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Maximum Number of Records\\\" property to a value at least as large as the \\\"Minimum Number of Records.\\\" If there is no need to limit the maximum number of\\n    records per file, this number can be set to a value that will never be reached such as `1000000000`.\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\nSet the value of the \\\"Correlation Attribute Name\\\" property to the name of the property that you added in the PartitionRecord Processor. For example, if merging data\\n    based on the \\\"productSku\\\" field, the property in PartitionRecord was named `productSku` so the value of the \\\"Correlation Attribute Name\\\" property should\\n    be `productSku`.\\nSet the \\\"Maximum Number of Bins\\\" property to a value that is at least as large as the different number of values that will be present for the Correlation Attribute.\\n    For example, if you expect 1,000 different SKUs, set this value to at least `1001`. It is not advisable, though, to set the value above 10,000.\\n\\nConnect the 'merged' Relationship to the next component in the flow.\\nAuto-terminate the 'original' Relationship.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.MergeRecord\"\n-                                    }\n-                                ],\n-                                \"description\": \"Combine together many Records that have the same value for a particular field in the data, in order to create a single, larger file\",\n-                                \"keywords\": [\n-                                    \"merge\",\n-                                    \"combine\",\n-                                    \"aggregate\",\n-                                    \"like records\",\n-                                    \"similar data\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n-                                        \"displayName\": \"Keep Only Common Attributes\",\n-                                        \"value\": \"Keep Only Common Attributes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n-                                        \"displayName\": \"Keep All Unique Attributes\",\n-                                        \"value\": \"Keep All Unique Attributes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Keep Only Common Attributes\",\n-                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n-                                \"displayName\": \"Attribute Strategy\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"correlation-attribute-name\": {\n-                                \"description\": \"If specified, two FlowFiles will be binned together only if they have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n-                                \"displayName\": \"Correlation Attribute Name\",\n+                            \"Amazon Kinesis Firehose Delivery Stream Name\": {\n+                                \"description\": \"The name of kinesis firehose delivery stream\",\n+                                \"displayName\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"correlation-attribute-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-bin-age\": {\n-                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n-                                \"displayName\": \"Max Bin Age\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"250\",\n+                                \"description\": \"Batch size for messages (1-500).\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-bin-age\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-bin-size\": {\n-                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum. This is a 'soft limit' in that if a FlowFile is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of bytes in last input FlowFile.\",\n-                                \"displayName\": \"Maximum Bin Size\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-bin-size\",\n-                                \"required\": false,\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-records\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum number of Records to include in a bin. This is a 'soft limit' in that if a FlowFIle is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of records in the last input FlowFile.\",\n-                                \"displayName\": \"Maximum Number of Records\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-records\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.bin.count\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time. This number should not be smaller than the maximum number of concurrent threads for this Processor, or the bins that are created will often consist only of a single incoming FlowFile.\",\n-                                \"displayName\": \"Maximum Number of Bins\",\n+                            \"Max message buffer size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Max message buffer\",\n+                                \"displayName\": \"Max message buffer size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.bin.count\",\n-                                \"required\": true,\n+                                \"name\": \"Max message buffer size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"merge-strategy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n-                                        \"displayName\": \"Bin-Packing Algorithm\",\n-                                        \"value\": \"Bin-Packing Algorithm\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier> and <fragment.count>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. The ordering of the Records that are output is not guaranteed.\",\n-                                        \"displayName\": \"Defragment\",\n-                                        \"value\": \"Defragment\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Bin-Packing Algorithm\",\n-                                \"description\": \"Specifies the algorithm used to merge records. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n-                                \"displayName\": \"Merge Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"merge-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"min-bin-size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size of for the bin\",\n-                                \"displayName\": \"Minimum Bin Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-bin-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"min-records\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The minimum number of records to include in a bin\",\n-                                \"displayName\": \"Minimum Number of Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"min-records\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute indicates how many FlowFiles should be expected in the given bundle.\",\n-                                \"name\": \"fragment.count\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\",\n-                            \"org.apache.nifi.processors.standard.PartitionRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        },\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFile containing the merged records\",\n-                                \"name\": \"merged\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"content\",\n-                            \"correlation\",\n-                            \"event\",\n-                            \"merge\",\n-                            \"record\",\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"firehose\",\n+                            \"kinesis\",\n+                            \"put\",\n                             \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeRecord\",\n-                        \"typeDescription\": \"This Processor merges together multiple record-oriented FlowFiles into a single FlowFile that contains all of the Records of the input FlowFiles. This Processor works by creating 'bins' and then adding FlowFiles to these bins until they are full. Once a bin is full, all of the FlowFiles will be combined into a single output FlowFile, and that FlowFile will be routed to the 'merged' Relationship. A bin will consist of potentially many 'like FlowFiles'. In order for two FlowFiles to be considered 'like FlowFiles', they must have the same Schema (as identified by the Record Reader) and, if the <Correlation Attribute Name> property is set, the same value for the specified attribute. See Processor Usage and Additional Details for more information. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\n\\nConnect the 'merged' Relationship to the next component in the flow. Auto-terminate the 'original' Relationship.\\n\",\n-                                \"description\": \"Combine together many arbitrary Records in order to create a single, larger file\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.kinesis.firehose.PutKinesisFirehose\",\n+                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis Firehose. In order to send data to firehose, the firehose delivery stream name has to be specified.\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The merged FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type indicated by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\n-                            },\n-                            {\n-                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n-                                \"name\": \"merge.bin.age\"\n+                                \"description\": \"Error message on posting message to AWS Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.error.message\"\n                             },\n                             {\n-                                \"description\": \"UUID of the merged FlowFile that will be added to the original FlowFiles attributes\",\n-                                \"name\": \"merge.uuid\"\n+                                \"description\": \"Error code for the message when posting to AWS Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.error.code\"\n                             },\n                             {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n+                                \"description\": \"Record id of the message posted to Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.record.id\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -32923,356 +34484,578 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Override default KCL Configuration ConfigsBuilder properties with required values. Supports setting of values directly on the ConfigsBuilder, such as 'namespace', as well as properties on nested builders. For example, to set configsBuilder.retrievalConfig().maxListShardsRetryAttempts(value), name the property as 'retrievalConfig.maxListShardsRetryAttempts'. Only supports setting of simple property values, e.g. String, int, long and boolean. Does not allow override of KCL Configuration settings handled by non-dynamic processor properties.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Kinesis Client Library (KCL) Configuration property name\",\n+                                \"value\": \"Value to set in the KCL Configuration property\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"End Offset\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"Number of bytes removed at the end of the file.\",\n-                                \"displayName\": \"End Offset\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"End Offset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remove All Content\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n-                                \"displayName\": \"Remove All Content\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove All Content\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Start Offset\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"Number of bytes removed at the beginning of the file.\",\n-                                \"displayName\": \"Start Offset\",\n+                            \"amazon-kinesis-stream-application-name\": {\n+                                \"description\": \"The Kinesis stream reader application name.\",\n+                                \"displayName\": \"Application Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Start Offset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-application-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Processed flowfiles.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"binary\",\n-                            \"discard\",\n-                            \"keep\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ModifyBytes\",\n-                        \"typeDescription\": \"Discard byte range at the start and end or all content of a binary file.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Activity Restored Message\": {\n-                                \"defaultValue\": \"Activity restored at time: ${now():format('yyyy/MM/dd HH:mm:ss')} after being inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n-                                \"description\": \"The message that will be the content of FlowFiles that are sent to 'activity.restored' relationship\",\n-                                \"displayName\": \"Activity Restored Message\",\n+                            },\n+                            \"amazon-kinesis-stream-checkpoint-interval\": {\n+                                \"defaultValue\": \"3 secs\",\n+                                \"description\": \"Interval between Kinesis checkpoints\",\n+                                \"displayName\": \"Checkpoint Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Activity Restored Message\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-checkpoint-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Continually Send Messages\": {\n+                            \"amazon-kinesis-stream-cloudwatch-flag\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will send inactivity indicator continually every Threshold Duration amount of time until activity is restored; if false, will send an indicator only when the flow first becomes inactive\",\n-                                \"displayName\": \"Continually Send Messages\",\n+                                \"description\": \"Whether to report Kinesis usage metrics to CloudWatch.\",\n+                                \"displayName\": \"Report Metrics to CloudWatch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Continually Send Messages\",\n+                                \"name\": \"amazon-kinesis-stream-cloudwatch-flag\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Copy Attributes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n-                                \"displayName\": \"Copy Attributes\",\n+                            \"amazon-kinesis-stream-dynamodb-override\": {\n+                                \"description\": \"DynamoDB override to use non-AWS deployments\",\n+                                \"displayName\": \"DynamoDB Override\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"amazon-kinesis-stream-dynamodb-override\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-failover-timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Kinesis Client Library failover timeout\",\n+                                \"displayName\": \"Failover Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy Attributes\",\n+                                \"name\": \"amazon-kinesis-stream-failover-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Inactivity Message\": {\n-                                \"defaultValue\": \"Lacking activity as of time: ${now():format('yyyy/MM/dd HH:mm:ss')}; flow has been inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n-                                \"description\": \"The message that will be the content of FlowFiles that are sent to the 'inactive' relationship\",\n-                                \"displayName\": \"Inactivity Message\",\n+                            \"amazon-kinesis-stream-graceful-shutdown-timeout\": {\n+                                \"defaultValue\": \"20 secs\",\n+                                \"description\": \"Kinesis Client Library graceful shutdown timeout\",\n+                                \"displayName\": \"Graceful Shutdown Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Inactivity Message\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-graceful-shutdown-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Monitoring Scope\": {\n+                            \"amazon-kinesis-stream-initial-position\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"node\",\n-                                        \"value\": \"node\"\n+                                        \"description\": \"Start reading just after the most recent record in the shard, so that you always read the most recent data in the shard.\",\n+                                        \"displayName\": \"LATEST\",\n+                                        \"value\": \"LATEST\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"cluster\",\n-                                        \"value\": \"cluster\"\n+                                        \"description\": \"Start reading at the last untrimmed record in the shard in the system, which is the oldest data record in the shard.\",\n+                                        \"displayName\": \"TRIM_HORIZON\",\n+                                        \"value\": \"TRIM_HORIZON\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start reading from the position denoted by a specific time stamp, provided in the value Timestamp.\",\n+                                        \"displayName\": \"AT_TIMESTAMP\",\n+                                        \"value\": \"AT_TIMESTAMP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"node\",\n-                                \"description\": \"Specify how to determine activeness of the flow. 'node' means that activeness is examined at individual node separately. It can be useful if DFM expects each node should receive flow files in a distributed manner. With 'cluster', it defines the flow is active while at least one node receives flow files actively. If NiFi is running as standalone mode, this should be set as 'node', if it's 'cluster', NiFi logs a warning message and act as 'node' scope.\",\n-                                \"displayName\": \"Monitoring Scope\",\n+                                \"defaultValue\": \"LATEST\",\n+                                \"description\": \"Initial position to read Kinesis streams.\",\n+                                \"displayName\": \"Initial Stream Position\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Monitoring Scope\",\n+                                \"name\": \"amazon-kinesis-stream-initial-position\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Reporting Node\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"all\",\n-                                        \"value\": \"all\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"primary\",\n-                                        \"value\": \"primary\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n+                            \"amazon-kinesis-stream-position-timestamp\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"cluster\"\n+                                            \"AT_TIMESTAMP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Monitoring Scope\",\n-                                        \"propertyName\": \"Monitoring Scope\"\n+                                        \"propertyDisplayName\": \"Initial Stream Position\",\n+                                        \"propertyName\": \"amazon-kinesis-stream-initial-position\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify which node should send notification flow-files to inactive and activity.restored relationships. With 'all', every node in this cluster send notification flow-files. 'primary' means flow-files will be sent only from a primary node. If NiFi is running as standalone mode, this should be set as 'all', even if it's 'primary', NiFi act as 'all'.\",\n-                                \"displayName\": \"Reporting Node\",\n+                                \"description\": \"Timestamp position in stream from which to start reading Kinesis Records. Required if Initial position to read Kinesis streams. is AT_TIMESTAMP. Uses the Timestamp Format to parse value into a Date.\",\n+                                \"displayName\": \"Stream Position Timestamp\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Node\",\n+                                \"name\": \"amazon-kinesis-stream-position-timestamp\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-record-reader\": {\n+                                \"description\": \"The Record Reader to use for reading received messages. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record will create a FlowFile.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"amazon-kinesis-stream-record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record will create a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"amazon-kinesis-stream-retry-count\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Number of times to retry a Kinesis operation (process record, checkpoint, shutdown)\",\n+                                \"displayName\": \"Retry Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Reset State on Restart\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When the processor gets started or restarted, if set to true, the initial state will always be active. Otherwise, the last reported flow state will be preserved.\",\n-                                \"displayName\": \"Reset State on Restart\",\n+                            \"amazon-kinesis-stream-retry-wait\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"description\": \"Interval between Kinesis operation retries (process record, checkpoint, shutdown)\",\n+                                \"displayName\": \"Retry Wait\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reset State on Restart\",\n+                                \"name\": \"amazon-kinesis-stream-retry-wait\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Threshold Duration\": {\n-                                \"defaultValue\": \"5 min\",\n-                                \"description\": \"Determines how much time must elapse before considering the flow to be inactive\",\n-                                \"displayName\": \"Threshold Duration\",\n+                            \"amazon-kinesis-stream-timestamp-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ss\",\n+                                \"description\": \"Format to use for parsing the Stream Position Timestamp into a Date and converting the Kinesis Record's Approximate Arrival Timestamp into a FlowFile attribute.\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Threshold Duration\",\n+                                \"name\": \"amazon-kinesis-stream-timestamp-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Wait for Activity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When the processor gets started or restarted, if set to true, only send an inactive indicator if there had been activity beforehand. Otherwise send an inactive indicator even if there had not been activity beforehand.\",\n-                                \"displayName\": \"Wait for Activity\",\n+                            \"kinesis-stream-name\": {\n+                                \"description\": \"The name of Kinesis Stream\",\n+                                \"displayName\": \"Amazon Kinesis Stream Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Wait for Activity\",\n+                                \"name\": \"kinesis-stream-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"stateful\": {\n-                            \"description\": \"MonitorActivity stores the last timestamp at each node as state, so that it can examine activity at cluster wide. If 'Copy Attribute' is set to true, then flow file attributes are also persisted. In local scope, it stores last known activity timestamp if the flow is inactive.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"This relationship is used to transfer an Inactivity indicator when no FlowFiles are routed to 'success' for Threshold Duration amount of time\",\n-                                \"name\": \"inactive\"\n-                            },\n-                            {\n-                                \"description\": \"All incoming FlowFiles are routed to success\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n-                                \"name\": \"activity.restored\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Kinesis Client Library is used to create a Worker thread for consumption of Kinesis Records. The Worker is initialised and started when this Processor has been triggered. It runs continually, spawning Kinesis Record Processors as required to fetch Kinesis Records. The Worker Thread (and any child Record Processor threads) are not controlled by the normal NiFi scheduler as part of the Concurrent Thread pool and are not released until this processor is stopped.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"Kinesis Client Library will continually poll for new Records, requesting up to a maximum number of Records/bytes per call. This can result in sustained network usage.\",\n+                                \"resource\": \"NETWORK\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"active\",\n-                            \"activity\",\n-                            \"detection\",\n-                            \"flow\",\n-                            \"inactive\",\n-                            \"monitor\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"consume\",\n+                            \"kinesis\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MonitorActivity\",\n-                        \"typeDescription\": \"Monitors the flow for activity and sends out an indicator when the flow has not had any data for some specified amount of time and again when the flow's activity is restored\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\",\n+                        \"typeDescription\": \"Reads data from the specified AWS Kinesis stream and outputs a FlowFile for every processed Record (raw)  or a FlowFile for a batch of processed records if a Record Reader and Record Writer are configured. At-least-once delivery of all Kinesis Records within the Stream while the processor is running. AWS Kinesis Client Library can take several seconds to initialise before starting to fetch data. Uses DynamoDB for check pointing and CloudWatch (optional) for metrics. Ensure that the credentials provided have access to DynamoDB and CloudWatch (optional) along with Kinesis.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n-                                \"name\": \"inactivityStartMillis\"\n+                                \"description\": \"Partition key of the (last) Kinesis Record read from the Shard\",\n+                                \"name\": \"aws.kinesis.partition.key\"\n                             },\n                             {\n-                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n-                                \"name\": \"inactivityDurationMillis\"\n+                                \"description\": \"Shard ID from which the Kinesis Record was read\",\n+                                \"name\": \"aws.kinesis.shard.id\"\n+                            },\n+                            {\n+                                \"description\": \"The unique identifier of the (last) Kinesis Record within its Shard\",\n+                                \"name\": \"aws.kinesis.sequence.number\"\n+                            },\n+                            {\n+                                \"description\": \"Approximate arrival timestamp of the (last) Kinesis Record read from the stream\",\n+                                \"name\": \"aws.kinesis.approximate.arrival.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer (if configured)\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Number of records written to the FlowFiles by the Record Writer (if configured)\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Record Reader or Record Writer (if configured)\",\n+                                \"name\": \"record.error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33285,262 +35068,392 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"attribute-cache-regex\": {\n-                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n-                                \"displayName\": \"Attribute Cache Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-cache-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to cache release signals in order to release files queued at a corresponding Wait processor\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"release-signal-id\": {\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the release signal cache key\",\n-                                \"displayName\": \"Release Signal Identifier\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-buffer-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specify the maximum number of incoming flow files that can be buffered until signals are notified to cache service. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping signals by signal identifier when multiple incoming flow files share the same signal identifier.\",\n-                                \"displayName\": \"Signal Buffer Count\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"signal-buffer-count\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-counter-delta\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter delta. Specify how much the counter should increase. For example, if multiple signal events are processed at upstream flow in batch oriented way, the number of events processed can be notified with this property at once. Zero (0) has a special meaning, it clears target count back to 0, which is especially useful when used with Wait Releasable FlowFile Count = Zero (0) mode, to provide 'open-close-gate' type of flow control. One (1) can open a corresponding Wait processor, and Zero (0) can negate it as if closing a gate.\",\n-                                \"displayName\": \"Signal Counter Delta\",\n+                            \"amazon-kinesis-stream-partition-key\": {\n+                                \"defaultValue\": \"${kinesis.partition.key}\",\n+                                \"description\": \"The partition key attribute.  If it is not set, a random value is used\",\n+                                \"displayName\": \"Amazon Kinesis Stream Partition Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-delta\",\n-                                \"required\": true,\n+                                \"name\": \"amazon-kinesis-stream-partition-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-counter-name\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter name. Signal counter name is useful when a corresponding Wait processor needs to know the number of occurrences of different types of events, such as success or failure, or destination data source names, etc.\",\n-                                \"displayName\": \"Signal Counter Name\",\n+                            \"kinesis-stream-name\": {\n+                                \"description\": \"The name of Kinesis Stream\",\n+                                \"displayName\": \"Amazon Kinesis Stream Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n+                                \"name\": \"kinesis-stream-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.Wait\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"notify\",\n-                            \"release\",\n-                            \"signal\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Notify\",\n-                        \"typeDescription\": \"Caches a release signal identifier in the distributed cache, optionally along with the FlowFile's attributes.  Any flow files held at a corresponding Wait processor will be released once this signal in the cache is discovered.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n-                                \"name\": \"notified\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can help improve performance by batching many flowfiles together into 1 larger file that is transmitted by InvokeHTTP.\\n\\n    Connect the success relationship of PackageFlowFile to the input of InvokeHTTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"    \\\"HTTP Method\\\" = \\\"POST\\\" to send data to ListenHTTP.\\n    \\\"HTTP URL\\\" should include the hostname, port, and path to the ListenHTTP.\\n    \\\"Request Content-Type\\\" = \\\"${mime.type}\\\" because PackageFlowFile output files have attribute mime.type=application/flowfile-v3.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.InvokeHTTP\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"    \\\"Listening Port\\\" = a unique port number.\\n\\n    ListenHTTP automatically unpacks files that have attribute mime.type=application/flowfile-v3.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that InvokeHTTP sends, then the original 99 FlowFiles will be output by ListenHTTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListenHTTP\"\n-                                    }\n-                                ],\n-                                \"description\": \"Send FlowFile content and attributes from one NiFi instance to another NiFi instance.\",\n-                                \"keywords\": [\n-                                    \"flowfile\",\n-                                    \"attributes\",\n-                                    \"content\",\n-                                    \"ffv3\",\n-                                    \"flowfile-stream-v3\",\n-                                    \"transfer\"\n-                                ],\n-                                \"notes\": \"A Remote Process Group is preferred to send FlowFiles between two NiFi instances, but an alternative is to use PackageFlowFile then InvokeHTTP sending to ListenHTTP.\"\n+                            \"max-message-buffer-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Max message buffer size in Mega-bytes\",\n+                                \"displayName\": \"Max message buffer size (MB)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-message-buffer-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can improve storage efficiency by batching many FlowFiles together into 1 larger file that is stored.\\n\\n    Connect the success relationship to the input of any NiFi egress processor for offline storage.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"    \\\"Packaging Format\\\" = \\\"application/flowfile-v3\\\".\\n\\n    Connect the output of a NiFi ingress processor that reads files stored offline to the input of UnpackContent.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that is read from storage, then the original 99 FlowFiles will be output by UnpackContent.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.UnpackContent\"\n-                                    }\n-                                ],\n-                                \"description\": \"Export FlowFile content and attributes from NiFi to external storage and reimport.\",\n-                                \"keywords\": [\n-                                    \"flowfile\",\n-                                    \"attributes\",\n-                                    \"content\",\n-                                    \"ffv3\",\n-                                    \"flowfile-stream-v3\",\n-                                    \"offline\",\n-                                    \"storage\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"max-batch-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Maximum number of FlowFiles to package into one output FlowFile using a best effort, non guaranteed approach. Multiple input queues can produce unexpected batching behavior.\",\n-                                \"displayName\": \"Maximum Batch Size\",\n+                            \"message-batch-size\": {\n+                                \"defaultValue\": \"250\",\n+                                \"description\": \"Batch size for messages (1-500).\",\n+                                \"displayName\": \"Message Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-batch-size\",\n-                                \"required\": true,\n+                                \"name\": \"message-batch-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\",\n-                            \"org.apache.nifi.processors.standard.UnpackContent\"\n+                            \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFiles that were used to create the package are sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"package\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"kinesis\",\n+                            \"put\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PackageFlowFile\",\n-                        \"typeDescription\": \"This processor will package FlowFile attributes and content into an output FlowFile that can be exported from NiFi and imported back into NiFi, preserving the original attributes and content.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\",\n+                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis. In order to send data to Kinesis, the stream name has to be specified.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The mime.type will be changed to application/flowfile-v3\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Error message on posting message to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Error code for the message when posting to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"Sequence number for the message when posting to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.sequence.number\"\n+                            },\n+                            {\n+                                \"description\": \"Shard id of the message posted to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.shard.id\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33553,204 +35466,386 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ACCEPT_EMPTY_EXTENSIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n-                                \"displayName\": \"Accept empty extensions\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"APPEND_RAW_MESSAGE_TO_JSON\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When using flowfile-content (i.e. JSON output), add the original CEF message to the resulting JSON object. The original message is added as a string to _raw.\",\n-                                \"displayName\": \"Append raw message to JSON\",\n+                            \"Amazon Lambda Name\": {\n+                                \"description\": \"The Lambda Function Name\",\n+                                \"displayName\": \"Amazon Lambda Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n+                                \"name\": \"Amazon Lambda Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"DATETIME_REPRESENTATION\": {\n-                                \"defaultValue\": \"en-US\",\n-                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n-                                \"displayName\": \"DateTime Locale\",\n+                            \"Amazon Lambda Qualifier (version)\": {\n+                                \"defaultValue\": \"$LATEST\",\n+                                \"description\": \"The Lambda Function Version\",\n+                                \"displayName\": \"Amazon Lambda Qualifier (version)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DATETIME_REPRESENTATION\",\n+                                \"name\": \"Amazon Lambda Qualifier (version)\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FIELDS_DESTINATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the CEF parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attributeattribute, fields will be populated as attributes. If set to flowfile-content, the CEF extension field will be converted into a flat JSON object.\",\n-                                \"displayName\": \"Parsed fields destination\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to true, custom extensions (not specified in the CEF specifications) will be included in the generated data/attributes.\",\n-                                \"displayName\": \"Include custom extensions\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"TIME_REPRESENTATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Local Timezone (system Default)\",\n-                                        \"value\": \"Local Timezone (system Default)\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local Timezone (system Default)\",\n-                                \"description\": \"Timezone to be used when representing date fields. UTC will convert all dates to UTC, while Local Timezone will convert them to the timezone used by NiFi.\",\n-                                \"displayName\": \"Timezone\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"TIME_REPRESENTATION\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a CEF message will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a CEF message will be transferred to this Relationship without any attributes being added\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"cef\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"system\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"lambda\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseCEF\",\n-                        \"typeDescription\": \"Parses the contents of a CEF formatted message and adds attributes to the FlowFile for headers and extensions of the parts of the CEF message.\\nNote: This Processor expects CEF messages WITHOUT the syslog headers (i.e. starting at \\\"CEF:0\\\"\",\n+                        \"type\": \"org.apache.nifi.processors.aws.lambda.PutLambda\",\n+                        \"typeDescription\": \"Sends the contents to a specified Amazon Lambda Function. The AWS credentials used for authentication must have permissions execute the Lambda function (lambda:InvokeFunction).The FlowFile content must be JSON.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The version of the CEF message.\",\n-                                \"name\": \"cef.header.version\"\n+                                \"description\": \"Function error message in result on posting message to AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.function.error\"\n                             },\n                             {\n-                                \"description\": \"The Device Vendor of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVendor\"\n+                                \"description\": \"Status code in the result for the message when posting to AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.status.code\"\n                             },\n                             {\n-                                \"description\": \"The Device Product of the CEF message.\",\n-                                \"name\": \"cef.header.deviceProduct\"\n+                                \"description\": \"Payload in the result from AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.payload\"\n                             },\n                             {\n-                                \"description\": \"The Device Version of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVersion\"\n+                                \"description\": \"Log in the result of the message posted to Lambda\",\n+                                \"name\": \"aws.lambda.result.log\"\n                             },\n                             {\n-                                \"description\": \"The Device Event Class ID of the CEF message.\",\n-                                \"name\": \"cef.header.deviceEventClassId\"\n+                                \"description\": \"Exception message on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The name of the CEF message.\",\n-                                \"name\": \"cef.header.name\"\n+                                \"description\": \"Exception cause on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.cause\"\n                             },\n                             {\n-                                \"description\": \"The severity of the CEF message.\",\n-                                \"name\": \"cef.header.severity\"\n+                                \"description\": \"Exception error code on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.error.code\"\n                             },\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the message.\",\n-                                \"name\": \"cef.extension.*\"\n+                                \"description\": \"Exception request id on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"Exception status code on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.status.code\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33759,106 +35854,383 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"awsTaskId\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                            \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"system\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Polly\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164 formats and adds attributes to the FlowFile for each of the parts of the Syslog message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild. If messages fail parsing, considering using RFC5424 or using a generic parsing processors such as ExtractGrok.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Polly job.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n+                                \"description\": \"The bucket name where polly output will be located.\",\n+                                \"name\": \"PollyS3OutputBucket\"\n                             },\n                             {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n+                                \"description\": \"Object key of polly output.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33867,175 +36239,354 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"include_policy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the Syslog Message body will be included in the attributes.\",\n-                                \"displayName\": \"Include Message Body in Attributes\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include_policy\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"nil_policy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The missing field will not have an attribute added.\",\n-                                        \"displayName\": \"OMIT\",\n-                                        \"value\": \"OMIT\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"The missing field will have an empty attribute added.\",\n-                                        \"displayName\": \"NULL\",\n-                                        \"value\": \"NULL\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n-                                        \"displayName\": \"DASH\",\n-                                        \"value\": \"DASH\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NULL\",\n-                                \"description\": \"Defines how NIL values are handled for header fields.\",\n-                                \"displayName\": \"NIL Policy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nil_policy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"json-payload\": {\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                            \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"syslog5424\",\n-                            \"system\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Polly\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog5424\",\n-                        \"typeDescription\": \"Attempts to parse the contents of a well formed Syslog message in accordance to RFC5424 format and adds attributes to the FlowFile for each of the parts of the Syslog message, including Structured Data.Structured Data will be written to attributes as one attribute per item id + parameter see https://tools.ietf.org/html/rfc5424.Note: ParseSyslog5424 follows the specification more closely than ParseSyslog.  If your Syslog producer does not follow the spec closely, with regards to using '-' for missing header entries for example, those logs will fail with this parser, where they would not fail with ParseSyslog.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\",\n+                        \"typeDescription\": \"Trigger a AWS Polly job. It should be followed by GetAwsPollyJobStatus processor in order to monitor job status.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The appname of the Syslog message.\",\n-                                \"name\": \"syslog.appname\"\n-                            },\n-                            {\n-                                \"description\": \"The procid of the Syslog message.\",\n-                                \"name\": \"syslog.procid\"\n-                            },\n-                            {\n-                                \"description\": \"The messageid the Syslog message.\",\n-                                \"name\": \"syslog.messageid\"\n-                            },\n-                            {\n-                                \"description\": \"Multiple entries per structuredData of the Syslog message.\",\n-                                \"name\": \"syslog.structuredData\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsPollyJobStatus\",\n+                                \"name\": \"awsTaskId\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34043,174 +36594,385 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Each dynamic property represents a RecordPath that will be evaluated against each record in an incoming FlowFile. When the value of the RecordPath is determined for a Record, an attribute is added to the outgoing FlowFile. The name of the attribute is the same as the name of this property. The value of the attribute is the same as the value of the field in the Record that the RecordPath points to. Note that no attribute will be added if the value returned for the RecordPath is null or is not a scalar value (i.e., the value is an Array, Map, or Record).\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name given to the dynamic property is the name of the attribute that will be used to denote the value of the associated RecordPath.\",\n-                                \"value\": \"A RecordPath that points to a field in the Record.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"awsTaskId\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"textract-type\": {\n+                                \"defaultValue\": \"${awsTextractType}\",\n+                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n+                                \"displayName\": \"Textract Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"textract-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n-                            \"org.apache.nifi.processors.standard.QueryRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n+                                \"name\": \"throttled\"\n+                            },\n+                            {\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bin\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"rpath\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Textract\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PartitionRecord\",\n-                        \"typeDescription\": \"Splits, or partitions, record-oriented data based on the configured fields in the data. One or more properties must be added. The name of the property is the name of an attribute to add. The value of the property is a RecordPath to evaluate against each Record. Two records will go to the same outbound FlowFile only if they have the same value for each of the given RecordPaths. Because we know that all records in a given output FlowFile have the same value for the fields that are specified by the RecordPath, an attribute is added for each field. See Additional Details on the Usage page for more information and examples.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the type of data that is being used to partition the data. The property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, if we want to separate records based on their `transactionType` field, we could add a new property named `transactionType`. The value of the property might be `/transaction/type`. An input FlowFile will then be separated into as few FlowFiles as possible such that each output FlowFile has the same value for the `transactionType` field.\\n\",\n-                                \"description\": \"Separate records into separate FlowFiles so that all of the records in a FlowFile have the same value for a given field or set of fields.\",\n-                                \"keywords\": [\n-                                    \"separate\",\n-                                    \"split\",\n-                                    \"partition\",\n-                                    \"break apart\",\n-                                    \"colocate\",\n-                                    \"segregate\",\n-                                    \"record\",\n-                                    \"field\",\n-                                    \"recordpath\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise.\\n\\nFor example, if we want to separate records based on whether or not they have a transaction total of more than $1,000 we could add a new property named `largeTransaction` with a value of `/transaction/total > 1000`. This will create two FlowFiles. In the first, all records will have a total over `1000`. In the second, all records will have a transaction less than or equal to 1000. Each FlowFile will have an attribute named `largeTransaction` with a value of `true` or `false`.\\n\",\n-                                \"description\": \"Separate records based on whether or not they adhere to a specific criteria\",\n-                                \"keywords\": [\n-                                    \"separate\",\n-                                    \"split\",\n-                                    \"partition\",\n-                                    \"break apart\",\n-                                    \"segregate\",\n-                                    \"record\",\n-                                    \"field\",\n-                                    \"recordpath\",\n-                                    \"criteria\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"All partitioned FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            },\n-                            {\n-                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n-                                \"name\": \"<dynamic property name>\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Textract job.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34219,576 +36981,386 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Data Record Path\": {\n-                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to the database instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to the database.\",\n-                                \"displayName\": \"Data Record Path\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Record Path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Statement Type Record Path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the Statement Type. The RecordPath should equate to either INSERT, UPDATE, UPSERT, or DELETE. (Debezium style operation types are also supported: \\\"r\\\" and \\\"c\\\" for INSERT, \\\"u\\\" for UPDATE, and \\\"d\\\" for DELETE)\",\n-                                \"displayName\": \"Statement Type Record Path\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Statement Type Record Path\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively). If set to true, the driver/database automatically handles the commit/rollback.\",\n-                                \"displayName\": \"Database Session AutoCommit\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"database-session-autocommit\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-type\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-allow-multiple-statements\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates whether to split the field value by a semicolon and execute each statement separately. If any statement causes an error, the entire set of statements will be rolled back. If the Statement Type is not 'SQL', this field is ignored.\",\n-                                \"displayName\": \"Allow Multiple SQL Statements\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-allow-multiple-statements\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-binary-format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"String values for binary columns contain the original value as text via UTF-8 character encoding\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n                                     },\n                                     {\n-                                        \"description\": \"String values for binary columns contain the original value in hexadecimal format\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"Hexadecimal\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"String values for binary columns contain the original value in Base64 encoded format\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"Base64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The format to be applied when decoding string values to binary.\",\n-                                \"displayName\": \"Binary String Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-binary-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-catalog-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-dcbp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-dcbp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"put-db-record-field-containing-sql\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates which field in the record(s) contains the SQL statement to execute. The value of the field must be a single SQL statement. If the Statement Type is not 'SQL', this field is ignored.\",\n-                                \"displayName\": \"Field Containing SQL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-field-containing-sql\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-max-batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies maximum number of sql statements to be included in each batch sent to the database. Zero means the batch size is not limited, and all statements are put into a single batch which can cause high memory usage issues for a very large number of statements.\",\n-                                \"displayName\": \"Maximum Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-max-batch-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-query-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-db-record-query-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-quoted-identifiers\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-quoted-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-quoted-table-identifiers\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-quoted-table-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"put-db-record-schema-name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-statement-type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPSERT\",\n-                                        \"value\": \"UPSERT\"\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT_IGNORE\",\n-                                        \"value\": \"INSERT_IGNORE\"\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use Record Path\",\n-                                        \"value\": \"Use Record Path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate. Please refer to the database documentation for a description of the behavior of each operation. Please note that some Database Types may not support certain Statement Types. If 'Use statement.type Attribute' is chosen, then the value is taken from the statement.type attribute in the FlowFile. The 'Use statement.type Attribute' option is the only one that allows the 'SQL' statement type. If 'SQL' is specified, the value of the field specified by the 'Field Containing SQL' property is expected to be a valid SQL statement on the target database, and will be executed as-is.\",\n-                                \"displayName\": \"Statement Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-statement-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-table-name\": {\n-                                \"description\": \"The name of the table that the statement should affect. Note that if the database is case-sensitive, the table name must match the database's table name exactly.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-translate-field-names\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-translate-field-names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-unmatched-column-behavior\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-unmatched-column-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-field-behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail on Unmatched Fields\",\n-                                        \"value\": \"Fail on Unmatched Fields\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-unmatched-field-behavior\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"put-db-record-update-keys\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\",\n-                                            \"UPSERT\",\n-                                            \"UPDATE\",\n-                                            \"SQL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n-                                \"displayName\": \"Update Keys\",\n+                            \"json-payload\": {\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-update-keys\",\n+                                \"name\": \"json-payload\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"textract-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Expense Analysis\",\n+                                        \"value\": \"Expense Analysis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Document Analysis\",\n+                                        \"value\": \"Document Analysis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Document Text Detection\",\n+                                        \"value\": \"Document Text Detection\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n-                                \"displayName\": \"Rollback On Failure\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rollback-on-failure\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-schema-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many Table Schemas should be cached\",\n-                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"defaultValue\": \"Document Analysis\",\n+                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n+                                \"displayName\": \"Textract Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-schema-cache-size\",\n+                                \"name\": \"textract-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n-                                \"name\": \"statement.type\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"delete\",\n-                            \"insert\",\n-                            \"jdbc\",\n-                            \"put\",\n-                            \"record\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Textract\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n-                        \"typeDescription\": \"The PutDatabaseRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file. These records are translated to SQL statements and executed as a single transaction. If any errors occur, the flow file is routed to failure or retry, and if the records are transmitted successfully, the incoming flow file is routed to success.  The type of statement executed by the processor is specified via the Statement Type property, which accepts some hard-coded values such as INSERT, UPDATE, and DELETE, as well as 'Use statement.type Attribute', which causes the processor to get the statement type from a flow file attribute.  IMPORTANT: If the Statement Type is UPDATE, then the incoming records must not alter the value(s) of the primary keys (or user-specified Update Keys). If such records are encountered, the UPDATE statement issued to the database may do nothing (if no existing records with the new primary key values are found), or could inadvertently corrupt the existing data (by changing records for which the new values of the primary keys exist).\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\",\n-                                \"description\": \"Insert records into a database\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\",\n+                        \"typeDescription\": \"Trigger a AWS Textract job. It should be followed by GetAwsTextractJobStatus processor in order to monitor job status.\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n-                                \"name\": \"putdatabaserecord.error\"\n+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTextractJobStatus\",\n+                                \"name\": \"awsTaskId\"\n+                            },\n+                            {\n+                                \"description\": \"The selected Textract type, which can be used in GetAwsTextractJobStatus\",\n+                                \"name\": \"awsTextractType\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34797,126 +37369,379 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Cache Entry Identifier\": {\n-                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the cache key\",\n-                                \"displayName\": \"Cache Entry Identifier\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache update strategy\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Adds the specified entry to the cache, replacing any value that is currently set.\",\n-                                        \"displayName\": \"Replace if present\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Adds the specified entry to the cache, if the key does not exist.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"replace\",\n-                                \"description\": \"Determines how the cache is updated if the cache already contains the entry\",\n-                                \"displayName\": \"Cache update strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache update strategy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache flow files\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Max cache entry size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum amount of data to put into cache\",\n-                                \"displayName\": \"Max cache entry size\",\n+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"awsTaskId\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max cache entry size\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.FetchDistributedMapCache\"\n+                            \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed to this relationship\",\n+                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n+                                \"name\": \"throttled\"\n+                            },\n+                            {\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be inserted into the cache will be routed to this relationship\",\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"put\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Transcribe\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutDistributedMapCache\",\n-                        \"typeDescription\": \"Gets the content of a FlowFile and puts it to a distributed map cache, using a cache key computed from FlowFile attributes. If the cache already contains the entry and the cache update strategy is 'keep original' the entry is not replaced.'\",\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Transcribe job.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All FlowFiles will have an attribute 'cached'. The value of this attribute is true, is the FlowFile is cached, otherwise false.\",\n-                                \"name\": \"cached\"\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34924,362 +37749,355 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Dynamic property names that will be passed to the Mail session. Possible properties can be found in: https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"mail.propertyName\",\n-                                \"value\": \"Value for a specific property to be set in the JavaMail Session object\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attach File\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the FlowFile content should be attached to the email\",\n-                                \"displayName\": \"Attach File\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attach File\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"BCC\": {\n-                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"BCC\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"BCC\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"CC\": {\n-                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"CC\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"CC\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Content Type\": {\n-                                \"defaultValue\": \"text/plain\",\n-                                \"description\": \"Mime Type used to interpret the contents of the email, such as text/plain or text/html\",\n-                                \"displayName\": \"Content Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Content Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"From\": {\n-                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"From\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"From\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include All Attributes In Message\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not all FlowFile attributes should be recorded in the body of the email message\",\n-                                \"displayName\": \"Include All Attributes In Message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include All Attributes In Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message\": {\n-                                \"description\": \"The body of the email message\",\n-                                \"displayName\": \"Message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Auth\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Flag indicating whether authentication should be used\",\n-                                \"displayName\": \"SMTP Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Auth\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Hostname\": {\n-                                \"description\": \"The hostname of the SMTP host\",\n-                                \"displayName\": \"SMTP Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password for the SMTP account\",\n-                                \"displayName\": \"SMTP Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"SMTP Port\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The Port used for SMTP communications\",\n-                                \"displayName\": \"SMTP Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Socket Factory\": {\n-                                \"defaultValue\": \"javax.net.ssl.SSLSocketFactory\",\n-                                \"description\": \"Socket Factory to use for SMTP Connection\",\n-                                \"displayName\": \"SMTP Socket Factory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Socket Factory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP TLS\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Flag indicating whether Opportunistic TLS should be enabled using STARTTLS command\",\n-                                \"displayName\": \"SMTP STARTTLS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP TLS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP Username\": {\n-                                \"description\": \"Username for the SMTP account\",\n-                                \"displayName\": \"SMTP Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SMTP X-Mailer Header\": {\n-                                \"defaultValue\": \"NiFi\",\n-                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n-                                \"displayName\": \"SMTP X-Mailer Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP X-Mailer Header\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Subject\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"To\": {\n-                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n-                                \"displayName\": \"To\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"To\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Email messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"password-based-authorization-mode\",\n-                                \"description\": \"How to authorize sending email on the user's behalf.\",\n-                                \"displayName\": \"Authorization Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"email-ff-content-as-message\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the FlowFile content should be the message of the email. If true, the 'Message' property is ignored.\",\n-                                \"displayName\": \"Flow file content as message\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"email-ff-content-as-message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"input-character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the FlowFile contents for reading input FlowFile contents to generate the message body or as an attachment to the message. If not set, UTF-8 will be the default value.\",\n-                                \"displayName\": \"Input Character Set\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-character-set\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"json-payload\": {\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that fail to send will be routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a String object) will be read into memory in case the property to use the flow file content as the email body is set to true.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"notify\",\n-                            \"put\",\n-                            \"smtp\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Transcribe\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutEmail\",\n-                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\",\n+                        \"typeDescription\": \"Trigger a AWS Transcribe job. It should be followed by GetAwsTranscribeStatus processor in order to monitor job status.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranscribeJobStatus\",\n+                                \"name\": \"awsTaskId\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -35287,432 +38105,307 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"pre.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            },\n-                            {\n-                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"post.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Conflict Resolution\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Remote file is replaced with new file, FlowFile goes to success\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"File is not transferred, FlowFile goes to success\",\n-                                        \"displayName\": \"IGNORE\",\n-                                        \"value\": \"IGNORE\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Dot Rename\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n-                                \"displayName\": \"Dot Rename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dot Rename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n-                                \"displayName\": \"Last Modified Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Permissions\": {\n-                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n-                                \"displayName\": \"Permissions\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Reject Zero-Byte Files\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n-                                \"displayName\": \"Reject Zero-Byte Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reject Zero-Byte Files\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Temporary Filename\": {\n-                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n-                                \"displayName\": \"Temporary Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n-                                \"displayName\": \"Use UTF-8 Encoding\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"awsTaskId\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -35721,59 +38414,71 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\"\n+                            \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n+                                \"name\": \"throttled\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"put\",\n-                            \"remote\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Translate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n-                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Translate job.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -35781,301 +38486,355 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to write to any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Create Missing Directories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Missing Directories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The directory to which files should be written. You may use expression language such as /aa/bb/${path}\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Group\": {\n-                                \"description\": \"Sets the group on the output file to the value of this attribute.  You may also use expression language such as ${file.group}.\",\n-                                \"displayName\": \"Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Group\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"Sets the lastModifiedTime on the output file to the value of this attribute.  Format must be yyyy-MM-dd'T'HH:mm:ssZ.  You may also use expression language such as ${file.lastModifiedTime}.\",\n-                                \"displayName\": \"Last Modified Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Count\": {\n-                                \"description\": \"Specifies the maximum number of files that can exist in the output directory\",\n-                                \"displayName\": \"Maximum File Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Count\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Owner\": {\n-                                \"description\": \"Sets the owner on the output file to the value of this attribute.  You may also use expression language such as ${file.owner}. Note on many operating systems Nifi must be running as a super-user to have the permissions to set the file owner.\",\n-                                \"displayName\": \"Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Permissions\": {\n-                                \"description\": \"Sets the permissions on the output file to the value of this attribute.  Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644).  You may also use expression language such as ${file.permissions}.\",\n-                                \"displayName\": \"Permissions\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename to use when writing the FlowFile to disk.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.GetFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Files that could not be written to the output directory for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"local\",\n-                            \"put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"put-record-include-zero-record-results\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If no records are read from the incoming FlowFile, this property specifies whether or not an empty record set will be transmitted. The original FlowFile will still be routed to success, but if no transmission occurs, no provenance SEND event will be generated.\",\n-                                \"displayName\": \"Include Zero Record Results\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-include-zero-record-results\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"put-record-sink\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the query result records to some destination.\",\n-                                \"displayName\": \"Record Destination Service\",\n+                            \"json-payload\": {\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-sink\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile is routed to this relationship if the records could not be transmitted but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the records could not be transmitted and retrying the operation will also fail\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"put\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Translate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutRecord\",\n-                        \"typeDescription\": \"The PutRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file, and sends them to a destination specified by a Record Destination Service (i.e. record sink).\",\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\",\n+                        \"typeDescription\": \"Trigger a AWS Translate job. It should be followed by GetAwsTranslateJobStatus processor in order to monitor job status.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranslateJobStatus\",\n+                                \"name\": \"awsTaskId\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36088,504 +38847,443 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"500\",\n-                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Remote file is replaced with new file, FlowFile goes to success\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"File is not transferred, FlowFile goes to success\",\n-                                        \"displayName\": \"IGNORE\",\n-                                        \"value\": \"IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Directory\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Disable Directory Listing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n-                                \"displayName\": \"Disable Directory Listing\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Dot Rename\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n-                                \"displayName\": \"Dot Rename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dot Rename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Host Key File\": {\n-                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n-                                \"displayName\": \"Host Key File\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n-                                \"displayName\": \"Key Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Key Exchange Algorithms Allowed\": {\n-                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n-                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n-                                \"displayName\": \"Last Modified Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Permissions\": {\n-                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n-                                \"displayName\": \"Permissions\",\n+                            \"FullControl User List\": {\n+                                \"defaultValue\": \"${s3.permissions.full.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n+                                \"displayName\": \"FullControl User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n+                                \"name\": \"FullControl User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Object Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\n+                            \"Owner\": {\n+                                \"defaultValue\": \"${s3.owner}\",\n+                                \"description\": \"The Amazon ID to use for the object's owner\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Private Key Path\": {\n-                                \"description\": \"The fully qualified path to the Private Key file\",\n-                                \"displayName\": \"Private Key Path\",\n+                            \"Read ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n+                                \"displayName\": \"Read ACL User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Host\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n-                                \"displayName\": \"Proxy Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n+                                \"name\": \"Read ACL User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"Read Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.read.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n+                                \"displayName\": \"Read Permission User List\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Read Permission User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Reject Zero-Byte Files\": {\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Signer Override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n-                                \"displayName\": \"Reject Zero-Byte Files\",\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"name\": \"Signer Override\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Group\": {\n-                                \"description\": \"Integer value representing the Group ID to set on the file after transferring it. If not set, the group will not be set. You may also use expression language such as ${file.group}. If the value is invalid, the processor will not be invalid but will fail to change the group of the file.\",\n-                                \"displayName\": \"Remote Group\",\n+                            \"Version\": {\n+                                \"description\": \"The Version of the Object to delete\",\n+                                \"displayName\": \"Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Group\",\n+                                \"name\": \"Version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Owner\": {\n-                                \"description\": \"Integer value representing the User ID to set on the file after transferring it. If not set, the owner will not be set. You may also use expression language such as ${file.owner}. If the value is invalid, the processor will not be invalid but will fail to change the owner of the file.\",\n-                                \"displayName\": \"Remote Owner\",\n+                            \"Write ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n+                                \"displayName\": \"Write ACL User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Owner\",\n+                                \"name\": \"Write ACL User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\n+                            \"Write Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.write.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n+                                \"displayName\": \"Write Permission User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n+                                \"name\": \"Write Permission User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Temporary Filename\": {\n-                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n-                                \"displayName\": \"Temporary Filename\",\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -36594,59 +39292,77 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetSFTP\"\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\n+                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n-                            \"files\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"sftp\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Archive\",\n+                            \"Delete\",\n+                            \"S3\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n-                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n+                        \"typeDescription\": \"Deletes a file from an Amazon S3 Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n+                            },\n+                            {\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n+                            },\n+                            {\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n+                            },\n+                            {\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36656,2126 +39372,2326 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchS3Object.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in an S3 bucket\",\n+                                \"keywords\": [\n+                                    \"s3\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to RouteOnAttribute.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"If you would like to \\\"OR\\\" together all of the conditions (i.e., the file should be retrieved if any of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if any matches\\\".\\nIf you would like to \\\"AND\\\" together all of the conditions (i.e., the file should only be retrieved if all of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if all match\\\".\\n\\nFor each condition that you would like to filter on, add a new property. The name of the property should describe the condition. The value of the property should be an Expression Language expression that returns `true` if the file meets the condition or `false` if the file does not meet the condition.\\n\\nSome attributes that you may consider filtering on are:\\n- `filename` (the name of the file)\\n- `s3.length` (the number of bytes in the file)\\n- `s3.tag.<tag name>` (the value of the s3 tag with the name `tag name`)\\n- `s3.user.metadata.<key name>` (the value of the user metadata with the key named `key name`)\\n\\nFor example, to fetch only files that are at least 1 MB and have a filename ending in `.zip` we would set the following properties:\\n- \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n- \\\"At least 1 MB\\\" = \\\"${s3.length:ge(1000000)}\\\"\\n- \\\"Ends in .zip\\\" = \\\"${filename:endsWith('.zip')}\\\"\\n\\nAuto-terminate the `unmatched` Relationship.\\nConnect the `matched` Relationship to the FetchS3Object processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve only files from S3 that meet some specified criteria\",\n+                                \"keywords\": [\n+                                    \"s3\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"filter\",\n+                                    \"select\",\n+                                    \"fetch\",\n+                                    \"criteria\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Queue URL\\\" must be set to the appropriate URL for the SQS queue. It is recommended that this property be parameterized, using a value such as `#{SQS_QUEUE_URL}`.\\nThe \\\"Region\\\" property must be set to denote the SQS region that the queue resides in. It's a good idea to parameterize this property by setting it to something like `#{SQS_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' relationship is connected to EvaluateJsonPath.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.sqs.GetSQS\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Destination\\\" = \\\"flowfile-attribute\\\"\\n\\\"s3.bucket\\\" = \\\"$.Records[0].s3.bucket.name\\\"\\n\\\"filename\\\" = \\\"$.Records[0].s3.object.key\\\"\\n\\nThe 'success' relationship is connected to FetchS3Object.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the GetSQS Processor.\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve new files as they arrive in an S3 bucket\",\n+                                \"keywords\": [],\n+                                \"notes\": \"This method of retrieving files from S3 is more efficient than using ListS3 and more cost effective. It is the pattern recommended by AWS. However, it does require that the S3 bucket be configured to place notifications on an SQS queue when new files arrive. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html\"\n+                            }\n+                        ],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of FlowFiles to put to the database in a single transaction\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"JDBC Connection Pool\": {\n-                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n-                                \"displayName\": \"JDBC Connection Pool\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Obtain Generated Keys\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, any key that is automatically generated by the database will be added to the FlowFile that generated it using the sql.generate.key attribute. This may result in slightly slower performance and is not supported by all databases.\",\n-                                \"displayName\": \"Obtain Generated Keys\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Obtain Generated Keys\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Support Fragmented Transactions\": {\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Signer Override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, when a FlowFile is consumed by this Processor, the Processor will first check the fragment.identifier and fragment.count attributes of that FlowFile. If the fragment.count value is greater than 1, the Processor will not process any FlowFile with that fragment.identifier until all are available; at that point, it will process all FlowFiles with that fragment.identifier as a single transaction, in the order specified by the FlowFiles' fragment.index attributes. This Provides atomicity of those SQL statements. Once any statement of this transaction throws exception when executing, this transaction will be rolled back. When transaction rollback happened, none of these FlowFiles would be routed to 'success'. If the <Rollback On Failure> is set true, these FlowFiles will stay in the input relationship. When the <Rollback On Failure> is set false,, if any of these FlowFiles will be routed to 'retry', all of these FlowFiles will be routed to 'retry'.Otherwise, they will be routed to 'failure'. If this value is false, these attributes will be ignored and the updates will occur independent of one another.\",\n-                                \"displayName\": \"Support Fragmented Transactions\",\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Support Fragmented Transactions\",\n+                                \"name\": \"Signer Override\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transaction Timeout\": {\n-                                \"description\": \"If the <Support Fragmented Transactions> property is set to true, specifies how long to wait for all FlowFiles for a particular fragment.identifier attribute to arrive before just transferring all of the FlowFiles with that identifier to the 'failure' relationship\",\n-                                \"displayName\": \"Transaction Timeout\",\n+                            \"Version\": {\n+                                \"description\": \"The Version of the Object to download\",\n+                                \"displayName\": \"Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transaction Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\n-                                \"allowableValues\": [\n+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively), if set to true the driver/database handles the commit/rollback.\",\n-                                \"displayName\": \"Database Session AutoCommit\",\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"encryption-service\": {\n+                                \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n+                                \"displayName\": \"Encryption Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"database-session-autocommit\",\n+                                \"name\": \"encryption-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n+                                \"displayName\": \"Range Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putsql-sql-statement\": {\n-                                \"description\": \"The SQL statement to execute. The statement can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming FlowFiles. If this property is empty, the content of the incoming FlowFile is expected to contain a valid SQL statement, to be issued by the processor to the database.\",\n-                                \"displayName\": \"SQL Statement\",\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n+                                \"displayName\": \"Range Start\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putsql-sql-statement\",\n+                                \"name\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"requester-pays\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n+                                        \"description\": \"Indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.\",\n+                                        \"displayName\": \"True\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n+                                        \"description\": \"Does not consent to pay requester charges for retrieving objects from the S3 bucket.\",\n+                                        \"displayName\": \"False\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n-                                \"displayName\": \"Rollback On Failure\",\n+                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.\",\n+                                \"displayName\": \"Requester Pays\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rollback-on-failure\",\n+                                \"name\": \"requester-pays\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n+                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Fetch\",\n+                            \"Get\",\n+                            \"S3\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSQL\",\n-                        \"typeDescription\": \"Executes a SQL UPDATE or INSERT command. The content of an incoming FlowFile is expected to be the SQL command to execute. The SQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                        \"typeDescription\": \"Retrieves the contents of an S3 Object and writes it to the content of a FlowFile\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that contains the file. Typically this is defined as an attribute on an incoming FlowFile, so this property is set to `${s3.bucket}`.\\nThe \\\"Object Key\\\" property denotes the fully qualified filename of the file to fetch. Typically, the FlowFile's `filename` attribute is used, so this property is set to `${filename}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{S3_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the file.\\n\",\n+                                \"description\": \"Fetch a specific file from S3\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the database generated a key for an INSERT statement and the Obtain Generated Keys property is set to true, this attribute will be added to indicate the generated key, if possible. This feature is not supported by all database vendors.\",\n-                                \"name\": \"sql.generated.key\"\n+                                \"description\": \"The URL that can be used to access the S3 object\",\n+                                \"name\": \"s3.url\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the S3 bucket\",\n+                                \"name\": \"s3.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"The path of the file\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The path of the file\",\n+                                \"name\": \"absolute.path\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The MD5 sum of the file\",\n+                                \"name\": \"hash.value\"\n+                            },\n+                            {\n+                                \"description\": \"MD5\",\n+                                \"name\": \"hash.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"If S3 provides the content type/MIME type, this attribute will hold that file\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The ETag that can be used to see if the file has changed\",\n+                                \"name\": \"s3.etag\"\n+                            },\n+                            {\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n+                            },\n+                            {\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n+                            },\n+                            {\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n+                            },\n+                            {\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n+                            },\n+                            {\n+                                \"description\": \"If the file has an expiration date, this attribute will be set, containing the milliseconds since epoch in UTC time\",\n+                                \"name\": \"s3.expirationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the rule that dictates this object's expiration time\",\n+                                \"name\": \"s3.expirationTimeRuleId\"\n+                            },\n+                            {\n+                                \"description\": \"The server side encryption algorithm of the object\",\n+                                \"name\": \"s3.sseAlgorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The version of the S3 object\",\n+                                \"name\": \"s3.version\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the encryption strategy that was used to store the S3 object (if it is encrypted)\",\n+                                \"name\": \"s3.encryptionStrategy\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"25\",\n-                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Bucket\": {\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The IP address or hostname of the Syslog server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"5 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"Listing Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"If not using a Record Writer, this property dictates how many S3 objects should be listed in a single batch. Once this number is reached, the FlowFiles that have been created will be transferred out of the Processor. Setting this value lower may result in lower latency by sending out the FlowFiles before the complete listing has finished. However, it can significantly reduce performance. Larger values may take more memory to store all of the information before sending the FlowFiles out. This property is ignored if using a Record Writer, as one of the main benefits of the Record Writer is being able to emit the entire listing as a single FlowFile.\",\n+                                \"displayName\": \"Listing Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Listing Batch Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Body\": {\n-                                \"description\": \"The body for the Syslog messages.\",\n-                                \"displayName\": \"Message Body\",\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Body\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Hostname\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"The hostname for the Syslog messages.\",\n-                                \"displayName\": \"Message Hostname\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Message Priority\": {\n-                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n-                                \"displayName\": \"Message Priority\",\n+                            \"Signer Override\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Priority\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Signer Override\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Timestamp\": {\n-                                \"defaultValue\": \"${now():format('MMM d HH:mm:ss')}\",\n-                                \"description\": \"The timestamp for the Syslog messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", \\\" or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\".\",\n-                                \"displayName\": \"Message Timestamp\",\n+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Timestamp\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Version\": {\n-                                \"description\": \"The version for the Syslog messages.\",\n-                                \"displayName\": \"Message Version\",\n+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Version\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\n+                            \"delimiter\": {\n+                                \"description\": \"The string used to delimit directories within the bucket. Please consult the AWS documentation for the correct use of this field.\",\n+                                \"displayName\": \"Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delimiter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be sent over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the syslog server. Does not apply to UDP. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to Syslog are sent out this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that do not form a valid Syslog message are sent out this relationship.\",\n-                                \"name\": \"invalid\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"logs\",\n-                            \"put\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSyslog\",\n-                        \"typeDescription\": \"Sends Syslog messages to a given host and port over TCP or UDP. Messages are constructed from the \\\"Message ___\\\" properties of the processor which can use expression language to generate messages from incoming FlowFiles. The properties are used to construct messages of the form: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional.  The constructed messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If a message is constructed that does not form a valid Syslog message according to the above description, then it is routed to the invalid relationship. Valid messages are sent to the Syslog server and successes are routed to the success relationship, failures routed to the failure relationship.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n+                                        \"propertyDisplayName\": \"Entity Tracking State Cache\",\n+                                        \"propertyName\": \"et-state-cache\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Per FlowFile\": {\n+                            \"list-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"List Objects V1\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"List Objects V2\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to send each FlowFile's content on an individual connection.\",\n-                                \"displayName\": \"Connection Per FlowFile\",\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specifies whether to use the original List Objects or the newer List Objects Version 2 endpoint.\",\n+                                \"displayName\": \"List Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Per FlowFile\",\n+                                \"name\": \"list-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists all entities without any tracking. The same entities will be listed each time this processor is scheduled. It is recommended to change the default run schedule value. Any property that relates to the persisting state will be ignored.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"max-age\": {\n+                                \"description\": \"The maximum age that an S3 object can be in order to be considered; any object older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum Object Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that an S3 object must be in order to be considered; any object younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum Object Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"name\": \"min-age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Outgoing Message Delimiter\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the delimiter to use when sending messages out over the same TCP stream. The delimiter is appended to each FlowFile message that is transmitted over the stream so that the receiver can determine when one message ends and the next message begins. Users should ensure that the FlowFile content does not contain the delimiter character to avoid errors. In order to use a new line character you can enter '\\\\n'. For a tab character use '\\\\t'. Finally for a carriage return use '\\\\r'.\",\n-                                \"displayName\": \"Outgoing Message Delimiter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Outgoing Message Delimiter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"prefix\": {\n+                                \"description\": \"The prefix used to filter the object list. Do not begin with a forward slash '/'. In most cases, it should end with a forward slash '/'.\",\n+                                \"displayName\": \"Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for reading Records from input FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for writing Records to the configured socket address\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"requester-pays\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Indicates that the requester consents to pay any charges associated with listing the S3 bucket.\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Does not consent to pay requester charges for listing the S3 bucket.\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with listing the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.  Note that this setting is not applicable when 'Use Versions' is 'true'.\",\n+                                \"displayName\": \"Requester Pays\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"requester-pays\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n+                            \"use-versions\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to use S3 versions, if applicable.  If false, only the latest version of each object will be returned.\",\n+                                \"displayName\": \"Use Versions\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-versions\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transmission Strategy\": {\n+                            \"write-s3-object-tags\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send FlowFile content as a single stream\",\n-                                        \"displayName\": \"FlowFile-oriented\",\n-                                        \"value\": \"FLOWFILE_ORIENTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Read Records from input FlowFiles and send serialized Records as individual messages\",\n-                                        \"displayName\": \"Record-oriented\",\n-                                        \"value\": \"RECORD_ORIENTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n-                                \"description\": \"Specifies the strategy used for reading input FlowFiles and transmitting messages to the destination socket address\",\n-                                \"displayName\": \"Transmission Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to 'True', the tags associated with the S3 object will be written as FlowFile attributes\",\n+                                \"displayName\": \"Write Object Tags\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transmission Strategy\",\n+                                \"name\": \"write-s3-object-tags\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"write-s3-user-metadata\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to 'True', the user defined metadata associated with the S3 object will be added to FlowFile attributes/records\",\n+                                \"displayName\": \"Write User Metadata\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"write-s3-user-metadata\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenTCP\",\n-                            \"org.apache.nifi.processors.standard.PutUDP\"\n+                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"tcp\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"S3\",\n+                            \"list\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutTCP\",\n-                        \"typeDescription\": \"Sends serialized FlowFiles or Records over TCP to a configurable destination with optional support for TLS\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                        \"typeDescription\": \"Retrieves a listing of objects from an S3 bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchS3Object. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Count of records transmitted to configured destination address\",\n-                                \"name\": \"record.count.transmitted\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"The name of the S3 bucket\",\n+                                \"name\": \"s3.bucket\"\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The region of the S3 bucket\",\n+                                \"name\": \"s3.region\"\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The ETag that can be used to see if the file has changed\",\n+                                \"name\": \"s3.etag\"\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenUDP\",\n-                            \"org.apache.nifi.processors.standard.PutTCP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"A boolean indicating if this is the latest version of the object\",\n+                                \"name\": \"s3.isLatest\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The last modified time in milliseconds since epoch in UTC time\",\n+                                \"name\": \"s3.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the object in bytes\",\n+                                \"name\": \"s3.length\"\n+                            },\n+                            {\n+                                \"description\": \"The storage class of the object\",\n+                                \"name\": \"s3.storeClass\"\n+                            },\n+                            {\n+                                \"description\": \"The version of the object, if applicable\",\n+                                \"name\": \"s3.version\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Write Object Tags' is set to 'True', the tags associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n+                                \"name\": \"s3.tag.___\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Write User Metadata' is set to 'True', the user defined metadata associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n+                                \"name\": \"s3.user.metadata.___\"\n                             }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"udp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutUDP\",\n-                        \"typeDescription\": \"The PutUDP processor receives a FlowFile and packages the FlowFile content into a single UDP datagram packet which is then transmitted to the configured UDP server. The user must ensure that the FlowFile content being fed to this processor is not larger than the maximum size for the underlying UDP transport. The maximum transport size will vary based on the platform setup but is generally just under 64KB. FlowFiles will be marked as failed if their content is larger than the maximum transport size.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n+                                \"description\": \"Allows user-defined metadata to be added to the S3 object as key/value pairs\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a User-Defined Metadata field to add to the S3 Object\",\n+                                \"value\": \"The value of a User-Defined Metadata field to add to the S3 Object\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Fetch Size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Fetch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n+                            \"Cache Control\": {\n+                                \"description\": \"Sets the Cache-Control HTTP header indicating the caching directives of the associated object. Multiple directives are comma-separated.\",\n+                                \"displayName\": \"Cache Control\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"name\": \"Cache Control\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Set Auto Commit\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content Disposition\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"inline\",\n+                                        \"value\": \"inline\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"attachment\",\n+                                        \"value\": \"attachment\"\n                                     }\n                                 ],\n-                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n-                                \"displayName\": \"Set Auto Commit\",\n+                                \"description\": \"Sets the Content-Disposition HTTP header indicating if the content is intended to be displayed inline or should be downloaded.\\n Possible values are 'inline' or 'attachment'. If this property is not specified, object's content-disposition will be set to filename. When 'attachment' is selected, '; filename=' plus object key are automatically appended to form final value 'attachment; filename=\\\"filename.jpg\\\"'.\",\n+                                \"displayName\": \"Content Disposition\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Content Disposition\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content Type\": {\n+                                \"description\": \"Sets the Content-Type HTTP header indicating the type of content stored in the associated object. The value of this header is a standard MIME type.\\nAWS S3 Java client will attempt to determine the correct content type if one hasn't been set yet. Users are responsible for ensuring a suitable content type is set when uploading streams. If no content type is provided and cannot be determined by the filename, the default content type \\\"application/octet-stream\\\" will be used.\",\n+                                \"displayName\": \"Content Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Content Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Set Auto Commit\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Expiration Time Rule\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Expiration Time Rule\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n+                                \"name\": \"Expiration Time Rule\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n-                                    },\n+                            \"File Resource Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n+                                \"displayName\": \"File Resource Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"File Resource Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-sql-query\": {\n-                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n-                                \"displayName\": \"Custom Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"db-fetch-sql-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n+                            \"FullControl User List\": {\n+                                \"defaultValue\": \"${s3.permissions.full.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n+                                \"displayName\": \"FullControl User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n+                                \"name\": \"FullControl User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"Multipart Part Size\": {\n+                                \"defaultValue\": \"5 GB\",\n+                                \"description\": \"Specifies the part size for use when the PutS3Multipart Upload API is used. Flow files will be broken into chunks of this size for the upload process, but the last part sent can be smaller since it is not padded. The valid range is 50MB to 5GB.\",\n+                                \"displayName\": \"Multipart Part Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Multipart Part Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"Multipart Threshold\": {\n+                                \"defaultValue\": \"5 GB\",\n+                                \"description\": \"Specifies the file size threshold for switch from the PutS3Object API to the PutS3MultipartUpload API.  Flow files bigger than this limit will be sent using the stateful multipart process. The valid range is 50MB to 5GB.\",\n+                                \"displayName\": \"Multipart Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Multipart Threshold\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-normalize\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                            \"Multipart Upload AgeOff Interval\": {\n+                                \"defaultValue\": \"60 min\",\n+                                \"description\": \"Specifies the interval at which existing multipart uploads in AWS S3 will be evaluated for ageoff.  When processor is triggered it will initiate the ageoff evaluation if this interval has been exceeded.\",\n+                                \"displayName\": \"Multipart Upload AgeOff Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-normalize\",\n+                                \"name\": \"Multipart Upload AgeOff Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n+                            \"Multipart Upload Max Age Threshold\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"Specifies the maximum age for existing multipart uploads in AWS S3.  When the ageoff process occurs, any upload older than this threshold will be aborted.\",\n+                                \"displayName\": \"Multipart Upload Max Age Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n+                                \"name\": \"Multipart Upload Max Age Threshold\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-load-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n-                                        \"displayName\": \"Start at Current Maximum Values\",\n-                                        \"value\": \"Start at Current Maximum Values\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Start at Beginning\",\n-                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n-                                \"displayName\": \"Initial Load Strategy\",\n+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-max-frags\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n-                                \"displayName\": \"Maximum Number of Fragments\",\n+                            \"Owner\": {\n+                                \"defaultValue\": \"${s3.owner}\",\n+                                \"description\": \"The Amazon ID to use for the object's owner\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-frags\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n+                            \"Read ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n+                                \"displayName\": \"Read ACL User List\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-rows\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Read ACL User List\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"Read Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.read.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n+                                \"displayName\": \"Read Permission User List\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-output-batch-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Read Permission User List\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"transaction-isolation-level\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_NONE\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_READ_COMMITTED\",\n-                                        \"value\": \"2\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_READ_UNCOMMITTED\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_REPEATABLE_READ\",\n-                                        \"value\": \"4\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_SERIALIZABLE\",\n-                                        \"value\": \"8\"\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\n                                     }\n                                 ],\n-                                \"description\": \"This setting will set the transaction isolation level for the database connection for drivers that support this setting\",\n-                                \"displayName\": \"Transaction Isolation Level\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"transaction-isolation-level\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTable\",\n-                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to Avro format. Expression Language is supported for several properties, but no incoming connections are permitted. The Environment/System properties may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n                             },\n-                            {\n-                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"maxvalue.*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n+                            \"Resource Transfer Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog;\\nset the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; and\\nset the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included.\\nIn order to perform an incremental load of all tables, leave the Catalog, Schema Pattern, and Table Name Pattern unset.\\n\\nLeave the RecordWriter property unset.\\n\\nConnect the 'success' relationship to QueryDatabaseTableRecord.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n                                     },\n                                     {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to \\\"${db.table.fullname}\\\"\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\"\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n                                     }\n                                 ],\n-                                \"description\": \"Perform an incremental load of multiple database tables, fetching only new rows as they are added to the tables.\",\n-                                \"keywords\": [\n-                                    \"incremental load\",\n-                                    \"rdbms\",\n-                                    \"jdbc\",\n-                                    \"cdc\",\n-                                    \"database\",\n-                                    \"table\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"Columns to Return\": {\n-                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Columns to Return\",\n+                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Resource Transfer Source\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Fetch Size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n-                                \"displayName\": \"Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Fetch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum-value Columns\": {\n-                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n-                                \"displayName\": \"Maximum-value Columns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Set Auto Commit\": {\n+                            \"Signer Override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n-                                \"displayName\": \"Set Auto Commit\",\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Set Auto Commit\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Signer Override\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-db-type\": {\n+                            \"Storage Class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DeepArchive\",\n+                                        \"value\": \"DeepArchive\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Glacier\",\n+                                        \"value\": \"Glacier\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GlacierInstantRetrieval\",\n+                                        \"value\": \"GlacierInstantRetrieval\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IntelligentTiering\",\n+                                        \"value\": \"IntelligentTiering\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OneZoneInfrequentAccess\",\n+                                        \"value\": \"OneZoneInfrequentAccess\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Outposts\",\n+                                        \"value\": \"Outposts\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ReducedRedundancy\",\n+                                        \"value\": \"ReducedRedundancy\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Snow\",\n+                                        \"value\": \"Snow\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"StandardInfrequentAccess\",\n+                                        \"value\": \"StandardInfrequentAccess\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n+                                \"defaultValue\": \"Standard\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Storage Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"Storage Class\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-sql-query\": {\n-                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n-                                \"displayName\": \"Custom Query\",\n+                            \"Write ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n+                                \"displayName\": \"Write ACL User List\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"db-fetch-sql-query\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Write ACL User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-where-clause\": {\n-                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n-                                \"displayName\": \"Additional WHERE clause\",\n+                            \"Write Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.write.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n+                                \"displayName\": \"Write Permission User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\n+                                \"name\": \"Write Permission User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n+                            \"canned-acl\": {\n+                                \"defaultValue\": \"${s3.permissions.cannedacl}\",\n+                                \"description\": \"Amazon Canned ACL for an object, one of: BucketOwnerFullControl, BucketOwnerRead, LogDeliveryWrite, AuthenticatedRead, PublicReadWrite, PublicRead, Private; will be ignored if any other ACL/permission/owner property is specified\",\n+                                \"displayName\": \"Canned ACL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"canned-acl\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"name\": \"custom-signer-class-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n-                                \"displayName\": \"Use Avro Logical Types\",\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"encryption-service\": {\n+                                \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n+                                \"displayName\": \"Encryption Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"encryption-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"initial-load-strategy\": {\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"s3-object-remove-tags-prefix\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n-                                        \"displayName\": \"Start at Current Maximum Values\",\n-                                        \"value\": \"Start at Current Maximum Values\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Start at Beginning\",\n-                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n-                                \"displayName\": \"Initial Load Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to 'True', the value provided for 'Object Tags Prefix' will be removed from the attribute(s) and then considered as the Tag name. For ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII and the prefix is set to 'tagS3' then the corresponding tag values would be 'country' and 'PII'\",\n+                                \"displayName\": \"Remove Tag Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"qdbt-max-frags\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n-                                \"displayName\": \"Maximum Number of Fragments\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-frags\",\n-                                \"required\": true,\n+                                \"name\": \"s3-object-remove-tags-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-max-rows\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Rows Per Flow File\",\n+                            \"s3-object-tags-prefix\": {\n+                                \"description\": \"Specifies the prefix which would be scanned against the incoming FlowFile's attributes and the matching attribute's name and value would be considered as the outgoing S3 object's Tag name and Tag value respectively. For Ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII, the tag prefix to be specified would be 'tagS3'\",\n+                                \"displayName\": \"Object Tags Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-rows\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"s3-object-tags-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"s3-temporary-directory-multipart\": {\n+                                \"defaultValue\": \"${java.io.tmpdir}\",\n+                                \"description\": \"Directory in which, for multipart uploads, the processor will locally save the state tracking the upload ID and parts uploaded which must both be provided to complete the upload.\",\n+                                \"displayName\": \"Temporary Directory Multipart State\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"name\": \"s3-temporary-directory-multipart\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-normalize\": {\n+                            \"server-side-encryption\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names when creating the output schema. For example, colons and periods will be changed to underscores.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies the algorithm used for server side encryption.\",\n+                                \"displayName\": \"Server Side Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"qdbtr-normalize\",\n+                                \"name\": \"server-side-encryption\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"qdbtr-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\",\n-                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to the format specified by the record writer. Expression Language is supported for several properties, but no incoming connections are permitted. The Environment/System properties may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Beginning\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n-                                \"description\": \"Retrieve all rows from a database table.\",\n-                                \"keywords\": [\n-                                    \"jdbc\",\n-                                    \"rdbms\",\n-                                    \"cdc\",\n-                                    \"database\",\n-                                    \"table\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n-                                \"description\": \"Perform an incremental load of a single database table, fetching only new rows as they are added to the table.\",\n-                                \"keywords\": [\n-                                    \"incremental load\",\n-                                    \"rdbms\",\n-                                    \"jdbc\",\n-                                    \"cdc\",\n-                                    \"database\",\n-                                    \"table\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"maxvalue.*\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Each user-defined property specifies a SQL SELECT statement to run over the data, with the data that is selected being routed to the relationship whose name is the property name\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the relationship to route data to\",\n-                                \"value\": \"A SQL SELECT statement that is used to determine what data should be routed to this relationship.\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"Each user-defined property defines a new Relationship for this Processor.\",\n-                            \"name\": \"<Property Name>\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"cache-schema\": {\n+                            \"use-chunked-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"This property is no longer used. It remains solely for backward compatibility in order to avoid making existing Processors invalid upon upgrade. This property will be removed in future versions. Now, instead of forcing the user to understand the semantics of schema caching, the Processor caches up to 25 schemas and automatically rolls off the old schemas. This provides the same performance when caching was enabled previously and in some cases very significant performance improvements if caching was previously disabled.\",\n-                                \"displayName\": \"Cache Schema\",\n+                                \"description\": \"Enables / disables chunked encoding for upload requests. Set it to false only if your endpoint does not support chunked uploading.\",\n+                                \"displayName\": \"Use Chunked Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-schema\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n+                                \"name\": \"use-chunked-encoding\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\n+                            \"use-path-style-access\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When running the SQL statement against an incoming FlowFile, if the result has no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n-                                \"displayName\": \"Include Zero Record FlowFiles\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Path-style access can be enforced by setting this property to true. Set it to true if your endpoint does not support virtual-hosted-style requests, only path-style requests.\",\n+                                \"displayName\": \"Use Path Style Access\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n-                                \"required\": true,\n+                                \"name\": \"use-path-style-access\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the S3 object\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the SQL statement contains columns not present in input data), the original FlowFile it will be routed to this relationship\",\n+                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile is routed to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"aggregate\",\n-                            \"avro\",\n-                            \"calcite\",\n-                            \"csv\",\n-                            \"etl\",\n-                            \"filter\",\n-                            \"json\",\n-                            \"logs\",\n-                            \"modify\",\n-                            \"query\",\n-                            \"record\",\n-                            \"route\",\n-                            \"select\",\n-                            \"sql\",\n-                            \"text\",\n-                            \"transform\",\n-                            \"update\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Archive\",\n+                            \"Put\",\n+                            \"S3\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.QueryRecord\",\n-                        \"typeDescription\": \"Evaluates one or more SQL queries against the contents of a FlowFile. The result of the SQL query then becomes the content of the output FlowFile. This can be used, for example, for field-specific filtering, transformation, and row-level filtering. Columns can be renamed, simple calculations and aggregations performed, etc. The Processor is configured with a Record Reader Controller Service and a Record Writer service so as to allow flexibility in incoming and outgoing data formats. The Processor must be configured with at least one user-defined property. The name of the Property is the Relationship to route data to, and the value of the Property is a SQL SELECT statement that is used to specify how input data should be transformed/filtered. The SQL statement must be valid ANSI SQL and is powered by Apache Calcite. If the transformation fails, the original FlowFile is routed to the 'failure' relationship. Otherwise, the data selected will be routed to the associated relationship. If the Record Writer chooses to inherit the schema from the Record, it is important to note that the schema that is inherited will be from the ResultSet, rather than the input Record. This allows a single instance of the QueryRecord processor to have multiple queries, each of which returns a different set of columns and aggregations. As a result, though, the schema that is derived will have no schema name, so it is important that the configured Record Writer not attempt to write the Schema Name as an attribute if inheriting the Schema from the Record. See the Processor Usage documentation for more information.\",\n-                        \"useCases\": [\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.PutS3Object\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as an S3 Object to an Amazon S3 Bucket.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep. I.e., it is the exact opposite of what we want to remove.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to remove records where either the name is George OR the age is less than 18, we would add a   property named \\\"adults not george\\\" with a value that selects records where the name is not George AND the age is greater than or equal to 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"name\\\" <> 'George' AND \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults not george\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n-                                \"description\": \"Filter out records based on the values of the records' fields\",\n-                                \"keywords\": [\n-                                    \"filter out\",\n-                                    \"remove\",\n-                                    \"drop\",\n-                                    \"strip out\",\n-                                    \"record field\",\n-                                    \"sql\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The URL that can be used to access the S3 object\",\n+                                \"name\": \"s3.url\"\n                             },\n                             {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only records where the person is an adult (aged 18 or older), add a property named \\\"adults\\\"   with a value that is a SQL statement that selects records where the age is at least 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n-                                \"description\": \"Keep only specific records\",\n-                                \"keywords\": [\n-                                    \"keep\",\n-                                    \"filter\",\n-                                    \"retain\",\n-                                    \"select\",\n-                                    \"include\",\n-                                    \"record\",\n-                                    \"sql\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The S3 bucket where the Object was put in S3\",\n+                                \"name\": \"s3.bucket\"\n                             },\n                             {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep, such as `relevant fields`.\\nIts value is a SQL statement that selects the desired columns from a table named `FLOW_FILE` for relevant rows.\\nThere is no WHERE clause.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only the `name`, `age`, and `address` fields, add a property named `relevant fields`   with a value of `SELECT \\\"name\\\", \\\"age\\\", \\\"address\\\" FROM FLOWFILE`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the `relevant fields` Relationship should be connected to the next Processor in our flow.\\n\",\n-                                \"description\": \"Keep only specific fields in a a Record, where the names of the fields to keep are known\",\n-                                \"keywords\": [\n-                                    \"keep\",\n-                                    \"filter\",\n-                                    \"retain\",\n-                                    \"select\",\n-                                    \"include\",\n-                                    \"record\",\n-                                    \"fields\",\n-                                    \"sql\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The S3 key within where the Object was put in S3\",\n+                                \"name\": \"s3.key\"\n                             },\n                             {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nFor each route that you want to create, add a new property.\\nThe name of the property should be a short description of the data that should be selected for the route.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE`. The WHERE clause selects the data that should be included in the route.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\n\\nA new outbound relationship is created for each property that is added. The name of the relationship is the same as the property name.\\n\\nFor example, to route data based on whether or not it is a large transaction, we would add two properties:\\n`small transaction` would have a value such as `SELECT * FROM FLOWFILE WHERE transactionTotal < 100`\\n`large transaction` would have a value of `SELECT * FROM FLOWFILE WHERE transactionTotal >= 100`\\n\",\n-                                \"description\": \"Route record-oriented data for processing based on its contents\",\n-                                \"keywords\": [\n-                                    \"record\",\n-                                    \"route\",\n-                                    \"conditional processing\",\n-                                    \"field\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The S3 content type of the S3 Object that put in S3\",\n+                                \"name\": \"s3.contenttype\"\n+                            },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The version of the S3 Object that was put to S3\",\n+                                \"name\": \"s3.version\"\n                             },\n                             {\n-                                \"description\": \"The number of records selected by the query\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n                             },\n                             {\n-                                \"description\": \"The relation to which the FlowFile was routed\",\n-                                \"name\": \"QueryRecord.Route\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\n+                            },\n                             {\n-                                \"description\": \"Any field that matches the RecordPath set as the value will be removed.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A description of the field to remove\",\n-                                \"value\": \"A RecordPath to the field to be removed.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"delete\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"record\",\n-                            \"remove\",\n-                            \"schema\",\n-                            \"text\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RemoveRecordField\",\n-                        \"typeDescription\": \"Modifies the contents of a FlowFile that contains Record-oriented data (i.e. data that can be read via a RecordReader and written by a RecordWriter) by removing selected fields. This Processor requires that at least one user-defined Property be added. The name of the property is ignored by the processor, but could be a meaningful identifier for the user. The value of the property should indicate a RecordPath that determines the field to be removed. The processor executes the removal in the order in which these properties are added to the processor. Set the \\\"Record Writer\\\" to \\\"Inherit Record Schema\\\" in order to use the updated Record Schema modified when removing Fields.\",\n-                        \"useCases\": [\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n+                            },\n                             {\n-                                \"configuration\": \"Configure the Record Reader according to the incoming data format.\\nConfigure the Record Writer according to the desired output format.\\n\\nFor each field that you want to remove, add a single new property to the Processor.\\nThe name of the property can be anything but it's recommended to use a brief description of the field.\\nThe value of the property is a RecordPath that matches the field to remove.\\n\\nFor example, to remove the `name` and `email` fields, add two Properties:\\n`name` = `/name`\\n`email` = `/email`\\n\",\n-                                \"description\": \"Remove one or more fields from a Record, where the names of the fields to remove are known.\",\n-                                \"keywords\": [\n-                                    \"record\",\n-                                    \"field\",\n-                                    \"drop\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"expunge\",\n-                                    \"recordpath\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The ETag of the S3 Object\",\n+                                \"name\": \"s3.etag\"\n+                            },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The content disposition of the S3 Object that put in S3\",\n+                                \"name\": \"s3.contentdisposition\"\n+                            },\n+                            {\n+                                \"description\": \"The cache-control header of the S3 Object\",\n+                                \"name\": \"s3.cachecontrol\"\n+                            },\n+                            {\n+                                \"description\": \"The uploadId used to upload the Object to S3\",\n+                                \"name\": \"s3.uploadId\"\n+                            },\n+                            {\n+                                \"description\": \"A human-readable form of the expiration date of the S3 object, if one is set\",\n+                                \"name\": \"s3.expiration\"\n+                            },\n+                            {\n+                                \"description\": \"The server side encryption algorithm of the object\",\n+                                \"name\": \"s3.sseAlgorithm\"\n+                            },\n+                            {\n+                                \"description\": \"A human-readable form of the User Metadata of the S3 object, if any was set\",\n+                                \"name\": \"s3.usermetadata\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the encryption strategy, if any was set\",\n+                                \"name\": \"s3.encryptionStrategy\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -38783,793 +41699,508 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows users to specify a new name for each field that matches the RecordPath.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A RecordPath that identifies which field(s) to update\",\n-                                \"value\": \"The new name to assign to the Record field\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.RemoveRecordField\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"field\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"rename\",\n-                            \"schema\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RenameRecordField\",\n-                        \"typeDescription\": \"Renames one or more fields in each Record of a FlowFile. This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is the new name to assign to the Record Field that matches the RecordPath. The property value may use Expression Language to reference FlowFile attributes as well as the variables `field.name`, `field.value`, `field.type`, and `record.index`\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is the new name of the property.\\n\\nFor example, to rename the `name` field to `full_name`, add a property with a name of `/name` and a value of `full_name`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n-                                \"description\": \"Rename a field in each Record to a specific, known name.\",\n-                                \"keywords\": [\n-                                    \"rename\",\n-                                    \"field\",\n-                                    \"static\",\n-                                    \"specific\",\n-                                    \"name\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that can be used to determine the new name of the field.\\n\\nFor example, to rename the `addr` field to whatever value is stored in the `preferred_address_name` attribute, add a property with a name of `/name` and a value of `${preferred_address_name}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n-                                \"description\": \"Rename a field in each Record to a name that is derived from a FlowFile attribute.\",\n-                                \"keywords\": [\n-                                    \"rename\",\n-                                    \"field\",\n-                                    \"expression language\",\n-                                    \"EL\",\n-                                    \"flowfile\",\n-                                    \"attribute\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that references the `field.name` property.\\n\\nFor example, to rename all fields with a prefix of `pre_`, we add a property named `/*` and a value of `pre_${field.name}`. If we would like this to happen recursively, to nested fields as well, we use a property name of `//*` with the value of `pre_${field.name}`.\\n\\nTo make all field names uppercase, we can add a property named `//*` with a value of `${field.name:toUpper()}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n-                                \"description\": \"Rename a field in each Record to a new name that is derived from the current field name.\",\n-                                \"keywords\": [\n-                                    \"rename\",\n-                                    \"field\",\n-                                    \"expression language\",\n-                                    \"EL\",\n-                                    \"field.name\"\n-                                ],\n-                                \"notes\": \"This might be used, for example, to add a prefix or a suffix to some fields, or to transform the name of the field by making it uppercase.\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n-                                \"name\": \"record.index\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Evaluation Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Line-by-Line\",\n-                                        \"value\": \"Line-by-Line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Entire text\",\n-                                        \"value\": \"Entire text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Line-by-Line\",\n-                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) or buffer the entire file into memory (Entire Text) and run against that.\",\n-                                \"displayName\": \"Evaluation Mode\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Evaluation Mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line-by-Line Evaluation Mode\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"All\",\n-                                        \"value\": \"All\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"First-Line\",\n-                                        \"value\": \"First-Line\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Last-Line\",\n-                                        \"value\": \"Last-Line\"\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Except-First-Line\",\n-                                        \"value\": \"Except-First-Line\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Except-Last-Line\",\n-                                        \"value\": \"Except-Last-Line\"\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"All\",\n-                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) for all lines in the FlowFile, First Line (Header) alone, Last Line (Footer) alone, Except the First Line (Header) or Except the Last Line (Footer).\",\n-                                \"displayName\": \"Line-by-Line Evaluation Mode\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line-by-Line Evaluation Mode\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file or per line, depending on the Evaluation Mode) in order to apply the replacement. If 'Entire Text' (in Evaluation Mode) is selected and the FlowFile is larger than this value, the FlowFile will be routed to 'failure'. In 'Line-by-Line' Mode, if a single line is larger than this value, the FlowFile will be routed to 'failure'. A default value of 1 MB is provided, primarily for 'Entire Text' mode. In 'Line-by-Line' Mode, a value such as 8 KB or 16 KB is suggested. This value is ignored if the <Replacement Strategy> property is set to one of: Append, Prepend, Always Replace\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"(?s)(^.*$)\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Regex Replace\",\n-                                            \"Literal Replace\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Search Value to search for in the FlowFile content. Only used for 'Literal Replace' and 'Regex Replace' matching strategies\",\n-                                \"displayName\": \"Search Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Replacement Strategy\": {\n+                            \"Signer Override\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Insert the Replacement Value at the beginning of the FlowFile or the beginning of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be prepended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be prepended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be prepended to the entire text.\",\n-                                        \"displayName\": \"Prepend\",\n-                                        \"value\": \"Prepend\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Insert the Replacement Value at the end of the FlowFile or the end of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be appended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be appended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be appended to the entire text.\",\n-                                        \"displayName\": \"Append\",\n-                                        \"value\": \"Append\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Prepends text before the start of the FlowFile (or the start of each line, depending on the configuration of the Evaluation Mode property) as well as appending text to the end of the FlowFile (or the end of each line, depending on the configuration of the Evaluation Mode property)\",\n-                                        \"displayName\": \"Surround\",\n-                                        \"value\": \"Surround\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interpret the Search Value as a Regular Expression and replace all matches with the Replacement Value. The Replacement Value may reference Capturing Groups used in the Search Value by using a dollar-sign followed by the Capturing Group number, such as $1 or $2. If the Search Value is set to .* then everything is replaced without even evaluating the Regular Expression.\",\n-                                        \"displayName\": \"Regex Replace\",\n-                                        \"value\": \"Regex Replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n-                                        \"description\": \"Search for all instances of the Search Value and replace the matches with the Replacement Value.\",\n-                                        \"displayName\": \"Literal Replace\",\n-                                        \"value\": \"Literal Replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n                                     },\n                                     {\n-                                        \"description\": \"Always replaces the entire line or the entire contents of the FlowFile (depending on the value of the <Evaluation Mode> property) and does not bother searching for any value. When this strategy is chosen, the <Search Value> property is ignored.\",\n-                                        \"displayName\": \"Always Replace\",\n-                                        \"value\": \"Always Replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n                                     },\n                                     {\n-                                        \"description\": \"Substitute variable references (specified in ${var} form) using FlowFile attributes for looking up the replacement value by variable name. When this strategy is chosen, both the <Search Value> and <Replacement Value> properties are ignored.\",\n-                                        \"displayName\": \"Substitute Variables\",\n-                                        \"value\": \"Substitute Variables\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Regex Replace\",\n-                                \"description\": \"The strategy for how and what to replace within the FlowFile's text content.\",\n-                                \"displayName\": \"Replacement Strategy\",\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Replacement Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Signer Override\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Replacement Value\": {\n-                                \"defaultValue\": \"$1\",\n-                                \"dependencies\": [\n+                            \"append-tag\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Prepend\",\n-                                            \"Regex Replace\",\n-                                            \"Always Replace\",\n-                                            \"Append\",\n-                                            \"Literal Replace\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The value to insert using the 'Replacement Strategy'. Using \\\"Regex Replace\\\" back-references to Regular Expression capturing groups are supported, but back-references that reference capturing groups that do not exist in the regular expression will be treated as literal value. Back References may also be referenced using the Expression Language, as '$1', '$2', etc. The single-tick marks MUST be included, as these variables are not \\\"Standard\\\" attribute names (attribute names must be quoted unless they contain only numbers, letters, and _).\",\n-                                \"displayName\": \"Replacement Value\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If set to true, the tag will be appended to the existing set of tags on the S3 object. Any existing tags with the same key as the new tag will be updated with the specified value. If set to false, the existing tags will be removed and the new tag will be set on the S3 object.\",\n+                                \"displayName\": \"Append Tag\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Replacement Value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"append-tag\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Text to Append\": {\n+                            \"custom-signer-class-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Surround\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n                                     }\n                                 ],\n-                                \"description\": \"The text to append to the end of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n-                                \"displayName\": \"Text to Append\",\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Text to Append\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Text to Prepend\": {\n+                            \"custom-signer-module-location\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Surround\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n                                     }\n                                 ],\n-                                \"description\": \"The text to prepend to the start of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n-                                \"displayName\": \"Text to Prepend\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Text to Prepend\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that have been successfully processed are routed to this relationship. This includes both FlowFiles that had text replaced and those that did not.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"Change\",\n-                            \"Modify\",\n-                            \"Regex\",\n-                            \"Regular Expression\",\n-                            \"Replace\",\n-                            \"Text\",\n-                            \"Update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ReplaceText\",\n-                        \"typeDescription\": \"Updates the content of a FlowFile by searching for some textual value in the FlowFile content (via Regular Expression/regex, or literal value) and replacing the section of the content that matches with some alternate value. It can also be used to append or prepend text to the contents of a FlowFile.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Append\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be appended to the line.\\nFor example, to insert the text `<fin>` at the end of every line, we would set \\\"Replacement Value\\\" to `<fin>`.\\nWe can also use Expression Language. So to insert the filename at the end of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n-                                \"description\": \"Append text to the end of every line in a FlowFile\",\n-                                \"keywords\": [\n-                                    \"raw text\",\n-                                    \"append\",\n-                                    \"line\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Prepend\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be prepended to the line.\\nFor example, to insert the text `<start>` at the beginning of every line, we would set \\\"Replacement Value\\\" to `<start>`.\\nWe can also use Expression Language. So to insert the filename at the beginning of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n-                                \"description\": \"Prepend text to the beginning of every line in a FlowFile\",\n-                                \"keywords\": [\n-                                    \"raw text\",\n-                                    \"prepend\",\n-                                    \"line\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Literal Replace\\\"\\n\\\"Search Value\\\" is set to whatever text is in the FlowFile that needs to be replaced.\\n\\\"Replacement Value\\\" is set to the text that should replace the current text.\\n\\nFor example, to replace the word \\\"spider\\\" with \\\"arachnid\\\" we set \\\"Search Value\\\" to `spider` and set \\\"Replacement Value\\\" to `arachnid`.\\n\",\n-                                \"description\": \"Replace every occurrence of a literal string in the FlowFile with a different value\",\n-                                \"keywords\": [\n-                                    \"replace\",\n-                                    \"string\",\n-                                    \"text\",\n-                                    \"literal\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Regex Replace\\\"\\n\\\"Search Value\\\" is set to a regular expression that matches the text that should be transformed in a capturing group.\\n\\\"Replacement Value\\\" is set to a NiFi Expression Language expression that references `$1` (in quotes to escape the reference name).\\n\\nFor example, if we wanted to lowercase any occurrence of WOLF, TIGER, or LION, we would use a \\\"Search Value\\\" of `(WOLF|TIGER|LION)` and a \\\"Replacement Value\\\" of `${'$1':toLower()}`.\\nIf we want to replace any identifier with a hash of that identifier, we might use a \\\"Search Value\\\" of `identifier: (.*)` and a \\\"Replacement Value\\\" of `identifier: ${'$1':hash('sha256')}`\\n\",\n-                                \"description\": \"Transform every occurrence of a literal string in a FlowFile\",\n-                                \"keywords\": [\n-                                    \"replace\",\n-                                    \"transform\",\n-                                    \"raw text\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Entire text\\\"\\n\\\"Replacement Strategy\\\" = \\\"Always Replace\\\"\\n\\n\\\"Replacement Value\\\" is set to the new text that should be written to the FlowFile. This text might include NiFi Expression Language to reference one or more attributes.\\n\",\n-                                \"description\": \"Completely replace the contents of a FlowFile to a specific text\",\n-                                \"keywords\": [\n-                                    \"replace\",\n-                                    \"raw text\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mapping File\": {\n-                                \"description\": \"The name of the file (including the full path) containing the Mappings.\",\n-                                \"displayName\": \"Mapping File\",\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mapping File\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Mapping File Refresh Interval\": {\n-                                \"defaultValue\": \"60s\",\n-                                \"description\": \"The polling interval to check for updates to the mapping file. The default is 60s.\",\n-                                \"displayName\": \"Mapping File Refresh Interval\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Mapping File Refresh Interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Matching Group\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of the matching group of the provided regex to replace with the corresponding value from the mapping file (if it exists).\",\n-                                \"displayName\": \"Matching Group\",\n+                            \"tag-key\": {\n+                                \"description\": \"The key of the tag that will be set on the S3 Object\",\n+                                \"displayName\": \"Tag Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Matching Group\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"tag-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"tag-value\": {\n+                                \"description\": \"The value of the tag that will be set on the S3 Object\",\n+                                \"displayName\": \"Tag Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"tag-value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"\\\\S+\",\n-                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n-                                \"displayName\": \"Regular Expression\",\n+                            \"version\": {\n+                                \"description\": \"The Version of the Object to tag\",\n+                                \"displayName\": \"Version ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\n-                                \"required\": true,\n+                                \"name\": \"version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that have been successfully updated are routed to this relationship, as well as FlowFiles whose content does not match the given Regular Expression\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Change\",\n-                            \"Mapping\",\n-                            \"Modify\",\n-                            \"Regex\",\n-                            \"Regular Expression\",\n-                            \"Replace\",\n-                            \"Text\",\n-                            \"Update\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Archive\",\n+                            \"S3\",\n+                            \"Tag\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ReplaceTextWithMapping\",\n-                        \"typeDescription\": \"Updates the content of a FlowFile by evaluating a Regular Expression against it and replacing the section of the content that matches the Regular Expression with some alternate value provided in a mapping file.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.TagS3Object\",\n+                        \"typeDescription\": \"Adds or updates a tag on an Amazon S3 Object.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"One or more dynamic properties can be used to add attributes to FlowFiles passed to the 'retries_exceeded' relationship\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Exceeded FlowFile Attribute Key\",\n-                                \"value\": \"The value of the attribute added to the FlowFile\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Fail on Non-numerical Overwrite\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If the FlowFile already has the attribute defined in 'Retry Attribute' that is *not* a number, fail the FlowFile instead of resetting that value to '1'\",\n-                                \"displayName\": \"Fail on Non-numerical Overwrite\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail on Non-numerical Overwrite\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"maximum-retries\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The maximum number of times a FlowFile can be retried before being passed to the 'retries_exceeded' relationship\",\n-                                \"displayName\": \"Maximum Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum-retries\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"penalize-retries\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If set to 'true', this Processor will penalize input FlowFiles before passing them to the 'retry' relationship. This does not apply to the 'retries_exceeded' relationship.\",\n-                                \"displayName\": \"Penalize Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"penalize-retries\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"retry-attribute\": {\n-                                \"defaultValue\": \"flowfile.retries\",\n-                                \"description\": \"The name of the attribute that contains the current retry count for the FlowFile. WARNING: If the name matches an attribute already on the FlowFile that does not contain a numerical value, the processor will either overwrite that attribute with '1' or fail based on configuration.\",\n-                                \"displayName\": \"Retry Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"retry-attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"The tags associated with the S3 object will be written as part of the FlowFile attributes\",\n+                                \"name\": \"s3.tag.___\"\n                             },\n-                            \"reuse-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, fail the FlowFile regardless of current retry count\",\n-                                        \"displayName\": \"Fail on Reuse\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a warning message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Warn on Reuse\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a debug message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Reset Reuse\",\n-                                        \"value\": \"reset\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Defines how the Processor behaves if the retry FlowFile has a different retry UUID than the instance that received the FlowFile. This generally means that the attribute was not reset after being successfully retried by a previous instance of this processor.\",\n-                                \"displayName\": \"Reuse Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reuse-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Will read the attribute or attribute expression language result as defined in 'Retry Attribute'\",\n-                                \"name\": \"Retry Attribute\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Input FlowFile has exceeded the configured maximum retry count, do not pass this relationship back to the input Processor to terminate the limited feedback loop.\",\n-                                \"name\": \"retries_exceeded\"\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n                             },\n                             {\n-                                \"description\": \"Input FlowFile has not exceeded the configured maximum retry count, pass this relationship back to the input Processor to create a limited feedback loop.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\n                             },\n                             {\n-                                \"description\": \"The processor is configured such that a non-numerical value on 'Retry Attribute' results in a failure instead of resetting that value to '1'. This will immediately terminate the limited feedback loop. Might also include when 'Maximum Retries' contains attribute expression language that does not resolve to an Integer.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"FlowFile\",\n-                            \"Retry\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RetryFlowFile\",\n-                        \"typeDescription\": \"FlowFiles passed to this Processor have a 'Retry Attribute' value checked against a configured 'Maximum Retries' value. If the current attribute value is below the configured maximum, the FlowFile is passed to a retry relationship. The FlowFile may or may not be penalized in that condition. If the FlowFile's attribute value exceeds the configured maximum, the FlowFile will be passed to a 'retries_exceeded' relationship. WARNING: If the incoming FlowFile has a non-numeric value in the configured 'Retry Attribute' attribute, it will be reset to '1'. You may choose to fail the FlowFile instead of performing the reset. Additional dynamic properties can be defined for any attributes you wish to add to the FlowFiles transferred to 'retries_exceeded'. These attributes support attribute expression language.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n+                            },\n                             {\n-                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n-                                \"name\": \"Retry Attribute\"\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n                             },\n                             {\n-                                \"description\": \"User defined retry attribute with .uuid that determines what processor retried the FlowFile last\",\n-                                \"name\": \"Retry Attribute .uuid\"\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -39579,533 +42210,442 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Routes FlowFiles whose attributes match the Expression Language specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key\",\n+                                \"description\": \"User specified dynamic Properties are added as attributes to the notification\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"Expression Language expression that returns a boolean value indicating whether or not the FlowFile should be routed to this Relationship\"\n+                                \"name\": \"A name of an attribute to be added to the notification\",\n+                                \"value\": \"The attribute value\"\n                             }\n                         ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's Attribute Expression Language\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria to route on. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise. This adds a new attribute to the FlowFile whose name is equal to the property name.\\n\\nConnect the 'success' Relationship to RouteOnAttribute.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Set \\\"Routing Strategy\\\" to \\\"Route to Property name\\\"\\n\\nAdd two additional properties. For the first one, the name of the property should describe data that matches the criteria. The value is an Expression Language expression that checks if the attribute added by the PartitionRecord processor has a value of `true`. For example, `${criteria:equals('true')}`.\\nThe second property should have a name that describes data that does not match the criteria. The value is an Expression Language that evaluates to the opposite of the first property value. For example, `${criteria:equals('true'):not()}`.\\n\\nConnect each of the newly created Relationships to the appropriate downstream processors.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\n-                                    }\n-                                ],\n-                                \"description\": \"Route record-oriented data based on whether or not the record's values meet some criteria\",\n-                                \"keywords\": [\n-                                    \"record\",\n-                                    \"route\",\n-                                    \"content\",\n-                                    \"data\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Routing Strategy\": {\n+                            \"ARN Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A copy of the FlowFile will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n-                                        \"displayName\": \"Route to Property name\",\n-                                        \"value\": \"Route to Property name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the FlowFile to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if all match\",\n-                                        \"value\": \"Route to 'match' if all match\"\n+                                        \"description\": \"The ARN is the name of a topic\",\n+                                        \"displayName\": \"Topic ARN\",\n+                                        \"value\": \"Topic ARN\"\n                                     },\n                                     {\n-                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the FlowFile to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if any matches\",\n-                                        \"value\": \"Route to 'match' if any matches\"\n+                                        \"description\": \"The ARN is the name of a particular Target, used to notify a specific subscriber\",\n+                                        \"displayName\": \"Target ARN\",\n+                                        \"value\": \"Target ARN\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Route to Property name\",\n-                                \"description\": \"Specifies how to determine which relationship to use when evaluating the Expression Language\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"defaultValue\": \"Topic ARN\",\n+                                \"description\": \"The type of Amazon Resource Name that is being used.\",\n+                                \"displayName\": \"ARN Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Routing Strategy\",\n+                                \"name\": \"ARN Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n-                                \"name\": \"unmatched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"Expression Language\",\n-                            \"Regular Expression\",\n-                            \"attributes\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"routing\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteOnAttribute\",\n-                        \"typeDescription\": \"Routes FlowFiles based on their Attributes using the Attribute Expression Language\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set the \\\"Routing Strategy\\\" property to \\\"Route to Property name\\\".\\nFor each route that a FlowFile might be routed to, add a new property. The name of the property should describe the route.\\nThe value of the property is an Attribute Expression Language expression that returns a boolean value indicating whether or not a given FlowFile will be routed to the associated relationship.\\n\\nFor example, we might route data based on its file extension using the following properties:\\n    - \\\"Routing Strategy\\\" = \\\"Route to Property Name\\\"\\n    - \\\"jpg\\\" = \\\"${filename:endsWith('.jpg')}\\\"\\n    - \\\"png\\\" = \\\"${filename:endsWith('.png')}\\\"\\n    - \\\"pdf\\\" = \\\"${filename:endsWith('.pdf')}\\\"\\n\\nThe Processor will now have 3 relationships: `jpg`, `png`, and `pdf`. Each of these should be connected to the appropriate downstream processor.\\n\",\n-                                \"description\": \"Route data to one or more relationships based on its attributes using the NiFi Expression Language.\",\n-                                \"keywords\": [\n-                                    \"attributes\",\n-                                    \"routing\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\n                             },\n-                            {\n-                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to keep the data.\\nIf the data should be kept in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to keep the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nFor example, to keep files whose filename ends with .txt and have a file size of at least 1000 bytes, we will use the following properties:\\n    - \\\"ends_with_txt\\\" = \\\"${filename:endsWith('.txt')}\\\"\\n    - \\\"large_enough\\\" = \\\"${fileSize:ge(1000)}\\n    - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'unmatched' relationship.\\nConnect the 'matched' relationship to the next processor in the flow.\\n\",\n-                                \"description\": \"Keep data only if its attributes meet some criteria, such as its filename ends with .txt.\",\n-                                \"keywords\": [\n-                                    \"keep\",\n-                                    \"filter\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to drop the data.\\nIf the data should be dropped in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to drop the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nHere are a couple of examples for configuring the properties:\\n    Example 1 Use Case: Data should be dropped if its \\\"uuid\\\" attribute has an 'a' in it or ends with '0'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_0\\\" = \\\"${uuid:endsWith('0')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if any matches\\\"\\n    Example 2 Use Case: Data should be dropped if its 'uuid' attribute has an 'a' AND it ends with a '1'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_1\\\" = \\\"${uuid:endsWith('1')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'matched' relationship.\\nConnect the 'unmatched' relationship to the next processor in the flow.\\n\",\n-                                \"description\": \"Discard or drop a file based on attributes, such as filename.\",\n-                                \"keywords\": [\n-                                    \"discard\",\n-                                    \"drop\",\n-                                    \"filter\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The relation to which the FlowFile was routed\",\n-                                \"name\": \"RouteOnAttribute.Route\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Routes FlowFiles whose content matches the regular expression defined by Dynamic Property's value to the Relationship defined by the Dynamic Property's key\",\n+                            \"Amazon Resource Name (ARN)\": {\n+                                \"description\": \"The name of the resource to which notifications should be published\",\n+                                \"displayName\": \"Amazon Resource Name (ARN)\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"A Regular Expression\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's Regular Expression\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Amazon Resource Name (ARN)\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"description\": \"The character set in which the FlowFile's content is encoded\",\n                                 \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer in order to apply the regular expressions. If the size of the FlowFile exceeds this value, any amount of this value will be ignored\",\n-                                \"displayName\": \"Content Buffer Size\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Buffer Size\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Match Requirement\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must match exactly\",\n-                                        \"value\": \"content must match exactly\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must contain match\",\n-                                        \"value\": \"content must contain match\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"content must match exactly\",\n-                                \"description\": \"Specifies whether the entire content of the file must match the regular expression exactly, or if any part of the file (up to Content Buffer Size) can contain the regular expression in order to be considered a match\",\n-                                \"displayName\": \"Match Requirement\",\n+                            \"Deduplication Message ID\": {\n+                                \"description\": \"The token used for deduplication of sent messages\",\n+                                \"displayName\": \"Deduplication Message ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Match Requirement\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any of the user-supplied regular expressions will be routed to this relationship\",\n-                                \"name\": \"unmatched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"content\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"regular expression\",\n-                            \"route\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteOnContent\",\n-                        \"typeDescription\": \"Applies Regular Expressions to the content of a FlowFile and routes a copy of the FlowFile to each destination whose Regular Expression matches. Regular Expressions are added as User-Defined Properties where the name of the property is the name of the relationship and the value is a Regular Expression to match against the FlowFile content. User-Defined properties do support the Attribute Expression Language, but the results are interpreted as literal values, not Regular Expressions\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Routes data that matches the value specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key.\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Relationship Name\",\n-                                \"value\": \"value to match against\"\n-                            }\n-                        ],\n-                        \"dynamicRelationship\": {\n-                            \"description\": \"FlowFiles that match the Dynamic Property's value\",\n-                            \"name\": \"Name from Dynamic Property\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the incoming text is encoded\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Deduplication Message ID\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Grouping Regular Expression\": {\n-                                \"description\": \"Specifies a Regular Expression to evaluate against each line to determine which Group the line should be placed in. The Regular Expression must have at least one Capturing Group that defines the line's Group. If multiple Capturing Groups exist in the Regular Expression, the values from all Capturing Groups will be concatenated together. Two lines will not be placed into the same FlowFile unless they both have the same value for the Group (or neither line matches the Regular Expression). For example, to group together all lines in a CSV File by the first column, we can set this value to \\\"(.*?),.*\\\". Two lines that have the same Group but different Relationships will never be placed into the same FlowFile.\",\n-                                \"displayName\": \"Grouping Regular Expression\",\n+                            \"E-mail Subject\": {\n+                                \"description\": \"The optional subject to use for any subscribers that are subscribed via E-mail\",\n+                                \"displayName\": \"E-mail Subject\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Regular Expression\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"E-mail Subject\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Case\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, capitalization will not be taken into account when comparing values. E.g., matching against 'HELLO' or 'hello' will have the same result. This property is ignored if the 'Matching Strategy' is set to 'Satisfies Expression'.\",\n-                                \"displayName\": \"Ignore Case\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Case\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Leading/Trailing Whitespace\": {\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not the whitespace at the beginning and end of the lines should be ignored when evaluating the line.\",\n-                                \"displayName\": \"Ignore Leading/Trailing Whitespace\",\n+                            \"Message Group ID\": {\n+                                \"description\": \"If using FIFO, the message group to which the flowFile belongs\",\n+                                \"displayName\": \"Message Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Group ID\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Matching Strategy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Match lines based on whether or not the the text satisfies the given Expression Language expression. I.e., the line will match if the property value, evaluated as an Expression, returns true. The expression is able to reference FlowFile Attributes, as well as the variables 'line' (which is the text of the line to evaluate) and 'lineNo' (which is the line number being evaluated. This will be 1 for the first line, 2 for the second and so on).\",\n-                                        \"displayName\": \"Satisfies Expression\",\n-                                        \"value\": \"Satisfies Expression\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line starts with the property value\",\n-                                        \"displayName\": \"Starts With\",\n-                                        \"value\": \"Starts With\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line ends with the property value\",\n-                                        \"displayName\": \"Ends With\",\n-                                        \"value\": \"Ends With\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line contains the property value\",\n-                                        \"displayName\": \"Contains\",\n-                                        \"value\": \"Contains\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line equals the property value\",\n-                                        \"displayName\": \"Equals\",\n-                                        \"value\": \"Equals\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line exactly matches the Regular Expression that is provided as the Property value\",\n-                                        \"displayName\": \"Matches Regular Expression\",\n-                                        \"value\": \"Matches Regular Expression\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line contains some text that matches the Regular Expression that is provided as the Property value\",\n-                                        \"displayName\": \"Contains Regular Expression\",\n-                                        \"value\": \"Contains Regular Expression\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n-                                \"displayName\": \"Matching Strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Matching Strategy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Routing Strategy\": {\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Use JSON Structure\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Lines will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n-                                        \"displayName\": \"Route to each matching Property Name\",\n-                                        \"value\": \"Route to each matching Property Name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the line to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if line matches all conditions\",\n-                                        \"value\": \"Route to 'matched' if line matches all conditions\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the line to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if lines matches any condition\",\n-                                        \"value\": \"Route to 'matched' if lines matches any condition\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Route to each matching Property Name\",\n-                                \"description\": \"Specifies how to determine which Relationship(s) to use when evaluating the lines of incoming text against the 'Matching Strategy' and user-defined properties.\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the contents of the FlowFile must be JSON with a top-level element named 'default'. Additional elements can be used to send different messages to different protocols. See the Amazon SNS Documentation for more information.\",\n+                                \"displayName\": \"Use JSON Structure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Routing Strategy\",\n+                                \"name\": \"Use JSON Structure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original input file will be routed to this destination when the lines have been successfully routed to 1 or more relationships\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Data that does not satisfy the required user-defined rules will be routed to this Relationship\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Expression Language\",\n-                            \"Regular Expression\",\n-                            \"attributes\",\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"logs\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"routing\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"publish\",\n+                            \"pubsub\",\n+                            \"put\",\n+                            \"sns\",\n+                            \"topic\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RouteText\",\n-                        \"typeDescription\": \"Routes textual data based on a set of user-defined rules. Each line in an incoming FlowFile is compared against the values specified by user-defined Properties. The mechanism by which the text is compared to these user-defined properties is defined by the 'Matching Strategy'. The data is then routed according to these rules, routing each line of the text individually.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Matches Regular Expression\\\"\\n\\\"Empty Line\\\" = \\\"^$\\\"\\n\\nAuto-terminate the \\\"Empty Line\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n-                                \"description\": \"Drop blank or empty lines from the FlowFile's content.\",\n-                                \"keywords\": [\n-                                    \"filter\",\n-                                    \"drop\",\n-                                    \"empty\",\n-                                    \"blank\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"strip out\",\n-                                    \"lines\",\n-                                    \"text\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Satisfies Expression\\\"\\n\\nAn additional property should be added named \\\"Filter Out.\\\" The value should be a NiFi Expression Language Expression that can refer to two variables (in addition to FlowFile attributes): `line`, which is the line of text being evaluated; and `lineNo`, which is the line number in the file (starting with 1). The Expression should return `true` for any line that should be dropped.\\n\\nFor example, to remove any line that starts with a # symbol, we can set \\\"Filter Out\\\" to `${line:startsWith(\\\"#\\\")}`.\\nWe could also remove the first 2 lines of text by setting \\\"Filter Out\\\" to `${lineNo:le(2)}`. Note that we use the `le` function because we want lines numbers less than or equal to `2`, since the line index is 1-based.\\n\\nAuto-terminate the \\\"Filter Out\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n-                                \"description\": \"Remove specific lines of text from a file, such as those containing a specific word or having a line length over some threshold.\",\n-                                \"keywords\": [\n-                                    \"filter\",\n-                                    \"drop\",\n-                                    \"empty\",\n-                                    \"blank\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"strip out\",\n-                                    \"lines\",\n-                                    \"text\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n-                                \"name\": \"RouteText.Route\"\n-                            },\n-                            {\n-                                \"description\": \"The value captured by all capturing groups in the 'Grouping Regular Expression' property. If this property is not set or contains no capturing groups, this attribute will not be added.\",\n-                                \"name\": \"RouteText.Group\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.processors.aws.sns.PutSNS\",\n+                        \"typeDescription\": \"Sends the content of a FlowFile as a notification to the Amazon Simple Notification Service\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -40118,547 +42658,369 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"sample-record-interval\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"interval\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the number of records to skip before writing a record to the outgoing FlowFile. This property is only used if Sampling Strategy is set to Interval Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, a value of one (1) will cause all records to be included, and a value of two (2) will cause half the records to be included, and so on.\",\n-                                \"displayName\": \"Sampling Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sample-record-probability\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n-                                \"displayName\": \"Sampling Probability\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-probability\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-random-seed\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\",\n-                                            \"reservoir\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a particular number to use as the seed for the random number generator (used by probabilistic strategies). Setting this property will ensure the same records are selected even when using probabilistic strategies.\",\n-                                \"displayName\": \"Random Seed\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-random-seed\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-range\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"range\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the range of records to include in the sample, from 1 to the total number of records. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth records, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-). If this property is unset, all records will be included.\",\n-                                \"displayName\": \"Sampling Range\",\n+                            \"Queue URL\": {\n+                                \"description\": \"The URL of the queue delete from\",\n+                                \"displayName\": \"Queue URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-range\",\n+                                \"name\": \"Queue URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-reservoir\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"reservoir\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the number of records to write to the outgoing FlowFile. This property is only used if Sampling Strategy is set to reservoir-based strategies such as Reservoir Sampling.\",\n-                                \"displayName\": \"Reservoir Size\",\n+                            \"Receipt Handle\": {\n+                                \"defaultValue\": \"${sqs.receipt.handle}\",\n+                                \"description\": \"The identifier that specifies the receipt of the message\",\n+                                \"displayName\": \"Receipt Handle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-reservoir\",\n+                                \"name\": \"Receipt Handle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-sampling-strategy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Selects every Nth record where N is the value of the 'Interval Value' property\",\n-                                        \"displayName\": \"Interval Sampling\",\n-                                        \"value\": \"interval\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Creates a sample of records based on the index (i.e. record number) of the records using the specified range. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth record, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-).\",\n-                                        \"displayName\": \"Range Sampling\",\n-                                        \"value\": \"range\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Selects each record with probability P where P is the value of the 'Selection Probability' property\",\n-                                        \"displayName\": \"Probabilistic Sampling\",\n-                                        \"value\": \"probabilistic\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Creates a sample of K records where each record has equal probability of being included, where K is the value of the 'Reservoir Size' property. Note that if the value is very large it may cause memory issues as the reservoir is kept in-memory.\",\n-                                        \"displayName\": \"Reservoir Sampling\",\n-                                        \"value\": \"reservoir\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"reservoir\",\n-                                \"description\": \"Specifies which method to use for sampling records from the incoming FlowFile\",\n-                                \"displayName\": \"Sampling Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sample-record-sampling-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, any record is not valid), the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile is routed to this relationship if sampling is successful\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"interval\",\n-                            \"range\",\n-                            \"record\",\n-                            \"reservoir\",\n-                            \"sample\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SampleRecord\",\n-                        \"typeDescription\": \"Samples the records of a FlowFile based on a specified sampling strategy (such as Reservoir Sampling). The resulting FlowFile may be of a fixed number of records (in the case of reservoir-based algorithms) or some subset of the total number of records (in the case of probabilistic sampling), or a deterministic number of records (in the case of interval sampling).\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Attribute Pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Regular Expression that specifies the names of attributes whose values will be matched against the terms in the dictionary\",\n-                                \"displayName\": \"Attribute Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Pattern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Dictionary File\": {\n-                                \"description\": \"A new-line-delimited text file that includes the terms that should trigger a match. Empty lines are ignored.  The contents of the text file are loaded into memory when the processor is scheduled and reloaded when the contents are modified.\",\n-                                \"displayName\": \"Dictionary File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Dictionary File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Dictionary Filter Pattern\": {\n-                                \"description\": \"A Regular Expression that will be applied to each line in the dictionary file. If the regular expression does not match the line, the line will not be included in the list of terms to search for. If a Matching Group is specified, only the portion of the term that matches that Matching Group will be used instead of the entire term. If not specified, all terms in the dictionary will be used and each term will consist of the text of the entire line in the file\",\n-                                \"displayName\": \"Dictionary Filter Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary Filter Pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Match Criteria\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"At Least 1 Must Match\",\n-                                        \"value\": \"At Least 1 Must Match\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"All Must Match\",\n-                                        \"value\": \"All Must Match\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"At Least 1 Must Match\",\n-                                \"description\": \"If set to All Must Match, then FlowFiles will be routed to 'matched' only if all specified attributes' values are found in the dictionary. If set to At Least 1 Must Match, FlowFiles will be routed to 'matched' if any attribute specified is found in the dictionary\",\n-                                \"displayName\": \"Match Criteria\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Match Criteria\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles whose attributes are not found in the dictionary will be routed to this relationship\",\n-                                \"name\": \"unmatched\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles whose attributes are found in the dictionary will be routed to this relationship\",\n-                                \"name\": \"matched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"find\",\n-                            \"lookup\",\n-                            \"scan\",\n-                            \"search\",\n-                            \"text\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ScanAttribute\",\n-                        \"typeDescription\": \"Scans the specified attributes of FlowFiles, checking to see if any of their values are present within the specified dictionary of terms\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Dictionary Encoding\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"binary\",\n-                                        \"value\": \"binary\"\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"text\",\n-                                \"description\": \"Indicates how the dictionary is encoded. If 'text', dictionary terms are new-line delimited and UTF-8 encoded; if 'binary', dictionary terms are denoted by a 4-byte integer indicating the term length followed by the term itself\",\n-                                \"displayName\": \"Dictionary Encoding\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary Encoding\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary File\": {\n-                                \"description\": \"The filename of the terms dictionary\",\n-                                \"displayName\": \"Dictionary File\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any term in the dictionary are routed to this relationship\",\n-                                \"name\": \"unmatched\"\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that match at least one term in the dictionary are routed to this relationship\",\n-                                \"name\": \"matched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"aho-corasick\",\n-                            \"byte sequence\",\n-                            \"content\",\n-                            \"dictionary\",\n-                            \"find\",\n-                            \"scan\",\n-                            \"search\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ScanContent\",\n-                        \"typeDescription\": \"Scans the content of FlowFiles for terms that are found in a user-supplied dictionary. If a term is matched, the UTF-8 encoded version of the term will be added to the FlowFile using the 'matching.term' attribute\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The term that caused the Processor to route the FlowFile to the 'matched' relationship; if FlowFile is routed to the 'unmatched' relationship, this attribute is not added\",\n-                                \"name\": \"matching.term\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Segment Size\": {\n-                                \"description\": \"The maximum data size in bytes for each segment\",\n-                                \"displayName\": \"Segment Size\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Segment Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n+                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All segments will be sent to this relationship. If the file was small enough that it was not segmented, a copy of the original is sent to this relationship as well as original\",\n-                                \"name\": \"segments\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"segment\",\n-                            \"split\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Delete\",\n+                            \"Queue\",\n+                            \"SQS\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SegmentContent\",\n-                        \"typeDescription\": \"Segments a FlowFile into multiple smaller segments on byte boundaries. Each segment is given the following attributes: fragment.identifier, fragment.index, fragment.count, segment.original.filename; these attributes can then be used by the MergeContent processor in order to reconstitute the original FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n+                        \"typeDescription\": \"Deletes a message from an Amazon Simple Queuing Service Queue\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of segments generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The filename will be updated to include the parent's filename, the segment index, and the segment count\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -40667,288 +43029,1312 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Byte Sequence\": {\n-                                \"description\": \"A representation of bytes to look for and upon which to split the source file into separate files\",\n-                                \"displayName\": \"Byte Sequence\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Byte Sequence Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"Hexadecimal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Hexadecimal\",\n-                                \"description\": \"Specifies how the <Byte Sequence> property should be interpreted\",\n-                                \"displayName\": \"Byte Sequence Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Byte Sequence Location\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Keep the Byte Sequence at the end of the first split if <Keep Byte Sequence> is true\",\n-                                        \"displayName\": \"Trailing\",\n-                                        \"value\": \"Trailing\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Keep the Byte Sequence at the beginning of the second split if <Keep Byte Sequence> is true\",\n-                                        \"displayName\": \"Leading\",\n-                                        \"value\": \"Leading\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Trailing\",\n-                                \"description\": \"If <Keep Byte Sequence> is set to true, specifies whether the byte sequence should be added to the end of the first split or the beginning of the second; if <Keep Byte Sequence> is false, this property is ignored.\",\n-                                \"displayName\": \"Byte Sequence Location\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence Location\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Keep Byte Sequence\": {\n+                            \"Auto Delete Messages\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether or not the Byte Sequence should be included with each Split\",\n-                                \"displayName\": \"Keep Byte Sequence\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Byte Sequence\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All Splits will be routed to the splits relationship\",\n-                                \"name\": \"splits\"\n-                            },\n-                            {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"binary\",\n-                            \"content\",\n-                            \"split\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitContent\",\n-                        \"typeDescription\": \"Splits incoming FlowFiles by a specified byte sequence\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"JsonPath Expression\": {\n-                                \"description\": \"A JsonPath expression that indicates the array element to split into JSON/scalar fragments.\",\n-                                \"displayName\": \"JsonPath Expression\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether the messages should be automatically deleted by the processors once they have been received.\",\n+                                \"displayName\": \"Auto Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JsonPath Expression\",\n+                                \"name\": \"Auto Delete Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of messages to send in a single network request\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value Representation\": {\n+                            \"Character Set\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"empty string\",\n-                                        \"value\": \"empty string\"\n+                                        \"displayName\": \"Big5\",\n+                                        \"value\": \"Big5\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"the string 'null'\",\n-                                        \"value\": \"the string 'null'\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"empty string\",\n-                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n-                                \"displayName\": \"Null Value Representation\",\n+                                        \"displayName\": \"Big5-HKSCS\",\n+                                        \"value\": \"Big5-HKSCS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CESU-8\",\n+                                        \"value\": \"CESU-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EUC-JP\",\n+                                        \"value\": \"EUC-JP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EUC-KR\",\n+                                        \"value\": \"EUC-KR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB18030\",\n+                                        \"value\": \"GB18030\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB2312\",\n+                                        \"value\": \"GB2312\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GBK\",\n+                                        \"value\": \"GBK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM-Thai\",\n+                                        \"value\": \"IBM-Thai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM00858\",\n+                                        \"value\": \"IBM00858\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01140\",\n+                                        \"value\": \"IBM01140\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01141\",\n+                                        \"value\": \"IBM01141\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01142\",\n+                                        \"value\": \"IBM01142\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01143\",\n+                                        \"value\": \"IBM01143\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01144\",\n+                                        \"value\": \"IBM01144\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01145\",\n+                                        \"value\": \"IBM01145\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01146\",\n+                                        \"value\": \"IBM01146\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01147\",\n+                                        \"value\": \"IBM01147\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01148\",\n+                                        \"value\": \"IBM01148\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01149\",\n+                                        \"value\": \"IBM01149\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM037\",\n+                                        \"value\": \"IBM037\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM1026\",\n+                                        \"value\": \"IBM1026\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM1047\",\n+                                        \"value\": \"IBM1047\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM273\",\n+                                        \"value\": \"IBM273\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM277\",\n+                                        \"value\": \"IBM277\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM278\",\n+                                        \"value\": \"IBM278\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM280\",\n+                                        \"value\": \"IBM280\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM284\",\n+                                        \"value\": \"IBM284\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM285\",\n+                                        \"value\": \"IBM285\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM290\",\n+                                        \"value\": \"IBM290\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM297\",\n+                                        \"value\": \"IBM297\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM420\",\n+                                        \"value\": \"IBM420\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM424\",\n+                                        \"value\": \"IBM424\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM437\",\n+                                        \"value\": \"IBM437\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM500\",\n+                                        \"value\": \"IBM500\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM775\",\n+                                        \"value\": \"IBM775\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM850\",\n+                                        \"value\": \"IBM850\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM852\",\n+                                        \"value\": \"IBM852\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM855\",\n+                                        \"value\": \"IBM855\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM857\",\n+                                        \"value\": \"IBM857\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM860\",\n+                                        \"value\": \"IBM860\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM861\",\n+                                        \"value\": \"IBM861\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM862\",\n+                                        \"value\": \"IBM862\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM863\",\n+                                        \"value\": \"IBM863\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM864\",\n+                                        \"value\": \"IBM864\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM865\",\n+                                        \"value\": \"IBM865\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM866\",\n+                                        \"value\": \"IBM866\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM868\",\n+                                        \"value\": \"IBM868\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM869\",\n+                                        \"value\": \"IBM869\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM870\",\n+                                        \"value\": \"IBM870\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM871\",\n+                                        \"value\": \"IBM871\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM918\",\n+                                        \"value\": \"IBM918\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-CN\",\n+                                        \"value\": \"ISO-2022-CN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-JP\",\n+                                        \"value\": \"ISO-2022-JP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-JP-2\",\n+                                        \"value\": \"ISO-2022-JP-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-KR\",\n+                                        \"value\": \"ISO-2022-KR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-13\",\n+                                        \"value\": \"ISO-8859-13\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-15\",\n+                                        \"value\": \"ISO-8859-15\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-16\",\n+                                        \"value\": \"ISO-8859-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-2\",\n+                                        \"value\": \"ISO-8859-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-3\",\n+                                        \"value\": \"ISO-8859-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-4\",\n+                                        \"value\": \"ISO-8859-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-5\",\n+                                        \"value\": \"ISO-8859-5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-6\",\n+                                        \"value\": \"ISO-8859-6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-7\",\n+                                        \"value\": \"ISO-8859-7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-8\",\n+                                        \"value\": \"ISO-8859-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-9\",\n+                                        \"value\": \"ISO-8859-9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JIS_X0201\",\n+                                        \"value\": \"JIS_X0201\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JIS_X0212-1990\",\n+                                        \"value\": \"JIS_X0212-1990\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KOI8-R\",\n+                                        \"value\": \"KOI8-R\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KOI8-U\",\n+                                        \"value\": \"KOI8-U\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Shift_JIS\",\n+                                        \"value\": \"Shift_JIS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TIS-620\",\n+                                        \"value\": \"TIS-620\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-32\",\n+                                        \"value\": \"UTF-32\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-32BE\",\n+                                        \"value\": \"UTF-32BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-32LE\",\n+                                        \"value\": \"UTF-32LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1250\",\n+                                        \"value\": \"windows-1250\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1251\",\n+                                        \"value\": \"windows-1251\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1252\",\n+                                        \"value\": \"windows-1252\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1253\",\n+                                        \"value\": \"windows-1253\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1254\",\n+                                        \"value\": \"windows-1254\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1255\",\n+                                        \"value\": \"windows-1255\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1256\",\n+                                        \"value\": \"windows-1256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1257\",\n+                                        \"value\": \"windows-1257\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1258\",\n+                                        \"value\": \"windows-1258\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-31j\",\n+                                        \"value\": \"windows-31j\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-Big5-HKSCS-2001\",\n+                                        \"value\": \"x-Big5-HKSCS-2001\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-Big5-Solaris\",\n+                                        \"value\": \"x-Big5-Solaris\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-euc-jp-linux\",\n+                                        \"value\": \"x-euc-jp-linux\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-EUC-TW\",\n+                                        \"value\": \"x-EUC-TW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-eucJP-Open\",\n+                                        \"value\": \"x-eucJP-Open\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1006\",\n+                                        \"value\": \"x-IBM1006\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1025\",\n+                                        \"value\": \"x-IBM1025\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1046\",\n+                                        \"value\": \"x-IBM1046\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1097\",\n+                                        \"value\": \"x-IBM1097\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1098\",\n+                                        \"value\": \"x-IBM1098\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1112\",\n+                                        \"value\": \"x-IBM1112\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1122\",\n+                                        \"value\": \"x-IBM1122\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1123\",\n+                                        \"value\": \"x-IBM1123\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1124\",\n+                                        \"value\": \"x-IBM1124\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1129\",\n+                                        \"value\": \"x-IBM1129\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1166\",\n+                                        \"value\": \"x-IBM1166\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1364\",\n+                                        \"value\": \"x-IBM1364\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1381\",\n+                                        \"value\": \"x-IBM1381\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1383\",\n+                                        \"value\": \"x-IBM1383\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM29626C\",\n+                                        \"value\": \"x-IBM29626C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM300\",\n+                                        \"value\": \"x-IBM300\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM33722\",\n+                                        \"value\": \"x-IBM33722\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM737\",\n+                                        \"value\": \"x-IBM737\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM833\",\n+                                        \"value\": \"x-IBM833\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM834\",\n+                                        \"value\": \"x-IBM834\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM856\",\n+                                        \"value\": \"x-IBM856\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM874\",\n+                                        \"value\": \"x-IBM874\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM875\",\n+                                        \"value\": \"x-IBM875\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM921\",\n+                                        \"value\": \"x-IBM921\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM922\",\n+                                        \"value\": \"x-IBM922\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM930\",\n+                                        \"value\": \"x-IBM930\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM933\",\n+                                        \"value\": \"x-IBM933\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM935\",\n+                                        \"value\": \"x-IBM935\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM937\",\n+                                        \"value\": \"x-IBM937\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM939\",\n+                                        \"value\": \"x-IBM939\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM942\",\n+                                        \"value\": \"x-IBM942\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM942C\",\n+                                        \"value\": \"x-IBM942C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM943\",\n+                                        \"value\": \"x-IBM943\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM943C\",\n+                                        \"value\": \"x-IBM943C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM948\",\n+                                        \"value\": \"x-IBM948\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM949\",\n+                                        \"value\": \"x-IBM949\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM949C\",\n+                                        \"value\": \"x-IBM949C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM950\",\n+                                        \"value\": \"x-IBM950\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM964\",\n+                                        \"value\": \"x-IBM964\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM970\",\n+                                        \"value\": \"x-IBM970\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-ISCII91\",\n+                                        \"value\": \"x-ISCII91\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-ISO-2022-CN-CNS\",\n+                                        \"value\": \"x-ISO-2022-CN-CNS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-ISO-2022-CN-GB\",\n+                                        \"value\": \"x-ISO-2022-CN-GB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-iso-8859-11\",\n+                                        \"value\": \"x-iso-8859-11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-JIS0208\",\n+                                        \"value\": \"x-JIS0208\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-JISAutoDetect\",\n+                                        \"value\": \"x-JISAutoDetect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-Johab\",\n+                                        \"value\": \"x-Johab\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacArabic\",\n+                                        \"value\": \"x-MacArabic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacCentralEurope\",\n+                                        \"value\": \"x-MacCentralEurope\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacCroatian\",\n+                                        \"value\": \"x-MacCroatian\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacCyrillic\",\n+                                        \"value\": \"x-MacCyrillic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacDingbat\",\n+                                        \"value\": \"x-MacDingbat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacGreek\",\n+                                        \"value\": \"x-MacGreek\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacHebrew\",\n+                                        \"value\": \"x-MacHebrew\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacIceland\",\n+                                        \"value\": \"x-MacIceland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacRoman\",\n+                                        \"value\": \"x-MacRoman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacRomania\",\n+                                        \"value\": \"x-MacRomania\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacSymbol\",\n+                                        \"value\": \"x-MacSymbol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacThai\",\n+                                        \"value\": \"x-MacThai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacTurkish\",\n+                                        \"value\": \"x-MacTurkish\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacUkraine\",\n+                                        \"value\": \"x-MacUkraine\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MS932_0213\",\n+                                        \"value\": \"x-MS932_0213\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MS950-HKSCS\",\n+                                        \"value\": \"x-MS950-HKSCS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MS950-HKSCS-XP\",\n+                                        \"value\": \"x-MS950-HKSCS-XP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-mswin-936\",\n+                                        \"value\": \"x-mswin-936\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-PCK\",\n+                                        \"value\": \"x-PCK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-SJIS_0213\",\n+                                        \"value\": \"x-SJIS_0213\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-UTF-16LE-BOM\",\n+                                        \"value\": \"x-UTF-16LE-BOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"X-UTF-32BE-BOM\",\n+                                        \"value\": \"X-UTF-32BE-BOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"X-UTF-32LE-BOM\",\n+                                        \"value\": \"X-UTF-32LE-BOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-50220\",\n+                                        \"value\": \"x-windows-50220\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-50221\",\n+                                        \"value\": \"x-windows-50221\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-874\",\n+                                        \"value\": \"x-windows-874\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-949\",\n+                                        \"value\": \"x-windows-949\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-950\",\n+                                        \"value\": \"x-windows-950\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-iso2022jp\",\n+                                        \"value\": \"x-windows-iso2022jp\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set that should be used to encode the textual content of the SQS message\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue URL\": {\n+                                \"description\": \"The URL of the queue to get messages from\",\n+                                \"displayName\": \"Queue URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Queue URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Message Wait Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The maximum amount of time to wait on a long polling receive call. Setting this to a value of 1 second or greater will reduce the number of SQS requests and decrease fetch latency at the cost of a constantly active thread.\",\n+                                \"displayName\": \"Receive Message Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Message Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"15 mins\",\n+                                \"description\": \"The amount of time after a message is received but not deleted that the message is hidden from other consumers\",\n+                                \"displayName\": \"Visibility Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Visibility Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content (as a JsonNode object) is read into memory, in addition to all of the generated FlowFiles representing the split JSON. If many splits are generated due to the size of the JSON, or how the JSON is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"json\",\n-                            \"jsonpath\",\n-                            \"split\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Fetch\",\n+                            \"Get\",\n+                            \"Poll\",\n+                            \"Queue\",\n+                            \"SQS\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitJson\",\n-                        \"typeDescription\": \"Splits a JSON File into multiple, separate FlowFiles for an array element specified by a JsonPath expression. Each generated FlowFile is comprised of an element of the specified array and transferred to relationship 'split,' with the original file transferred to the 'original' relationship. If the specified JsonPath is not found or does not evaluate to an array element, the original file is routed to 'failure' and no files are generated.\",\n+                        \"type\": \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n+                        \"typeDescription\": \"Fetches messages from an Amazon Simple Queuing Service Queue\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The MD5 sum of the message\",\n+                                \"name\": \"hash.value\"\n                             },\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"MD5\",\n+                                \"name\": \"hash.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The unique identifier of the SQS message\",\n+                                \"name\": \"sqs.message.id\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"The SQS Receipt Handle that is to be used to delete the message from the queue\",\n+                                \"name\": \"sqs.receipt.handle\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -40956,134 +44342,416 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows the user to add key/value pairs as Message Attributes by adding a property whose name will become the name of the Message Attribute and value will become the value of the Message Attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a Message Attribute to add to the message\",\n+                                \"value\": \"The value of the Message Attribute\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Delay\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"The amount of time to delay the message before it becomes available to consumers\",\n+                                \"displayName\": \"Delay\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Delay\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue URL\": {\n+                                \"description\": \"The URL of the queue to act upon\",\n+                                \"displayName\": \"Queue URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Queue URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Records Per Split\": {\n-                                \"description\": \"Specifies how many records should be written to each 'split' or 'segment' FlowFile\",\n-                                \"displayName\": \"Records Per Split\",\n+                            \"deduplication-message-id\": {\n+                                \"description\": \"The token used for deduplication of sent messages\",\n+                                \"displayName\": \"Deduplication Message ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Records Per Split\",\n-                                \"required\": true,\n+                                \"name\": \"deduplication-message-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-group-id\": {\n+                                \"description\": \"If using FIFO, the message group to which the FlowFile belongs\",\n+                                \"displayName\": \"Message Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"message-group-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.GetSQS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The individual 'segments' of the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"splits\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successfully splitting an input FlowFile, the original FlowFile will be sent to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"schema\",\n-                            \"split\",\n-                            \"text\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Publish\",\n+                            \"Put\",\n+                            \"Queue\",\n+                            \"SQS\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitRecord\",\n-                        \"typeDescription\": \"Splits up an input FlowFile that is in a record-oriented data format into multiple smaller FlowFiles\",\n+                        \"type\": \"org.apache.nifi.processors.aws.sqs.PutSQS\",\n+                        \"typeDescription\": \"Publishes a message to an Amazon Simple Queuing Service Queue\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer for the FlowFiles routed to the 'splits' Relationship.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile. This is added to FlowFiles that are routed to the 'splits' Relationship.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-asana-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41092,554 +44760,1414 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Header Line Count\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of lines that should be considered part of the header; the header lines will be duplicated to all split files\",\n-                                \"displayName\": \"Header Line Count\",\n+                            \"asana-controller-service\": {\n+                                \"description\": \"Specify which controller service to use for accessing Asana.\",\n+                                \"displayName\": \"Asana Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Line Count\",\n+                                \"name\": \"asana-controller-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-asana-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"asana-object-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"asana-collect-tasks\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Task Attachments\",\n+                                        \"value\": \"asana-collect-task-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect projects of the workspace.\",\n+                                        \"displayName\": \"Projects\",\n+                                        \"value\": \"asana-collect-projects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect tags of the workspace.\",\n+                                        \"displayName\": \"Tags\",\n+                                        \"value\": \"asana-collect-tags\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the workspace.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"asana-collect-users\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified project.\",\n+                                        \"displayName\": \"Members of a Project\",\n+                                        \"value\": \"asana-collect-project-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect teams of the workspace.\",\n+                                        \"displayName\": \"Teams\",\n+                                        \"value\": \"asana-collect-teams\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified team.\",\n+                                        \"displayName\": \"Team Members\",\n+                                        \"value\": \"asana-collect-team-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Stories of Tasks\",\n+                                        \"value\": \"asana-collect-stories\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect status updates of the specified project.\",\n+                                        \"displayName\": \"Status Updates of a Project\",\n+                                        \"value\": \"asana-collect-project-status-updates\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect attached files of project status updates.\",\n+                                        \"displayName\": \"Attachments of Status Updates\",\n+                                        \"value\": \"asana-collect-project-status-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n+                                        \"displayName\": \"Events of a Project\",\n+                                        \"value\": \"asana-collect-project-events\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"asana-collect-tasks\",\n+                                \"description\": \"Specify what kind of objects to be collected from Asana\",\n+                                \"displayName\": \"Object Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-object-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Header Line Marker Characters\": {\n-                                \"description\": \"The first character(s) on the line of the datafile which signifies a header line. This value is ignored when Header Line Count is non-zero. The first line not containing the Header Line Marker Characters and all subsequent lines are considered non-header\",\n-                                \"displayName\": \"Header Line Marker Characters\",\n+                            \"asana-output-batch-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of items batched together in a single Flow File. If set to 1 (default), then each item is transferred in a separate Flow File and each will have an asana.gid attribute, to help identifying the fetched item on the server side, if needed. If the batch size is greater than 1, then the specified amount of items are batched together in a single Flow File as a Json array, and the Flow Files won't have the asana.gid attribute.\",\n+                                \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Line Marker Characters\",\n-                                \"required\": false,\n+                                \"name\": \"asana-output-batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Split Count\": {\n-                                \"description\": \"The number of lines that will be added to each split file, excluding header lines. A value of zero requires Maximum Fragment Size to be set, and line count will not be considered in determining splits.\",\n-                                \"displayName\": \"Line Split Count\",\n+                            \"asana-project-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-project-members\",\n+                                            \"asana-collect-project-status-attachments\",\n+                                            \"asana-collect-project-status-updates\",\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\",\n+                                            \"asana-collect-project-events\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects in this project. Case sensitive.\",\n+                                \"displayName\": \"Project Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Split Count\",\n+                                \"name\": \"asana-project-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Fragment Size\": {\n-                                \"description\": \"The maximum size of each split file, including header lines. NOTE: in the case where a single line exceeds this property (including headers, if applicable), that line will be output in a split of its own which exceeds this Maximum Fragment Size setting.\",\n-                                \"displayName\": \"Maximum Fragment Size\",\n+                            \"asana-section-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects in this section. Case sensitive.\",\n+                                \"displayName\": \"Section Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Fragment Size\",\n+                                \"name\": \"asana-section-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remove Trailing Newlines\": {\n-                                \"allowableValues\": [\n+                            \"asana-tag-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects having this tag. Case sensitive.\",\n+                                \"displayName\": \"Tag\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-tag-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-team-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-team-members\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to remove newlines at the end of each split file. This should be false if you intend to merge the split files later. If this is set to 'true' and a FlowFile is generated that contains only 'empty lines' (i.e., consists only of \\\\r and \\\\n characters), the FlowFile will not be emitted. Note, however, that if header lines are specified, the resultant FlowFile will never be empty as it will consist of the header lines, so a FlowFile may be emitted that contains only the header lines.\",\n-                                \"displayName\": \"Remove Trailing Newlines\",\n+                                \"description\": \"Team name. Case sensitive.\",\n+                                \"displayName\": \"Team\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove Trailing Newlines\",\n-                                \"required\": true,\n+                                \"name\": \"asana-team-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"Cache service to store fetched item fingerprints. These, from the last successful query are stored, in order to enable incremental loading and change detection.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a file cannot be split for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Newly collected objects are routed to this relationship.\",\n+                                \"name\": \"new\"\n                             },\n                             {\n-                                \"description\": \"The original input file will be routed to this destination when it has been successfully split into 1 or more files\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n+                                \"name\": \"updated\"\n                             },\n                             {\n-                                \"description\": \"The split files will be routed to this destination when an input file is successfully split into 1 or more split files\",\n-                                \"name\": \"splits\"\n+                                \"description\": \"Notification about deleted objects are routed to this relationship. Flow files will not have any payload. IDs of the resources no longer exist are carried by the asana.gid attribute of the generated FlowFiles.\",\n+                                \"name\": \"removed\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"split\",\n-                            \"text\"\n+                            \"asana\",\n+                            \"ingest\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitText\",\n-                        \"typeDescription\": \"Splits a text file into multiple smaller text files on line boundaries limited by maximum number of lines or total size of fragment. Each output split file will contain no more than the configured number of lines or bytes. If both Line Split Count and Maximum Fragment Size are specified, the split occurs at whichever limit is reached first. If the first line of a fragment exceeds the Maximum Fragment Size, that line will be output in a single split file which exceeds the configured maximum size limit. This component also allows one to specify that each split should include a header lines. Header lines can be computed by either specifying the amount of lines that should constitute a header or by using header marker to match against the read lines. If such match happens then the corresponding line will be treated as header. Keep in mind that upon the first failure of header marker match, no more matches will be performed and the rest of the data will be parsed as regular lines for a given split. If after computation of the header there are no more data, the resulting split will consists of only header lines.\",\n+                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n+                        \"typeDescription\": \"This processor collects data from Asana\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of lines of text from the original FlowFile that were copied to this FlowFile\",\n-                                \"name\": \"text.line.count\"\n+                                \"description\": \"Global ID of the object in Asana.\",\n+                                \"name\": \"asana.gid\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-record-sink-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"bcc\": {\n+                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"BCC\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bcc\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The number of bytes from the original FlowFile that were copied to this FlowFile, including header, if applicable, which is duplicated in each split FlowFile\",\n-                                \"name\": \"fragment.size\"\n+                            \"cc\": {\n+                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"CC\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cc\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                            \"from\": {\n+                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"From\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"from\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                            \"smtp-auth\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Flag indicating whether authentication should be used\",\n+                                \"displayName\": \"SMTP Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-auth\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-hostname\": {\n+                                \"description\": \"The hostname of the SMTP Server that is used to send Email Notifications\",\n+                                \"displayName\": \"SMTP Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smtp-hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"smtp-port\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The Port used for SMTP communications\",\n+                                \"displayName\": \"SMTP Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-ssl\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether SSL should be enabled\",\n+                                \"displayName\": \"SMTP SSL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-ssl\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-starttls\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether STARTTLS should be enabled. If the server does not support STARTTLS, the connection continues without the use of TLS\",\n+                                \"displayName\": \"SMTP STARTTLS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-starttls\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-xmailer-header\": {\n+                                \"defaultValue\": \"NiFi\",\n+                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n+                                \"displayName\": \"SMTP X-Mailer Header\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-xmailer-header\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"subject\": {\n+                                \"defaultValue\": \"Message from NiFi\",\n+                                \"description\": \"The email subject\",\n+                                \"displayName\": \"Subject\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"subject\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"to\": {\n+                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"To\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"to\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"email\",\n+                            \"record\",\n+                            \"send\",\n+                            \"sink\",\n+                            \"smtp\",\n+                            \"write\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.EmailRecordSink\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to send records in email using the specified writer for formatting.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Split Depth\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Indicates the XML-nesting depth to start splitting XML fragments. A depth of 1 means split the root's children, whereas a depth of 2 means split the root's children's children and so forth.\",\n-                                \"displayName\": \"Split Depth\",\n+                            \"logsink-log-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"INFO\",\n+                                \"description\": \"The Log Level at which to log records (INFO, DEBUG, e.g.)\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Depth\",\n+                                \"name\": \"logsink-log-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"log\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.LoggingRecordSink\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to log records to the application log (nifi-app.log, e.g.) using the specified writer for formatting.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hostname\": {\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                            \"port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n+                            \"sender-threads\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n+                                \"displayName\": \"Sender Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sender-threads\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n+                        \"tags\": [\n+                            \"UDP\",\n+                            \"event\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.event.UDPEventRecordSink\",\n+                        \"typeDescription\": \"Format and send Records as UDP Datagram Packets to a configurable destination\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The entirety of the FlowFile's content (as a Document object) is read into memory, in addition to all of the generated FlowFiles representing the split XML. A Document object can take approximately 10 times as much memory as the size of the XML. For example, a 1 MB XML document may use 10 MB of memory. If many splits are generated due to the size of the XML, a two-phase approach may be necessary to avoid excessive use of memory.\",\n-                                \"resource\": \"MEMORY\"\n+                                \"description\": \"If 'record.sink.name' attribute contains the name of the dynamic property, then the RecordSinkService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register the specified RecordSinkService\",\n+                                \"value\": \"The RecordSinkService\"\n                             }\n                         ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"split\",\n-                            \"xml\"\n+                            \"lookup\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.SplitXml\",\n-                        \"typeDescription\": \"Splits an XML File into multiple separate FlowFiles, each comprising a child or descendant of the original root element\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                        \"type\": \"org.apache.nifi.record.sink.lookup.RecordSinkServiceLookup\",\n+                        \"typeDescription\": \"Provides a RecordSinkService that can be used to dynamically select another RecordSinkService. This service requires an attribute named 'record.sink.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'record.sink.name' will be used to select the RecordSinkService that has been registered with that name. This will allow multiple RecordSinkServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'record.sink.name' attribute. Note that this controller service is not intended for use in reporting tasks that employ RecordSinkService instances, such as QueryNiFiReportingTask.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-http-context-map-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-http-context-map-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Maximum Outstanding Requests\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The maximum number of HTTP requests that can be outstanding at any one time. Any attempt to register an additional HTTP Request will cause an error\",\n+                                \"displayName\": \"Maximum Outstanding Requests\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Outstanding Requests\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"Request Expiration\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n+                                \"displayName\": \"Request Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"http\",\n+                            \"request\",\n+                            \"response\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n+                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-cf-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"app-config-file\": {\n+                                \"description\": \"Full path of an App config JSON file. See Additional Details for more information.\",\n+                                \"displayName\": \"App Config File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-config-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                            \"app-config-json\": {\n+                                \"description\": \"The raw JSON containing an App config. See Additional Details for more information.\",\n+                                \"displayName\": \"App Config JSON\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-config-json\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"box-account-id\": {\n+                                \"description\": \"The ID of the Box account who owns the accessed resource. Same as 'User Id' under 'App Info' in the App 'General Settings'.\",\n+                                \"displayName\": \"Account ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"box-account-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"artifact\": \"nifi-box-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"box\",\n+                            \"client\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.box.controllerservices.JsonConfigBasedBoxClientService\",\n+                        \"typeDescription\": \"Provides Box client objects through which Box API calls can be used.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-distributed-cache-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"30 sec\"\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Server Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedMapCacheServer service\",\n+                                \"displayName\": \"Server Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n                         },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Location\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"State is stored locally. Each node in a cluster will tail a different file.\",\n-                                        \"displayName\": \"Local\",\n-                                        \"value\": \"Local\"\n-                                    },\n-                                    {\n-                                        \"description\": \"State is located on a remote resource. This Processor will store state across the cluster so that it can be run on Primary Node Only and a new Primary Node can pick up where the last one left off.\",\n-                                        \"displayName\": \"Remote\",\n-                                        \"value\": \"Remote\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local\",\n-                                \"description\": \"Specifies where the state is located either local or cluster so that state can be stored appropriately in order to ensure that all data is consumed without duplicating data upon restart of NiFi\",\n-                                \"displayName\": \"State Location\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Location\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File to Tail\": {\n-                                \"description\": \"Path of the file to tail in case of single file mode. If using multifile mode, regular expression to find files to tail in the base directory. In case recursivity is set to true, the regular expression will be used to match the path starting from the base directory (see additional details for examples).\",\n-                                \"displayName\": \"File(s) to Tail\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"File to Tail\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Initial Start Position\": {\n+                            \"Server Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"set\",\n+                            \"state\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClientService\",\n+                        \"typeDescription\": \"Provides the ability to communicate with a DistributedSetCacheServer. This can be used in order to share a Set between nodes in a NiFi cluster\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start with the oldest data that matches the Rolling Filename Pattern and then begin reading from the File to Tail\",\n-                                        \"displayName\": \"Beginning of Time\",\n-                                        \"value\": \"Beginning of Time\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"Start with the beginning of the File to Tail. Do not ingest any data that has already been rolled over\",\n-                                        \"displayName\": \"Beginning of File\",\n-                                        \"value\": \"Beginning of File\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n-                                        \"displayName\": \"Current Time\",\n-                                        \"value\": \"Current Time\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Beginning of File\",\n-                                \"description\": \"When the Processor first begins to tail data, this property specifies where the Processor should begin reading data. Once data has been ingested from a file, the Processor will continue from the last point from which it has received data.\",\n-                                \"displayName\": \"Initial Start Position\",\n+                                \"defaultValue\": \"Least Frequently Used\",\n+                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n+                                \"displayName\": \"Eviction Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Initial Start Position\",\n+                                \"name\": \"Eviction Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Start Pattern\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Single file\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Tailing mode\",\n-                                        \"propertyName\": \"tail-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n-                                \"displayName\": \"Line Start Pattern\",\n+                            \"Maximum Cache Entries\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n+                                \"displayName\": \"Maximum Cache Entries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Start Pattern\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum Cache Entries\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Buffer Size\": {\n-                                \"defaultValue\": \"64 KB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Line Start Pattern\",\n-                                        \"propertyName\": \"Line Start Pattern\"\n-                                    }\n-                                ],\n-                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n-                                \"displayName\": \"Max Buffer Size\",\n+                            \"Persistence Directory\": {\n+                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n+                                \"displayName\": \"Persistence Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Buffer Size\",\n-                                \"required\": true,\n+                                \"name\": \"Persistence Directory\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Post-Rollover Tail Period\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"When a file is rolled over, the processor will continue tailing the rolled over file until it has not been modified for this amount of time. This allows for another process to rollover a file, and then flush out any buffered data. Note that when this value is set, and the tailed file rolls over, the new file will not be tailed until the old file has not been modified for the configured amount of time. Additionally, when using this capability, in order to avoid data duplication, this period must be set longer than the Processor's Run Schedule, and the Processor must not be stopped after the file being tailed has been rolled over and before the data has been fully consumed. Otherwise, the data may be duplicated, as the entire file may be written out as the contents of a single FlowFile.\",\n-                                \"displayName\": \"Post-Rollover Tail Period\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port to listen on for incoming connections\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Post-Rollover Tail Period\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Rolling Filename Pattern\": {\n-                                \"description\": \"If the file to tail \\\"rolls over\\\" as would be the case with log files, this filename pattern will be used to identify files that have rolled over so that if NiFi is restarted, and the file has rolled over, it will be able to pick up where it left off. This pattern supports wildcard characters * and ?, it also supports the notation ${filename} to specify a pattern based on the name of the file (without extension), and will assume that the files that have rolled over live in the same directory as the file being tailed. The same glob pattern will be used for all files.\",\n-                                \"displayName\": \"Rolling Filename Pattern\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rolling Filename Pattern\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"pre-allocated-buffer-size\": {\n-                                \"defaultValue\": \"65536 B\",\n-                                \"description\": \"Sets the amount of memory that is pre-allocated for each tailed file.\",\n-                                \"displayName\": \"Pre-Allocated Buffer Size\",\n+                            \"maximum-read-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n+                                \"displayName\": \"Maximum Read Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pre-allocated-buffer-size\",\n-                                \"required\": true,\n+                                \"name\": \"maximum-read-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"reread-on-nul\": {\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distinct\",\n+                            \"distributed\",\n+                            \"server\",\n+                            \"set\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n+                        \"typeDescription\": \"Provides a set (collection of unique values) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedSetCacheClient service.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this option is set to 'true', when a NUL character is read, the processor will yield and try to read the same part again later. (Note: Yielding may delay the processing of other files tailed by this processor, not just the one with the NUL character.) The purpose of this flag is to allow users to handle cases where reading a file may return temporary NUL values. NFS for example may send file contents out of order. In this case the missing parts are temporarily replaced by NUL values. CAUTION! If the file contains legitimate NUL values, setting this flag causes this processor to get stuck indefinitely. For this reason users should refrain from using this feature if they can help it and try to avoid having the target file on a file system where reads are unreliable.\",\n-                                \"displayName\": \"Reread when NUL encountered\",\n+                                \"defaultValue\": \"Least Frequently Used\",\n+                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n+                                \"displayName\": \"Eviction Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reread-on-nul\",\n-                                \"required\": false,\n+                                \"name\": \"Eviction Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"tail-base-directory\": {\n-                                \"description\": \"Base directory used to look for files to tail. This property is required when using Multifile mode.\",\n-                                \"displayName\": \"Base directory\",\n+                            \"Maximum Cache Entries\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n+                                \"displayName\": \"Maximum Cache Entries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"tail-base-directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Cache Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Persistence Directory\": {\n+                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n+                                \"displayName\": \"Persistence Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Persistence Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tail-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"In this mode, only the one file indicated in the 'Files to tail' property will be watched by the processor. In this mode, the file may not exist when starting the processor.\",\n-                                        \"displayName\": \"Single file\",\n-                                        \"value\": \"Single file\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In this mode, the 'Files to tail' property accepts a regular expression and the processor will look for files in 'Base directory' to list the files to tail by the processor.\",\n-                                        \"displayName\": \"Multiple files\",\n-                                        \"value\": \"Multiple files\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Single file\",\n-                                \"description\": \"Mode to use: single file will tail only one file, multiple file will look for a list of file. In Multiple mode the Base directory is required.\",\n-                                \"displayName\": \"Tailing mode\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"4557\",\n+                                \"description\": \"The port to listen on for incoming connections\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tail-mode\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"tailfile-lookup-frequency\": {\n-                                \"defaultValue\": \"10 minutes\",\n-                                \"description\": \"Only used in Multiple files mode. It specifies the minimum duration the processor will wait before listing again the files to tail.\",\n-                                \"displayName\": \"Lookup frequency\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-lookup-frequency\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"tailfile-maximum-age\": {\n-                                \"defaultValue\": \"24 hours\",\n-                                \"description\": \"Only used in Multiple files mode. It specifies the necessary minimum duration to consider that no new messages will be appended in a file regarding its last modification date. This should not be set too low to avoid duplication of data in case new messages are appended at a lower frequency.\",\n-                                \"displayName\": \"Maximum age\",\n+                            \"maximum-read-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n+                                \"displayName\": \"Maximum Read Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-maximum-age\",\n+                                \"name\": \"maximum-read-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"tailfile-recursive-lookup\": {\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"key/value\",\n+                            \"map\",\n+                            \"server\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                        \"typeDescription\": \"Provides a map (key/value) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedMapCacheClient service.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-avro-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-avro-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Count Items\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"When using Multiple files mode, this property defines if files must be listed recursively or not in the base directory.\",\n-                                \"displayName\": \"Recursive lookup\",\n+                                \"description\": \"If true the number of items in the datafile will be counted and stored in a FlowFile attribute 'item.count'. The counting is done by reading blocks and getting the number of items for each block, thus avoiding de-serializing. The items being counted will be the top-level items in the datafile. For example, with a schema of type record the items will be the records, and for a schema of type Array the items will be the arrays (not the number of entries in each array).\",\n+                                \"displayName\": \"Count Items\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tailfile-recursive-lookup\",\n+                                \"name\": \"Count Items\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fingerprint Algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CRC-64-AVRO\",\n+                                        \"value\": \"CRC-64-AVRO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"CRC-64-AVRO\",\n+                                \"description\": \"The algorithm used to generate the schema fingerprint. Available choices are based on the Avro recommended practices for fingerprint generation.\",\n+                                \"displayName\": \"Fingerprint Algorithm\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Fingerprint Algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Metadata Keys\": {\n+                                \"description\": \"A comma-separated list of keys indicating key/value pairs to extract from the Avro file header. The key 'avro.schema' can be used to extract the full schema in JSON format, and 'avro.codec' can be used to extract the codec name if one exists.\",\n+                                \"displayName\": \"Metadata Keys\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Metadata Keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Stores state about where in the Tailed File it left off so that on restart it does not have to duplicate data. State is stored either local or clustered depend on the <File Location> property.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this Relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship after metadata has been extracted.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or metadata cannot be extracted for any reason\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"log\",\n-                            \"source\",\n-                            \"tail\",\n-                            \"text\"\n+                            \"avro\",\n+                            \"metadata\",\n+                            \"schema\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.TailFile\",\n-                        \"typeDescription\": \"\\\"Tails\\\" a file, or a list of files, ingesting data from the file as it is written to the file. The file is expected to be textual. Data is ingested only when a new line is encountered (carriage return or new-line character or combination). If the file to tail is periodically \\\"rolled over\\\", as is generally the case with log files, an optional Rolling Filename Pattern can be used to retrieve data from files that have rolled over, even if the rollover occurred while NiFi was not running (provided that the data still exists upon restart of NiFi). It is generally advisable to set the Run Schedule to a few seconds, rather than running with the default value of 0 secs, as this Processor will consume a lot of resources if scheduled very aggressively. At this time, this Processor does not support ingesting files that have been compressed when 'rolled over'.\",\n+                        \"type\": \"org.apache.nifi.processors.avro.ExtractAvroMetadata\",\n+                        \"typeDescription\": \"Extracts metadata from the header of an Avro datafile.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Path of the original file the flow file comes from.\",\n-                                \"name\": \"tailfile.original.path\"\n+                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n+                                \"name\": \"schema.type\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n+                                \"name\": \"schema.name\"\n+                            },\n+                            {\n+                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n+                                \"name\": \"schema.fingerprint\"\n+                            },\n+                            {\n+                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n+                                \"name\": \"item.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-avro-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41647,173 +46175,170 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These XSLT parameters are passed to the transformer\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"An XSLT transform parameter name\",\n-                                \"value\": \"An XSLT transform parameter value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"XSLT file name\": {\n-                                \"description\": \"Provides the name (including full path) of the XSLT file to apply to the FlowFile XML content.One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined.\",\n-                                \"displayName\": \"XSLT file name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"XSLT file name\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Maximum number of stylesheets to cache. Zero disables the cache.\",\n-                                \"displayName\": \"Cache size\",\n+                            \"Output Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of Avro records to include per split file. In cases where the incoming file has less records than the Output Size, or when the total number of records does not divide evenly by the Output Size, it is possible to get a split file with less records.\",\n+                                \"displayName\": \"Output Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"Output Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-ttl-after-last-access\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"The cache TTL (time-to-live) or how long to keep stylesheets in the cache after last access.\",\n-                                \"displayName\": \"Cache TTL after last access\",\n+                            \"Output Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Avro's object container file format\",\n+                                        \"displayName\": \"Datafile\",\n+                                        \"value\": \"Datafile\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bare Avro records\",\n+                                        \"displayName\": \"Bare Record\",\n+                                        \"value\": \"Bare Record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Datafile\",\n+                                \"description\": \"Determines the format of the output. Either Avro Datafile, or bare record. Bare record output is only intended for use with systems that already require it, and shouldn't be needed for normal use.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-ttl-after-last-access\",\n+                                \"name\": \"Output Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"indent-output\": {\n+                            \"Split Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Split at Record boundaries\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to indent the output.\",\n-                                \"displayName\": \"Indent\",\n+                                \"defaultValue\": \"Record\",\n+                                \"description\": \"The strategy for splitting the incoming datafile. The Record strategy will read the incoming datafile by de-serializing each record.\",\n+                                \"displayName\": \"Split Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"indent-output\",\n+                                \"name\": \"Split Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"secure-processing\": {\n+                            \"Transfer Metadata\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n-                                \"displayName\": \"Secure processing\",\n+                                \"description\": \"Whether or not to transfer metadata from the parent datafile to the children. If the Output Strategy is Bare Record, then the metadata will be stored as FlowFile attributes, otherwise it will be in the Datafile header.\",\n+                                \"displayName\": \"Transfer Metadata\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secure-processing\",\n+                                \"name\": \"Transfer Metadata\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"xslt-controller\": {\n-                                \"description\": \"Controller lookup used to store XSLT definitions. One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined. WARNING: note that the lookup controller service should not be used to store large XSLT files.\",\n-                                \"displayName\": \"XSLT Lookup\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"xslt-controller\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"xslt-controller-key\": {\n-                                \"description\": \"Key used to retrieve the XSLT definition from the XSLT lookup controller. This property must be set when using the XSLT controller property.\",\n-                                \"displayName\": \"XSLT Lookup key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"xslt-controller-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid Avro), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original FlowFile that was split. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All new files split from the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"transform\",\n-                            \"xml\",\n-                            \"xslt\"\n+                            \"avro\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.TransformXml\",\n-                        \"typeDescription\": \"Applies the provided XSLT file to the FlowFile XML payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the XSL transform fails, the original FlowFile is routed to the 'failure' relationship\",\n+                        \"type\": \"org.apache.nifi.processors.avro.SplitAvro\",\n+                        \"typeDescription\": \"Splits a binary encoded Avro datafile into smaller files based on the configured Output Size. The Output Strategy determines if the smaller files will be Avro datafiles, or bare Avro records with metadata in the FlowFile attributes. The output will always be binary encoded.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-geohash-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-geohash-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41826,237 +46351,237 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Filter\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"Only files contained in the archive whose names match the given regular expression will be extracted (tar/zip only)\",\n-                                \"displayName\": \"File Filter\",\n+                            \"geohash-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE32\",\n+                                        \"value\": \"BASE32\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LONG\",\n+                                        \"value\": \"LONG\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"BASE32\",\n+                                \"description\": \"In the ENCODE mode, this property specifies the desired format for encoding geohash; in the DECODE mode, this property specifies the format of geohash provided\",\n+                                \"displayName\": \"Geohash Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"geohash-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filename Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n+                            \"geohash-level\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"zip\",\n-                                            \"use mime.type attribute\"\n+                                            \"ENCODE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Packaging Format\",\n-                                        \"propertyName\": \"Packaging Format\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"mode\"\n                                     }\n                                 ],\n-                                \"description\": \"If supplied this character set will be supplied to the Zip utility to attempt to decode filenames using the specific character set. If not specified the default platform character set will be used. This is useful if a Zip was created with a different character set than the platform default and the zip uses non standard values to specify.\",\n-                                \"displayName\": \"Filename Character Set\",\n+                                \"description\": \"The integer precision level(1-12) desired for encoding geohash\",\n+                                \"displayName\": \"Geohash Level\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filename Character Set\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"geohash-level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Packaging Format\": {\n+                            \"geohash-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to put the geohash value; in the DECODE mode, this property specifies the record path to retrieve the geohash value\",\n+                                \"displayName\": \"Geohash Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"geohash-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"latitude-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the latitude values. Latitude values should be in the range of [-90, 90]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the latitude value\",\n+                                \"displayName\": \"Latitude Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"latitude-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"longitude-record-path\": {\n+                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the longitude values; Longitude values should be in the range of [-180, 180]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the longitude value\",\n+                                \"displayName\": \"Longitude Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"longitude-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"tar\",\n-                                        \"value\": \"tar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"zip\",\n-                                        \"value\": \"zip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v3\",\n-                                        \"value\": \"flowfile-stream-v3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v2\",\n-                                        \"value\": \"flowfile-stream-v2\"\n+                                        \"displayName\": \"ENCODE\",\n+                                        \"value\": \"ENCODE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-tar-v1\",\n-                                        \"value\": \"flowfile-tar-v1\"\n+                                        \"displayName\": \"DECODE\",\n+                                        \"value\": \"DECODE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The Packaging Format used to create the file\",\n-                                \"displayName\": \"Packaging Format\",\n+                                \"defaultValue\": \"ENCODE\",\n+                                \"description\": \"Specifies whether to encode latitude/longitude to geohash or decode geohash to latitude/longitude\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Packaging Format\",\n+                                \"name\": \"mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for decrypting Zip archives encrypted with ZipCrypto or AES. Configuring a password disables support for alternative Zip compression algorithms.\",\n-                                \"displayName\": \"Password\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the record reader service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"allow-stored-entries-wdd\": {\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the record writer service to use for writing data\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"routing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"SKIP\",\n+                                        \"value\": \"SKIP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"SPLIT\",\n+                                        \"value\": \"SPLIT\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"zip\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Packaging Format\",\n-                                        \"propertyName\": \"Packaging Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRE\",\n+                                        \"value\": \"REQUIRE\"\n                                     }\n                                 ],\n-                                \"description\": \"Some zip archives contain stored entries with data descriptors which by spec should not happen.  If this property is true they will be read anyway.  If false and such an entry is discovered the zip will fail to process.\",\n-                                \"displayName\": \"Allow Stored Entries With Data Descriptor\",\n+                                \"defaultValue\": \"SKIP\",\n+                                \"description\": \"Specifies how to route flowfiles after encoding or decoding being performed. SKIP will enrich those records that can be enriched and skip the rest. The SKIP strategy will route a flowfile to failure only if unable to parse the data. Otherwise, it will route the enriched flowfile to success, and the original input to original. SPLIT will separate the records that have been enriched from those that have not and send them to matched, while unenriched records will be sent to unmatched; the original input flowfile will be sent to original. The SPLIT strategy will route a flowfile to failure only if unable to parse the data. REQUIRE will route a flowfile to success only if all of its records are enriched, and the original input will be sent to original. The REQUIRE strategy will route the original input flowfile to failure if any of its records cannot be enriched or unable to be parsed\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-stored-entries-wdd\",\n+                                \"name\": \"routing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Packaging Format> property is set to use mime.type attribute, this attribute is used to determine the FlowFile's MIME Type. In this case, if the attribute is set to application/tar, the TAR Packaging Format will be used. If the attribute is set to application/zip, the ZIP Packaging Format will be used. If the attribute is set to application/flowfile-v3 or application/flowfile-v2 or application/flowfile-v1, the appropriate FlowFile Packaging Format will be used. If this attribute is missing, the FlowFile will be routed to 'failure'. Otherwise, if the attribute's value is not one of those mentioned above, the FlowFile will be routed to 'success' without being unpacked. Use the File Filter property only extract files matching a specific regular expression.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n+                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n+                                \"description\": \"Flowfiles that cannot be encoded or decoded will be routed to failure\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n+                                \"description\": \"The original input flowfile will be sent to this relationship\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Unpack\",\n-                            \"archive\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"tar\",\n-                            \"un-merge\",\n-                            \"zip\"\n+                            \"geo\",\n+                            \"geohash\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UnpackContent\",\n-                        \"typeDescription\": \"Unpacks the content of FlowFiles that have been packaged with one of several different Packaging Formats, emitting one to many FlowFiles for each input FlowFile. Supported formats are TAR, ZIP, and FlowFile Stream packages.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set \\\"Packaging Format\\\" value to \\\"zip\\\" or \\\"use mime.type attribute\\\".\\nSet \\\"Filename Character Set\\\" value to \\\"Cp437\\\" or \\\"IBM437\\\".\\n\",\n-                                \"description\": \"Unpack Zip containing filenames with special characters, created on Windows with filename charset 'Cp437' or 'IBM437'.\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"type\": \"org.apache.nifi.processors.geohash.GeohashRecord\",\n+                        \"typeDescription\": \"A record-based processor that encodes and decodes Geohashes from and to latitude/longitude coordinates.\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the FlowFile is successfully unpacked, its MIME Type is no longer known, so the mime.type attribute is set to application/octet-stream.\",\n+                                \"description\": \"The MIME type indicated by the record writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"All unpacked FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the unpacked FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of unpacked FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile. Extensions of .tar, .zip or .pkg are removed because the MergeContent processor automatically adds those extensions if it is used to rebuild the original FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the unpacked file was last modified (tar only).\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was created. This attribute holds always the same value as file.lastModifiedTime (tar only).\",\n-                                \"name\": \"file.creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The owner of the unpacked file (tar only)\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group owner of the unpacked file (tar only)\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the unpacked file (tar only)\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The encryption method for entries in Zip archives\",\n-                                \"name\": \"file.encryptionMethod\"\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-evtx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-evtx-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -42069,2484 +46594,2141 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"counter-name\": {\n-                                \"description\": \"The name of the counter you want to set the value of - supports expression language like ${counterName}\",\n-                                \"displayName\": \"Counter Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"counter-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"delta\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Adjusts the counter by the specified delta for each flow file received. May be a positive or negative integer.\",\n-                                \"displayName\": \"Delta\",\n+                            \"granularity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chunk\",\n+                                        \"value\": \"Chunk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Chunk\",\n+                                \"description\": \"Output flow file for each Record, Chunk, or File encountered in the event log\",\n+                                \"displayName\": \"Granularity\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"delta\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"granularity\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"The name of the counter to update/get.\",\n-                                \"name\": \"counterName\"\n+                                \"description\": \"The filename of the evtx file\",\n+                                \"name\": \"filename\"\n                             }\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Counter was updated/retrieved\",\n+                                \"description\": \"Any FlowFile that was successfully converted from evtx to XML\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that encountered an exception during conversion will be transferred to this relationship with as much parsing as possible done\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The unmodified input FlowFile will be transferred to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Any bad chunks of records will be transferred to this relationship in their original binary form\",\n+                                \"name\": \"bad chunk\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"counter\",\n-                            \"debug\",\n-                            \"instrumentation\"\n+                            \"event\",\n+                            \"evtx\",\n+                            \"file\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"windows\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateCounter\",\n-                        \"typeDescription\": \"This processor allows users to set specific counters and key points in their flow. It is useful for debugging and basic counting functions.\",\n+                        \"type\": \"org.apache.nifi.processors.evtx.ParseEvtx\",\n+                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The output filename\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The output filetype (application/xml for success and failure relationships, original value for bad chunk and original relationships)\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-slack-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"db-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses.\",\n-                                \"displayName\": \"Database Type\",\n+                            \"access-token\": {\n+                                \"description\": \"Bot OAuth Token used for authenticating and authorizing the Slack request sent by NiFi.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The service for reading incoming flow files. The reader is only used to determine the schema of the records, the actual records will not be processed.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"api-url\": {\n+                                \"defaultValue\": \"https://slack.com/api\",\n+                                \"description\": \"Slack Web API URL for posting text messages to channels. It only needs to be changed if Slack changes its API URL.\",\n+                                \"displayName\": \"API URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"api-url\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n+                            \"channel-id\": {\n+                                \"description\": \"Slack channel, private group, or IM channel to send the message to. Use Channel ID instead of the name.\",\n+                                \"displayName\": \"Channel ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-catalog-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"channel-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-create-table\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Create a table with the given schema if it does not already exist\",\n-                                        \"displayName\": \"Create If Not Exists\",\n-                                        \"value\": \"Create If Not Exists\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the target does not already exist, log an error and route the flowfile to failure\",\n-                                        \"displayName\": \"Fail If Not Exists\",\n-                                        \"value\": \"Fail If Not Exists\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Fail If Not Exists\",\n-                                \"description\": \"Specifies how to process the target table when it does not exist (create it, fail, e.g.).\",\n-                                \"displayName\": \"Create Table Strategy\",\n+                            \"input-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the records used to generate the Slack message.\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-create-table\",\n+                                \"name\": \"input-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection(s) to the database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-dbcp-service\",\n+                                \"name\": \"record-sink-record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"updatedatabasetable-primary-keys\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Create If Not Exists\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Create Table Strategy\",\n-                                        \"propertyName\": \"updatedatabasetable-create-table\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of record field names that uniquely identifies a row in the database. This property is only used if the specified table needs to be created, in which case the Primary Key Fields will be used to specify the primary keys of the newly-created table. IMPORTANT: Primary Key Fields must match the record field names exactly unless 'Quote Column Identifiers' is false and the database allows for case-insensitive column names. In practice it is best to specify Primary Key Fields that exactly match the record field names, and those will become the column names in the created table.\",\n-                                \"displayName\": \"Primary Key Fields\",\n+                            \"web-service-client-provider\": {\n+                                \"description\": \"Controller service to provide HTTP client for communicating with Slack API\",\n+                                \"displayName\": \"Web Service Client Provider\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-primary-keys\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"web-service-client-provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"record\",\n+                            \"sink\",\n+                            \"slack\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.slack.SlackRecordSink\",\n+                        \"typeDescription\": \"Format and send Records to a configured Channel using the Slack Post Message API. The service requires a Slack App with a Bot User configured for access to a Slack workspace. The Bot User OAuth Bearer Token is required for posting messages to Slack.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"3 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"Access Token\": {\n+                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. It must be granted the channels:history, groups:history, im:history, or mpim:history scope, depending on the type of conversation being used.\",\n+                                \"displayName\": \"Access Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Access Token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of messages to retrieve in a single request to Slack. The entire response will be parsed into memory, so it is important that this be kept in mind when setting this value.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-query-timeout\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Sets the number of seconds the driver will wait for a query to execute. A value of 0 means no timeout. NOTE: Non-zero values may not be supported by the driver.\",\n-                                \"displayName\": \"Query Timeout\",\n+                            \"Channels\": {\n+                                \"description\": \"A comma-separated list of Slack Channels to Retrieve Messages From. Each element in the list may be either a Channel ID, such as C0L9VCD47, or (for public channels only) the name of a channel, prefixed with a # sign, such as #general. If any channel name is provided instead,instead of an ID, the Access Token provided must be granted the channels:read scope in order to resolve the Channel ID. See the Processor's Additional Details for information on how to find a Channel ID.\",\n+                                \"displayName\": \"Channels\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-query-timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Channels\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-quoted-column-identifiers\": {\n+                            \"Include Message Blocks\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables and/or forcing the record field names to match the column names exactly.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n+                                \"description\": \"Specifies whether or not the output JSON should include the value of the 'blocks' field for each Slack Message. This field includes information such as individual parts of a message that are formatted using rich text. This may be useful, for instance, for parsing. However, it often accounts for a significant portion of the data and as such may be set to null when it is not useful to you.\",\n+                                \"displayName\": \"Include Message Blocks\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-quoted-column-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"Include Message Blocks\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-quoted-table-identifiers\": {\n+                            \"Include Null Fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name and/or forcing the value of the Table Name property to match the target table name exactly.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not fields that have null values should be included in the output JSON. If true, any field in a Slack Message that has a null value will be included in the JSON with a value of null. If false, the key omitted from the output JSON entirely. Omitting null values results in smaller messages that are generally more efficient to process, but including the values may provide a better understanding of the format, especially for schema inference.\",\n+                                \"displayName\": \"Include Null Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"Include Null Fields\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Update Field Names\",\n-                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer should use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types. If Create Table Strategy is set 'Create If Not Exists', the Record Writer's output format must match the Record Reader's format in order for the data to be placed in the created table location. Note that this property is only used if 'Update Field Names' is set to true and the field names do not all match the column names exactly. If no update is needed for any field names (or 'Update Field Names' is false), the Record Writer is not used and instead the input FlowFile is routed to success or failure without modification.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Reply Monitor Frequency\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp falls between now and the amount of time specified by the <Reply Monitor Window> property. This property determines how frequently those messages are polled. Setting the value to a shorter duration may result in replies to messages being captured more quickly, providing a lower latency. However, it will also result in additional resource use and could trigger Rate Limiting to occur.\",\n+                                \"displayName\": \"Reply Monitor Frequency\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"updatedatabasetable-schema-name\": {\n-                                \"description\": \"The name of the database schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-table-name\": {\n-                                \"description\": \"The name of the database table to update. If the table does not exist, then it will either be created or an error thrown, depending on the value of the Create Table property.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-table-name\",\n+                                \"name\": \"Reply Monitor Frequency\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-translate-field-names\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the corresponding column names for the table specified, for the purposes of determining whether the field name exists as a column in the target table. NOTE: If the target table does not exist and is to be created, this property is ignored and the field names will be used as-is. If false, the field names must match the column names exactly, or the column may not be found and instead an error my be reported that the column already exists.\",\n-                                \"displayName\": \"Translate Field Names\",\n+                            \"Reply Monitor Window\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp is between now and this amount of time in the past in order to check for any new replies. Setting this value to a larger value may result in additional resource use and may result in Rate Limiting. However, if a user replies to an old thread that was started outside of this window, the reply may not be captured.\",\n+                                \"displayName\": \"Reply Monitor Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-translate-field-names\",\n+                                \"name\": \"Reply Monitor Window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-update-field-names\": {\n+                            \"Resolve Usernames\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"This property indicates whether to update the output schema such that the field names are set to the exact column names from the specified table. This should be used if the incoming record field names may not match the table's column names in terms of upper- and lower-case. For example, this property should be set to true if the output FlowFile is destined for Oracle e.g., which expects the field names to match the column names exactly. NOTE: The value of the 'Translate Field Names' property is ignored when updating field names; instead they are updated to match the column name as returned by the database.\",\n-                                \"displayName\": \"Update Field Names\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not User IDs should be resolved to usernames. By default, Slack Messages provide the ID of the user that sends a message, such as U0123456789, but not the username, such as NiFiUser. The username may be resolved, but it may require additional calls to the Slack API and requires that the Token used be granted the users:read scope. If set to true, usernames will be resolved with a best-effort policy: if a username cannot be obtained, it will be skipped over. Also, note that when a username is obtained, the Message's <username> field is populated, and the <text> field is updated such that any mention will be output such as \\\"Hi @user\\\" instead of \\\"Hi <@U1234567>\\\".\",\n+                                \"displayName\": \"Resolve Usernames\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-update-field-names\",\n+                                \"name\": \"Resolve Usernames\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.slack.ListenSlack\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Maintains a mapping of Slack Channel IDs to the timestamp of the last message that was retrieved for that channel. This allows the processor to only retrieve messages that have been posted since the last time the processor was run. This state is stored in the cluster so that if the Primary Node changes, the new node will pick up where the previous node left off.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile containing records routed to this relationship after the record has been successfully transmitted to the database.\",\n+                                \"description\": \"Slack messages that are successfully received will be routed to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile containing records routed to this relationship if the record could not be transmitted to the database.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"alter\",\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"metadata\",\n-                            \"table\",\n-                            \"update\"\n+                            \"conversation\",\n+                            \"conversation.history\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n+                            \"text\",\n+                            \"unstructured\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateDatabaseTable\",\n-                        \"typeDescription\": \"This processor uses a JDBC connection and incoming records to generate any database table changes needed to support the incoming records. It expects a 'flat' record layout, meaning none of the top-level record fields has nested fields that are intended to become columns themselves.\",\n+                        \"type\": \"org.apache.nifi.processors.slack.ConsumeSlack\",\n+                        \"typeDescription\": \"Retrieves messages from one or more configured Slack channels. The messages are written out in JSON format. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages from Slack.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the target table name.\",\n-                                \"name\": \"output.table\"\n+                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n+                                \"name\": \"slack.channel.id\"\n                             },\n                             {\n-                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the path on the file system to the table (or partition location if the table is partitioned).\",\n-                                \"name\": \"output.path\"\n+                                \"description\": \"The number of slack messages that are included in the FlowFile\",\n+                                \"name\": \"slack.message.count\"\n                             },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile, only if a Record Writer is specified and Update Field Names is 'true'.\",\n-                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows users to specify values to use to replace fields in the record that match the RecordPath.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A RecordPath.\",\n-                                \"value\": \"The value to use to replace fields in the record that match the RecordPath\"\n-                            }\n-                        ],\n+                        \"defaultYieldDuration\": \"250 millis\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"App Token\": {\n+                                \"description\": \"The Application Token that is registered to your Slack application\",\n+                                \"displayName\": \"App Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"App Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Bot Token\": {\n+                                \"description\": \"The Bot Token that is registered to your Slack application\",\n+                                \"displayName\": \"Bot Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"Bot Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"Replacement Value Strategy\": {\n+                            \"Event Type to Receive\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.\",\n-                                        \"displayName\": \"Literal Value\",\n-                                        \"value\": \"literal-value\"\n+                                        \"description\": \"The Processor is to receive only slack messages that mention the bot user (App Mention Events)\",\n+                                        \"displayName\": \"Receive App Mention Events\",\n+                                        \"value\": \"Receive App Mention Events\"\n                                     },\n                                     {\n-                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.\",\n-                                        \"displayName\": \"Record Path Value\",\n-                                        \"value\": \"record-path-value\"\n+                                        \"description\": \"The Processor is to receive Slack Message Events\",\n+                                        \"displayName\": \"Receive Message Events\",\n+                                        \"value\": \"Receive Message Events\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Processor is to receive Commands from Slack that are specific to your application. The Processor will not receive Message Events.\",\n+                                        \"displayName\": \"Receive Commands\",\n+                                        \"value\": \"Receive Commands\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"literal-value\",\n-                                \"description\": \"Specifies how to interpret the configured replacement values\",\n-                                \"displayName\": \"Replacement Value Strategy\",\n+                                \"defaultValue\": \"Receive App Mention Events\",\n+                                \"description\": \"Specifies the type of Event that the Processor should respond to\",\n+                                \"displayName\": \"Event Type to Receive\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Replacement Value Strategy\",\n+                                \"name\": \"Event Type to Receive\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Resolve User Details\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Receive App Mention Events\",\n+                                            \"Receive Message Events\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Event Type to Receive\",\n+                                        \"propertyName\": \"Event Type to Receive\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Processor should lookup details about the Slack User who sent the received message. If true, the output JSON will contain an additional field named 'userDetails'. The 'user' field will still contain the ID of the user. In order to enable this capability, the Bot Token must be granted the 'users:read' and optionally the 'users.profile:read' Bot Token Scope. If the rate limit is exceeded when retrieving this information, the received message will be rejected and must be re-delivered.\",\n+                                \"displayName\": \"Resolve User Details\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Resolve User Details\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                            \"org.apache.nifi.processors.slack.ConsumeSlack\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"All FlowFiles that are created will be sent to this Relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"schema\",\n+                            \"command\",\n+                            \"event\",\n+                            \"listen\",\n+                            \"message\",\n+                            \"real-time\",\n+                            \"receive\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n                             \"text\",\n-                            \"update\"\n+                            \"unstructured\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n-                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property uses the CONCAT Record Path function to concatenate multiple values together, potentially using other string literal values.\\nFor example, to combine the `title`, `firstName` and `lastName` fields into a single field named `fullName`, we add a property with the name `/fullName` and a value of `CONCAT(/title, ' ', /firstName, ' ', /lastName)`\\n\",\n-                                \"description\": \"Combine multiple fields into a single field.\",\n-                                \"keywords\": [\n-                                    \"combine\",\n-                                    \"concatenate\",\n-                                    \"recordpath\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\n    The value of the property is the explicit value to set the field to. For example, we can set any field with a name of `txId`, regardless of its level in the data's hierarchy,     to `1111-1111` by adding a property with a name of `//txId` and a value of `1111-1111`\\n\",\n-                                \"description\": \"Change the value of a record field to an explicit value.\",\n-                                \"keywords\": [\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"replace\",\n-                                    \"transform\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\n    The value of the property is a RecordPath identifying the field to copy the value from.\\n    For example, we can copy the value of `/identifiers/all/imei` to the `identifier` field at the root level, by adding a property named     `/identifier` with a value of `/identifiers/all/imei`.\\n\",\n-                                \"description\": \"Copy the value of one record field to another record field.\",\n-                                \"keywords\": [\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"copy\",\n-                                    \"recordpath\",\n-                                    \"hierarchy\",\n-                                    \"transform\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property is an Expression Language expression that references the attribute of interest. We can, for example, insert a new field name `filename` into each record by adding a property named `/filename` with a value of `${filename}`\\n\",\n-                                \"description\": \"Enrich data by injecting the value of an attribute into each Record.\",\n-                                \"keywords\": [\n-                                    \"enrich\",\n-                                    \"attribute\",\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"replace\",\n-                                    \"insert\",\n-                                    \"transform\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\nThe value is an Expression Language expression that references the `field.value` variable. For example, to change the date/time format of a field named `txDate` from `year-month-day` format to `month/day/year` format, we add a property named `/txDate` with a value of `${field.value:toDate('yyyy-MM-dd'):format('MM/dd/yyyy')}`. We could also change the timezone of a timestamp field (and insert the timezone for clarity) by using a value of `${field.value:toDate('yyyy-MM-dd HH:mm:ss', 'UTC-0400'):format('yyyy-MM-dd HH:mm:ss Z', 'UTC')}`.\\n\",\n-                                \"description\": \"Change the format of a record field's value.\",\n-                                \"keywords\": [\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"replace\",\n-                                    \"insert\",\n-                                    \"transform\",\n-                                    \"format\",\n-                                    \"date/time\",\n-                                    \"timezone\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"Use the RenameRecordField Processor in order to change a field's name.\"\n-                            }\n-                        ],\n+                        \"type\": \"org.apache.nifi.processors.slack.ListenSlack\",\n+                        \"typeDescription\": \"Retrieves real-time messages or Slack commands from one or more Slack conversations. The messages are written out in JSON format. Note that this Processor should be used to obtain real-time messages and commands from Slack and does not provide a mechanism for obtaining historical messages. The ConsumeSlack Processor should be used for an initial load of messages from a channel. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages and commands from Slack.\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n-                                \"name\": \"record.index\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"3 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Set \\\"Destination\\\" to \\\"flowfile-attribute\\\"\\n\\nAdd a new property named \\\"thread.ts\\\" with a value of `$.threadTs`\\nAdd a new property named \\\"message.ts\\\" with a value of `$.ts`\\nAdd a new property named \\\"channel.id\\\" with a value of `$.channel`\\nAdd a new property named \\\"user.id\\\" with a value of `$.user`\\n\\nConnect the \\\"matched\\\" Relationship to PublishSlack.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to `${'channel.id'}`\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the response. If desired, you can reference the user of the original message by including the text `<@${'user.id'}>`.\\n    For example: `Hey, <@${'user.id'}>, thanks for asking...`\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"false\\\".\\nSet \\\"Thread Timestamp\\\" to `${'thread.ts':replaceEmpty( ${'message.ts'} )}`\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.slack.PublishSlack\"\n+                                    }\n+                                ],\n+                                \"description\": \"Respond to a Slack message in a thread.\",\n+                                \"keywords\": [\n+                                    \"slack\",\n+                                    \"respond\",\n+                                    \"reply\",\n+                                    \"thread\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"validate-csv-delimiter\": {\n-                                \"defaultValue\": \",\",\n-                                \"description\": \"Character used as 'delimiter' in the incoming data. Example: ,\",\n-                                \"displayName\": \"Delimiter character\",\n+                            \"Access Token\": {\n+                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. The token must be granted the chat:write scope. Additionally, in order to upload FlowFile contents as an attachment, it must be granted files:write.\",\n+                                \"displayName\": \"Access Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Access Token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Channel\": {\n+                                \"description\": \"The name or identifier of the channel to send the message to. If using a channel name, it must be prefixed with the # character. For example, #general. This is valid only for public channels. Otherwise, the unique identifier of the channel to publish to must be provided.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-delimiter\",\n+                                \"name\": \"Channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-eol\": {\n-                                \"defaultValue\": \"\\\\n\",\n-                                \"description\": \"Symbols used as 'end of line' in the incoming data. Example: \\\\n\",\n-                                \"displayName\": \"End of line symbols\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Send FlowFile Content as Message\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the Character Set used to encode the FlowFile contents.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-eol\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-header\": {\n+                            \"Include FlowFile Content as Attachment\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"True if the incoming flow file contains a header to ignore, false otherwise.\",\n-                                \"displayName\": \"Header\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use 'Message Text' Property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether or not the contents of the FlowFile should be uploaded as an attachment to the Slack message.\",\n+                                \"displayName\": \"Include FlowFile Content as Attachment\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-header\",\n+                                \"name\": \"Include FlowFile Content as Attachment\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-quote\": {\n-                                \"defaultValue\": \"\\\"\",\n-                                \"description\": \"Character used as 'quote' in the incoming data. Example: \\\"\",\n-                                \"displayName\": \"Quote character\",\n+                            \"Max FlowFile Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Include FlowFile Content as Attachment\",\n+                                        \"propertyName\": \"Include FlowFile Content as Attachment\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum size of a FlowFile that can be sent to Slack. If any FlowFile exceeds this size, it will be routed to failure. This plays an important role because the entire contents of the file must be loaded into NiFi's heap in order to send the data to Slack.\",\n+                                \"displayName\": \"Max FlowFile Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-quote\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max FlowFile Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-schema\": {\n-                                \"description\": \"The schema to be used for validation. Is expected a comma-delimited string representing the cell processors to apply. The following cell processors are allowed in the schema definition: [ParseBigDecimal, ParseBool, ParseChar, ParseDate, ParseDouble, ParseInt, ParseLong, Optional, DMinMax, Equals, ForbidSubStr, LMinMax, NotNull, Null, RequireHashCode, RequireSubStr, Strlen, StrMinMax, StrNotNullOrEmpty, StrRegEx, Unique, UniqueHashCode, IsIncludedIn]. Note: cell processors cannot be nested except with Optional.\",\n-                                \"displayName\": \"Schema\",\n+                            \"Message Text\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use 'Message Text' Property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of the message to send to Slack.\",\n+                                \"displayName\": \"Message Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-schema\",\n+                                \"name\": \"Message Text\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-strategy\": {\n+                            \"Publish Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In case an error is found, the input CSV file will be split into two FlowFiles: one routed to the 'valid' relationship containing all the correct lines and one routed to the 'invalid' relationship containing all the incorrect lines. Take care if choosing this option while using Unique cell processors in schema definition:the first occurrence will be considered valid and the next ones as invalid.\",\n-                                        \"displayName\": \"Line by line validation\",\n-                                        \"value\": \"Line by line validation\"\n+                                        \"description\": \"The contents of the FlowFile will be sent as the message text.\",\n+                                        \"displayName\": \"Send FlowFile Content as Message\",\n+                                        \"value\": \"Send FlowFile Content as Message\"\n                                     },\n                                     {\n-                                        \"description\": \"As soon as an error is found in the CSV file, the validation will stop and the whole flow file will be routed to the 'invalid' relationship. This option offers best performances.\",\n-                                        \"displayName\": \"FlowFile validation\",\n-                                        \"value\": \"FlowFile validation\"\n+                                        \"description\": \"The value of the Message Text Property will be sent as the message text.\",\n+                                        \"displayName\": \"Use 'Message Text' Property\",\n+                                        \"value\": \"Use 'Message Text' Property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FlowFile validation\",\n-                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n-                                \"displayName\": \"Validation strategy\",\n+                                \"defaultValue\": \"Send FlowFile Content as Message\",\n+                                \"description\": \"Specifies how the Processor will send the message or file to Slack.\",\n+                                \"displayName\": \"Publish Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-strategy\",\n+                                \"name\": \"Publish Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-violations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the validation.error.message attribute would include the list of all the violations for the first invalid line. Note that setting this property to true would slightly decrease the performances as all columns would be validated. If false, a line is invalid as soon as a column is found violating the specified constraint and only this violation for the first invalid line will be included in the validation.error.message attribute.\",\n-                                \"displayName\": \"Include all violations\",\n+                            \"Thread Timestamp\": {\n+                                \"description\": \"The Timestamp identifier for the thread that this message is to be a part of. If not specified, the message will be a top-level message instead of being in a thread.\",\n+                                \"displayName\": \"Thread Timestamp\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-violations\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Thread Timestamp\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.slack.ConsumeSlack\",\n+                            \"org.apache.nifi.processors.slack.ListenSlack\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"description\": \"FlowFiles are routed to 'failure' if unable to be sent to Slack for any other reason\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to 'rate limited' if the Rate Limit has been exceeded\",\n+                                \"name\": \"rate limited\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"csv\",\n-                            \"schema\",\n-                            \"validation\"\n+                            \"chat.postMessage\",\n+                            \"conversation\",\n+                            \"publish\",\n+                            \"send\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n+                            \"text\",\n+                            \"unstructured\",\n+                            \"upload\",\n+                            \"write\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateCsv\",\n-                        \"typeDescription\": \"Validates the contents of FlowFiles against a user-specified CSV schema. Take a look at the additional documentation of this processor for some schema examples.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                        \"type\": \"org.apache.nifi.processors.slack.PublishSlack\",\n+                        \"typeDescription\": \"Posts a message to the specified Slack channel. The content of the message can be either a user-defined message that makes use of Expression Language or\\nthe contents of the FlowFile can be sent as the message. If sending a user-defined message, the contents of the FlowFile may also be optionally uploaded as\\na file attachment.\\n\",\n+                        \"useCases\": [\n                             {\n-                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n-                                \"name\": \"count.valid.lines\"\n+                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the Slack message.\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"true\\\" if the FlowFile's contents should be attached as a file, or \\\"false\\\" to send just the message text without an attachment.\\n\",\n+                                \"description\": \"Send specific text as a message to Slack, optionally including the FlowFile's contents as an attached file.\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n-                                \"name\": \"count.invalid.lines\"\n-                            },\n+                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Send FlowFile Content as Message\\\".\\n\",\n+                                \"description\": \"Send the contents of the FlowFile as a message to Slack.\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"If line by line validation, total number of lines in the source data\",\n-                                \"name\": \"count.total.lines\"\n+                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n+                                \"name\": \"slack.channel.id\"\n                             },\n                             {\n-                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n-                                \"name\": \"validation.error.message\"\n+                                \"description\": \"The timestamp of the slack messages that was sent; this is used by Slack as a unique identifier\",\n+                                \"name\": \"slack.ts\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-oauth2-provider-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-oauth2-provider-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"JSON Schema\": {\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"H2_HTTP_1_1\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_CONTENT_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n                                     }\n                                 ],\n-                                \"description\": \"A URL or file path to the JSON schema or the actual JSON schema content\",\n-                                \"displayName\": \"JSON Schema\",\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"JSON Schema Registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_NAME_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the JSON Schema Registry\",\n-                                \"displayName\": \"JSON Schema Registry\",\n+                            \"audience\": {\n+                                \"description\": \"Audience for the access token request defined in RFC 8693 Section 2.1\",\n+                                \"displayName\": \"Audience\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Registry\",\n+                                \"name\": \"audience\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"authorization-server-url\": {\n+                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n+                                \"displayName\": \"Authorization Server URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"authorization-server-url\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"JSON Schema Version\": {\n+                            \"client-authentication-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Draft Version 4\",\n-                                        \"displayName\": \"Draft 4\",\n-                                        \"value\": \"DRAFT_4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Draft Version 6\",\n-                                        \"displayName\": \"Draft 6\",\n-                                        \"value\": \"DRAFT_6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Draft Version 7\",\n-                                        \"displayName\": \"Draft 7\",\n-                                        \"value\": \"DRAFT_7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Draft Version 2019-09\",\n-                                        \"displayName\": \"Draft 2019-09\",\n-                                        \"value\": \"DRAFT_2019_09\"\n+                                        \"description\": \"Send client authentication in request body. RFC 6749 Section 2.3.1 recommends Basic Authentication instead of request body.\",\n+                                        \"displayName\": \"REQUEST_BODY\",\n+                                        \"value\": \"REQUEST_BODY\"\n                                     },\n                                     {\n-                                        \"description\": \"Draft Version 2020-12\",\n-                                        \"displayName\": \"Draft 2020-12\",\n-                                        \"value\": \"DRAFT_2020_12\"\n+                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n+                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n+                                        \"value\": \"BASIC_AUTHENTICATION\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DRAFT_2020_12\",\n+                                \"defaultValue\": \"REQUEST_BODY\",\n+                                \"description\": \"Strategy for authenticating the client against the OAuth2 token provider service.\",\n+                                \"displayName\": \"Client Authentication Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"client-authentication-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"client-id\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"client-secret\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_CONTENT_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n+                                        \"propertyDisplayName\": \"Client ID\",\n+                                        \"propertyName\": \"client-id\"\n                                     }\n                                 ],\n-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"JSON Schema Version\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Client secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Version\",\n+                                \"name\": \"client-secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Schema Access Strategy\": {\n+                            \"grant-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured JSON Schema Registry Service.\",\n-                                        \"displayName\": \"Schema Name Property\",\n-                                        \"value\": \"SCHEMA_NAME_PROPERTY\"\n+                                        \"description\": \"Resource Owner Password Credentials Grant. Used to access resources available to users. Requires username and password and usually Client ID and Client Secret.\",\n+                                        \"displayName\": \"User Password\",\n+                                        \"value\": \"password\"\n                                     },\n                                     {\n-                                        \"description\": \"A URL or file path to the JSON schema or the actual JSON schema is specified by the 'JSON Schema' Property. No matter how the JSON schema is specified, it must be a valid JSON schema\",\n-                                        \"displayName\": \"JSON Schema Property\",\n-                                        \"value\": \"SCHEMA_CONTENT_PROPERTY\"\n+                                        \"description\": \"Client Credentials Grant. Used to access resources available to clients. Requires Client ID and Client Secret.\",\n+                                        \"displayName\": \"Client Credentials\",\n+                                        \"value\": \"client_credentials\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Refresh Token Grant. Used to get fresh access tokens based on a previously acquired refresh token. Requires Client ID and Client Secret (apart from Refresh Token).\",\n+                                        \"displayName\": \"Refresh Token\",\n+                                        \"value\": \"refresh_token\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SCHEMA_CONTENT_PROPERTY\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"password\",\n+                                \"description\": \"The OAuth2 Grant Type to be used when acquiring an access token.\",\n+                                \"displayName\": \"Grant Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Access Strategy\",\n+                                \"name\": \"grant-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"refresh-token\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SCHEMA_NAME_PROPERTY\"\n+                                            \"refresh_token\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                                \"description\": \"Refresh Token.\",\n+                                \"displayName\": \"Refresh Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Schema Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"refresh-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"refresh-window\": {\n+                                \"defaultValue\": \"0 s\",\n+                                \"description\": \"The service will attempt to refresh tokens expiring within the refresh window, subtracting the configured duration from the token expiration.\",\n+                                \"displayName\": \"Refresh Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"refresh-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                            \"resource\": {\n+                                \"description\": \"Resource URI for the access token request defined in RFC 8707 Section 2\",\n+                                \"displayName\": \"Resource\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"resource\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Validating JSON requires reading FlowFile content into memory\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"JSON\",\n-                            \"schema\",\n-                            \"validation\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateJson\",\n-                        \"typeDescription\": \"Validates the contents of FlowFiles against a configurable JSON Schema. See json-schema.org for specification standards. This Processor does not support input containing multiple JSON objects, such as newline-delimited JSON. If the input FlowFile contains newline-delimited JSON, only the first line will be validated.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the flow file is routed to the invalid relationship , this attribute will contain the error message resulting from the validation failure.\",\n-                                \"name\": \"json.validation.errors\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"allow-extra-fields\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"scope\": {\n+                                \"description\": \"Space-delimited, case-sensitive list of scopes of the access request (as per the OAuth 2.0 specification)\",\n+                                \"displayName\": \"Scope\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"scope\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"service-password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"password\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If the incoming data has fields that are not present in the schema, this property determines whether or not the Record is valid. If true, the Record is still valid. If false, the Record will be invalid due to the extra fields.\",\n-                                \"displayName\": \"Allow Extra Fields\",\n+                                \"description\": \"Password for the username on the service that is being accessed.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-extra-fields\",\n+                                \"name\": \"service-password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"coerce-types\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"service-user-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"password\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, the processor will coerce every field to the type specified in the Reader's schema. If the value of a field cannot be coerced to the type, the field will be skipped (will not be read from the input data), thus will not appear in the output. If not enabled, then every field will appear in the output but their types may differ from what is specified in the schema. For details please see the Additional Details page of the processor's Help. This property controls how the data is read by the specified Record Reader.\",\n-                                \"displayName\": \"Force Types From Reader's Schema\",\n+                                \"description\": \"Username on the service that is being accessed.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"coerce-types\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"service-user-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"invalid-record-writer\": {\n-                                \"description\": \"If specified, this Controller Service will be used to write out any records that are invalid. If not specified, the writer specified by the \\\"Record Writer\\\" property will be used with the schema used to read the input records. This is useful, for example, when the configured Record Writer cannot write data that does not adhere to its schema (as is the case with Avro) or when it is desirable to keep invalid records in their original format while converting valid records to another format.\",\n-                                \"displayName\": \"Record Writer for Invalid Records\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"invalid-record-writer\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"maximum-validation-details-length\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Specifies the maximum number of characters that validation details value can have. Any characters beyond the max will be truncated. This property is only used if 'Validation Details Attribute Name' is set\",\n-                                \"displayName\": \"Maximum Validation Details Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum-validation-details-length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"access token\",\n+                            \"authorization\",\n+                            \"http\",\n+                            \"oauth2\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\",\n+                        \"typeDescription\": \"Provides OAuth 2.0 access tokens that can be used as Bearer authorization header in HTTP requests. Can use either Resource Owner Password Credentials Grant or Client Credentials Grant. Client authentication can be done with either HTTP Basic authentication or in the request body.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hazelcast-cache-manager\": {\n+                                \"description\": \"A Hazelcast Cache Manager which manages connections to Hazelcast and provides cache instances.\",\n+                                \"displayName\": \"Hazelcast Cache Manager\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"hazelcast-cache-manager\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-hazelcast-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records. Regardless of the Controller Service schema access configuration, the schema that is used to validate record is used to write the valid results.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"hazelcast-cache-name\": {\n+                                \"description\": \"The name of a given cache. A Hazelcast cluster may handle multiple independent caches, each identified by a name. Clients using caches with the same name are working on the same data structure within Hazelcast.\",\n+                                \"displayName\": \"Hazelcast Cache Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-cache-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-entry-ttl\": {\n+                                \"defaultValue\": \"5 min\",\n+                                \"description\": \"Indicates how long the written entries should exist in Hazelcast. Setting it to '0 secs' means that the datawill exists until its deletion or until the Hazelcast server is shut down. Using `EmbeddedHazelcastCacheManager` ascache manager will not provide policies to limit the size of the cache.\",\n+                                \"displayName\": \"Hazelcast Entry Lifetime\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"hazelcast-entry-ttl\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n-                            \"schema-access-strategy\": {\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"hazelcast\",\n+                            \"map\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-cluster-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-clustering-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by asking the configured Record Reader for its schema\",\n-                                        \"displayName\": \"Use Reader's Schema\",\n-                                        \"value\": \"reader-schema\"\n+                                        \"description\": \"No high availability or data replication is provided, every node has access only to the data stored locally.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Name' Property and looking up the schema in the configured Schema Registry\",\n-                                        \"displayName\": \"Use Schema Name Property\",\n-                                        \"value\": \"schema-name-property\"\n+                                        \"description\": \"Creates Hazelcast cluster based on the NiFi cluster: It expects every NiFi nodes to have a running Hazelcast instance on the same port as specified in the Hazelcast Port property. No explicit listing of the instances is needed.\",\n+                                        \"displayName\": \"All Nodes\",\n+                                        \"value\": \"all_nodes\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Text' Property and parsing the schema as an Avro schema\",\n-                                        \"displayName\": \"Use Schema Text Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"Works with an explicit list of Hazelcast instances, creating a cluster using the listed instances. This provides greater control, making it possible to utilize only certain nodes as Hazelcast servers. The list of Hazelcast instances can be set in the property \\\"Hazelcast Instances\\\". The list items must refer to hosts within the NiFi cluster, no external Hazelcast is allowed. NiFi nodes are not listed will be join to the Hazelcast cluster as clients.\",\n+                                        \"displayName\": \"Explicit\",\n+                                        \"value\": \"explicit\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"reader-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Specifies with what strategy the Hazelcast cluster should be created.\",\n+                                \"displayName\": \"Hazelcast Clustering Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"hazelcast-clustering-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"hazelcast-instances\": {\n+                                \"description\": \"Only used with \\\"Explicit\\\" Clustering Strategy! List of NiFi instance host names which should be part of the Hazelcast cluster. Host names are separated by comma. The port specified in the \\\"Hazelcast Port\\\" property will be used as server port. The list must contain every instance that will be part of the cluster. Other instances will join the Hazelcast cluster as clients.\",\n+                                \"displayName\": \"Hazelcast Instances\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-instances\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry. This is necessary only if the Schema Access Strategy is set to \\\"Use 'Schema Name' Property\\\".\",\n-                                \"displayName\": \"Schema Registry\",\n+                            \"hazelcast-port\": {\n+                                \"defaultValue\": \"5701\",\n+                                \"description\": \"Port for the Hazelcast instance to use.\",\n+                                \"displayName\": \"Hazelcast Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"hazelcast\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n+                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-cluster-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-connection-timeout\": {\n+                                \"defaultValue\": \"20 secs\",\n+                                \"description\": \"The maximum amount of time the client tries to connect or reconnect before giving up.\",\n+                                \"displayName\": \"Hazelcast Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"hazelcast-connection-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"hazelcast-retry-backoff-initial\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"description\": \"The amount of time the client waits before it tries to reestablish connection for the first time.\",\n+                                \"displayName\": \"Hazelcast Initial Backoff\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-retry-backoff-initial\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"strict-type-checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n-                                \"displayName\": \"Strict Type Checking\",\n+                            \"hazelcast-retry-backoff-maximum\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"The maximum amount of time the client waits before it tries to reestablish connection.\",\n+                                \"displayName\": \"Hazelcast Maximum Backoff\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"strict-type-checking\",\n+                                \"name\": \"hazelcast-retry-backoff-maximum\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validation-details-attribute-name\": {\n-                                \"description\": \"If specified, when a validation error occurs, this attribute name will be used to leave the details. The number of characters will be limited by the property 'Maximum Validation Details Length'.\",\n-                                \"displayName\": \"Validation Details Attribute Name\",\n+                            \"hazelcast-retry-backoff-multiplier\": {\n+                                \"defaultValue\": \"1.5\",\n+                                \"description\": \"A multiplier by which the wait time is increased before each attempt to reestablish connection.\",\n+                                \"displayName\": \"Hazelcast Backoff Multiplier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validation-details-attribute-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-retry-backoff-multiplier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-server-address\": {\n+                                \"description\": \"Addresses of one or more the Hazelcast instances, using {host:port} format, separated by comma.\",\n+                                \"displayName\": \"Hazelcast Server Address\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-server-address\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"invalid\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"record\",\n-                            \"schema\",\n-                            \"validate\"\n+                            \"cache\",\n+                            \"hazelcast\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateRecord\",\n-                        \"typeDescription\": \"Validates the Records of an incoming FlowFile against a given schema. All records that adhere to the schema are routed to the \\\"valid\\\" relationship while records that do not adhere to the schema are routed to the \\\"invalid\\\" relationship. It is therefore possible for a single incoming FlowFile to be split into two individual FlowFiles if some records are valid according to the schema and others are not. Any FlowFile that is routed to the \\\"invalid\\\" relationship will emit a ROUTE Provenance Event with the Details field populated to explain why records were invalid. In addition, to gain further explanation of why records were invalid, DEBUG-level logging can be enabled for the \\\"org.apache.nifi.processors.standard.ValidateRecord\\\" logger.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.ExternalHazelcastCacheManager\",\n+                        \"typeDescription\": \"A service that provides cache instances backed by Hazelcast running outside of NiFi.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-file-resource-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-file-resource-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Schema File\": {\n-                                \"description\": \"The file path or URL to the XSD Schema file that is to be used for validation. If this property is blank, only XML syntax/structure will be validated.\",\n-                                \"displayName\": \"Schema File\",\n+                            \"file-path\": {\n+                                \"defaultValue\": \"${absolute.path}/${filename}\",\n+                                \"description\": \"Path to a file that can be accessed locally.\",\n+                                \"displayName\": \"File Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Schema File\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-path\",\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n-                            },\n-                            \"XML Source Attribute\": {\n-                                \"description\": \"The name of the attribute containing XML to be validated. If this property is blank, the FlowFile content will be validated.\",\n-                                \"displayName\": \"XML Source Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"XML Source Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema, if provided, or verified to be well-formed XML are routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema or contain invalid XML are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"While this processor supports processing XML within attributes, it is strongly discouraged to hold large amounts of data in attributes. In general, attribute values should be as small as possible and hold no more than a couple hundred characters.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"schema\",\n-                            \"validation\",\n-                            \"xml\",\n-                            \"xsd\"\n+                            \"file\",\n+                            \"resource\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateXml\",\n-                        \"typeDescription\": \"Validates XML contained in a FlowFile. By default, the XML is contained in the FlowFile content. If the 'XML Source Attribute' property is set, the XML to be validated is contained in the specified attribute. It is not recommended to use attributes to hold large XML documents; doing so could adversely affect system performance. Full schema validation is performed if the processor is configured with the XSD schema details. Otherwise, the only validation performed is to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n-                                \"name\": \"validatexml.invalid.error\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.fileresource.service.StandardFileResourceService\",\n+                        \"typeDescription\": \"Provides a file resource for other components. The file needs to be available locally by Nifi (e.g. local disk or mounted storage). NiFi needs to have read permission to the file.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-airtable-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-airtable-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"15 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"attribute-copy-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When cached attributes are copied onto released FlowFiles, they replace any matching attributes.\",\n-                                        \"displayName\": \"Replace if present\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"keeporiginal\",\n-                                \"description\": \"Specifies how to handle attributes copied from FlowFiles entering the Notify processor\",\n-                                \"displayName\": \"Attribute Copy Mode\",\n+                            \"api-key\": {\n+                                \"description\": \"The REST API key to use in queries. Should be generated on Airtable's account page.\",\n+                                \"displayName\": \"API Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-copy-mode\",\n+                                \"name\": \"api-key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to check for release signals from a corresponding Notify processor\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"api-url\": {\n+                                \"defaultValue\": \"https://api.airtable.com/v0\",\n+                                \"description\": \"The URL for the Airtable REST API including the domain and the path to the API (e.g. https://api.airtable.com/v0).\",\n+                                \"displayName\": \"API URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"api-url\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"expiration-duration\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'expired' relationship\",\n-                                \"displayName\": \"Expiration Duration\",\n+                            \"base-id\": {\n+                                \"description\": \"The ID of the Airtable base to be queried.\",\n+                                \"displayName\": \"Base ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expiration-duration\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"base-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"releasable-flowfile-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the releasable FlowFile count. This specifies how many FlowFiles can be released when a target count reaches target signal count. Zero (0) has a special meaning, any number of FlowFiles can be released as long as signal count matches target.\",\n-                                \"displayName\": \"Releasable FlowFile Count\",\n+                            \"custom-filter\": {\n+                                \"description\": \"Filter records by Airtable's formulas.\",\n+                                \"displayName\": \"Custom Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"releasable-flowfile-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"release-signal-id\": {\n-                                \"description\": \"A value that specifies the key to a specific release signal cache. To decide whether the FlowFile that is being processed by the Wait processor should be sent to the 'success' or the 'wait' relationship, the processor checks the signals in the cache specified by this key.\",\n-                                \"displayName\": \"Release Signal Identifier\",\n+                            \"fields\": {\n+                                \"description\": \"Comma-separated list of fields to query from the table. Both the field's name and ID can be used.\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"signal-counter-name\": {\n-                                \"description\": \"Within the cache (specified by the Release Signal Identifier) the signals may belong to different counters. If this property is specified, the processor checks the number of signals in the cache that belong to this particular counter. If not specified, the processor checks the total number of signals in the cache.\",\n-                                \"displayName\": \"Signal Counter Name\",\n+                            \"max-records-per-flowfile\": {\n+                                \"description\": \"The maximum number of result records that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If no value specified, then all records are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Records Per FlowFile\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-records-per-flowfile\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"target-signal-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of signals that need to be in the cache (specified by the Release Signal Identifier) in order for the FlowFile processed by the Wait processor to be sent to the \\u2018success\\u2019 relationship. If the number of signals in the cache has reached this number, the FlowFile is routed to the 'success' relationship and the number of signals in the cache is decreased by this value. If Signal Counter Name is specified, this processor checks a particular counter, otherwise checks against the total number of signals in the cache.\",\n-                                \"displayName\": \"Target Signal Count\",\n+                            \"query-page-size\": {\n+                                \"description\": \"Number of records to be fetched in a page. Should be between 1 and 100 inclusively.\",\n+                                \"displayName\": \"Query Page Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"target-signal-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"query-page-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-buffer-count\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specify the maximum number of incoming FlowFiles that can be buffered to check whether it can move forward. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping FlowFiles by signal identifier. Only a signal identifier can be processed at a processor execution.\",\n-                                \"displayName\": \"Wait Buffer Count\",\n+                            \"query-time-window-lag\": {\n+                                \"defaultValue\": \"3 s\",\n+                                \"description\": \"The amount of lag to be applied to the query time window's end point. Set this property to avoid missing records when the clock of your local machines and Airtable servers' clock are not in sync. Must be greater than or equal to 1 second.\",\n+                                \"displayName\": \"Query Time Window Lag\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-buffer-count\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"query-time-window-lag\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Transfer a FlowFile to the 'wait' relationship when whose release signal has not been notified yet. This mode allows other incoming FlowFiles to be enqueued by moving FlowFiles into the wait relationship. It is recommended to set a prioritizer (for instance First In First Out) on the 'wait' relationship.\",\n-                                        \"displayName\": \"Transfer to wait relationship\",\n-                                        \"value\": \"wait\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Transfer a FlowFile to the upstream connection where it comes from when whose release signal has not been notified yet. This mode helps keeping upstream connection being full so that the upstream source processor will not be scheduled while back-pressure is active and limit incoming FlowFiles. \",\n-                                        \"displayName\": \"Keep in the upstream connection\",\n-                                        \"value\": \"keep\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"wait\",\n-                                \"description\": \"Specifies how to handle a FlowFile waiting for a notify signal\",\n-                                \"displayName\": \"Wait Mode\",\n+                            \"table-id\": {\n+                                \"description\": \"The name or the ID of the Airtable table to be queried.\",\n+                                \"displayName\": \"Table ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"table-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-penalty-duration\": {\n-                                \"description\": \"If configured, after a signal identifier got processed but did not meet the release criteria, the signal identifier is penalized and FlowFiles having the signal identifier will not be processed again for the specified period of time, so that the signal identifier will not block others to be processed. This can be useful for use cases where a Wait processor is expected to process multiple signal identifiers, and each signal identifier has multiple FlowFiles, and also the order of releasing FlowFiles is important within a signal identifier. The FlowFile order can be configured with Prioritizers. IMPORTANT: There is a limitation of number of queued signals can be processed, and Wait processor may not be able to check all queued signal ids. See additional details for the best practice.\",\n-                                \"displayName\": \"Wait Penalty Duration\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Web Client Service Provider to use for Airtable REST API requests\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-penalty-duration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"web-client-service-provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.Notify\"\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile that has exceeded the configured Expiration Duration will be routed to this relationship\",\n-                                \"name\": \"expired\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with a matching release signal in the cache will be routed to this relationship\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with no matching release signal in the cache will be routed to this relationship\",\n-                                \"name\": \"wait\"\n-                            },\n-                            {\n-                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"hold\",\n-                            \"map\",\n-                            \"release\",\n-                            \"signal\",\n-                            \"wait\"\n+                            \"airtable\",\n+                            \"database\",\n+                            \"query\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.Wait\",\n-                        \"typeDescription\": \"Routes incoming FlowFiles to the 'wait' relationship until a matching release signal is stored in the distributed cache from a corresponding Notify processor. When a matching release signal is identified, a waiting FlowFile is routed to the 'success' relationship. The release signal entry is then removed from the cache. The attributes of the FlowFile that produced the release signal are copied to the waiting FlowFile if the Attribute Cache Regex property of the corresponding Notify processor is set properly. If there are multiple release signals in the cache identified by the Release Signal Identifier, and the Notify processor is configured to copy the FlowFile attributes to the cache, then the FlowFile passing the Wait processor receives the union of the attributes of the FlowFiles that produced the release signals in the cache (identified by Release Signal Identifier). Waiting FlowFiles will be routed to 'expired' if they exceed the Expiration Duration. If you need to wait for more than one signal, specify the desired number of signals via the 'Target Signal Count' property. This is particularly useful with processors that split a source FlowFile into multiple fragments, such as SplitText. In order to wait for all fragments to be processed, connect the 'original' relationship to a Wait processor, and the 'splits' relationship to a corresponding Notify processor. Configure the Notify and Wait processors to use the '${fragment.identifier}' as the value of 'Release Signal Identifier', and specify '${fragment.count}' as the value of 'Target Signal Count' in the Wait processor.It is recommended to use a prioritizer (for instance First In First Out) when using the 'wait' relationship as a loop.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.airtable.QueryAirtableTable\",\n+                        \"typeDescription\": \"Query records from an Airtable table. Records are incrementally retrieved based on the last modified time of the records. Records can also be further filtered by setting the 'Custom Filter' property which supports the formulas provided by the Airtable API. This processor is intended to be run on the Primary Node only.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All FlowFiles will have an attribute 'wait.start.timestamp', which sets the initial epoch timestamp when the file first entered this processor.  This is used to determine the expiration time of the FlowFile.  This attribute is not written when the FlowFile is transferred to failure, expired or success\",\n-                                \"name\": \"wait.start.timestamp\"\n+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The name of each counter for which at least one signal has been present in the cache since the last time the cache was empty gets copied to the current FlowFile as an attribute.\",\n-                                \"name\": \"wait.counter.<counterName>\"\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n                             }\n                         ]\n                     }\n                 ],\n-                \"reportingTasks\": [\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Show Deltas\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not to show the difference in values between the current status and the previous status\",\n-                                \"displayName\": \"Show Deltas\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Show Deltas\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reporting-granularity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n-                                        \"displayName\": \"Five Minutes\",\n-                                        \"value\": \"five-minutes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n-                                        \"displayName\": \"One Second\",\n-                                        \"value\": \"one-second\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"five-minutes\",\n-                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n-                                \"displayName\": \"Reporting Granularity\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reporting-granularity\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"log\",\n-                            \"stats\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.ControllerStatusReportingTask\",\n-                        \"typeDescription\": \"Logs the 5-minute stats that are shown in the NiFi Summary Page for Processors and Connections, as well optionally logging the deltas between the previous iteration and the current iteration. Processors' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Processors logger, while Connections' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Connections logger. These can be configured in the NiFi logging configuration to log to different files, if desired.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Directory Display Name\": {\n-                                \"defaultValue\": \"Un-Named\",\n-                                \"description\": \"The name to display for the directory in alerts.\",\n-                                \"displayName\": \"Directory Display Name\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Directory Display Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory Location\": {\n-                                \"description\": \"The directory path of the partition to be monitored.\",\n-                                \"displayName\": \"Directory Location\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Directory Location\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Threshold\": {\n-                                \"defaultValue\": \"80%\",\n-                                \"description\": \"The threshold at which a bulletin will be generated to indicate that the disk usage of the partition on which the directory found is of concern\",\n-                                \"displayName\": \"Threshold\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Threshold\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"disk\",\n-                            \"monitoring\",\n-                            \"repo\",\n-                            \"storage\",\n-                            \"warning\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.MonitorDiskUsage\",\n-                        \"typeDescription\": \"Checks the amount of storage space available for the specified directory and warns (via a log message and a System-Level Bulletin) if the partition on which it lives exceeds some configurable threshold of storage space\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Memory Pool\": {\n+                            },\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"G1 Eden Space\",\n-                                        \"value\": \"G1 Eden Space\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"G1 Old Gen\",\n-                                        \"value\": \"G1 Old Gen\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"G1 Survivor Space\",\n-                                        \"value\": \"G1 Survivor Space\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"G1 Old Gen\",\n-                                \"description\": \"The name of the JVM Memory Pool to monitor. The allowed values for Memory Pools are platform and JVM dependent and may vary for different versions of Java and from published documentation. This reporting task will become invalidated if configured to use a Memory Pool that is not available on the currently running host platform and JVM\",\n-                                \"displayName\": \"Memory Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Memory Pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Reporting Interval\": {\n-                                \"description\": \"Indicates how often this reporting task should report bulletins while the memory utilization exceeds the configured threshold\",\n-                                \"displayName\": \"Reporting Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Interval\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Usage Threshold\": {\n-                                \"defaultValue\": \"65%\",\n-                                \"description\": \"Indicates the threshold at which warnings should be generated. This can be a percentage or a Data Size\",\n-                                \"displayName\": \"Usage Threshold\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Usage Threshold\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"garbage collection\",\n-                            \"gc\",\n-                            \"heap\",\n-                            \"jvm\",\n-                            \"memory\",\n-                            \"monitor\",\n-                            \"warning\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.controller.MonitorMemory\",\n-                        \"typeDescription\": \"Checks the amount of Java Heap available in the JVM for a particular JVM Memory Pool. If the amount of space used exceeds some configurable threshold, will warn (via a log message and System-Level Bulletin) that the memory pool is exceeding this threshold.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The fully-qualified name of the host on which Ganglia is running\",\n-                                \"displayName\": \"Hostname\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8649\",\n-                                \"description\": \"The Port on which Ganglia is listening for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n+                            \"el-rest-output-no-hits\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send JVM Metrics\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"ganglia\",\n-                            \"stats\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.ganglia.StandardGangliaReporter\",\n-                        \"typeDescription\": \"Reports metrics to Ganglia so that Ganglia can be used for external monitoring of the application. Metrics reported include JVM Metrics (optional); the following 5-minute NiFi statistics: FlowFiles Received, Bytes Received, FlowFiles Sent, Bytes Sent, Bytes Read, Bytes Written, Total Task Duration; and the current values for FlowFiles Queued, Bytes Queued, and number of Active Threads.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-kubernetes-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database User\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n                             },\n-                            \"mongo-uri\": {\n-                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n-                                \"displayName\": \"Mongo URI\",\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"mongo-uri\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-write-concern\": {\n+                            \"el-rest-pagination-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement, using the default write concern configured on the server\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write operations that use this write concern will return as soon as the message is written to the socket. Exceptions are raised for network issues, but not server errors\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deprecated.  Use of \\\"JOURNALED\\\" is preferred\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write operations wait for the server to group commit to the journal file on disk\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deprecated.  Use of \\\"W2\\\" is preferred\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n+                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n                                     },\n                                     {\n-                                        \"description\": \"Exceptions are raised for network issues, and server errors; waits on a majority of servers for the write operation\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n                                     },\n                                     {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from a single member\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n-                                    },\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from two members\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from three members\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-write-concern\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n+                                \"name\": \"el-rest-split-up-hits\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"es-rest-additional-filters\": {\n+                                \"description\": \"One or more query filters in JSON syntax, not Lucene syntax. Ex: [{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}, {\\\"match\\\":{\\\"anotherfield\\\":\\\"anothervalue\\\"}}]. These filters wil be used as part of a Bool query's filter.\",\n+                                \"displayName\": \"Additional Filters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"es-rest-additional-filters\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"service\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.mongodb.MongoDBControllerService\",\n-                        \"typeDescription\": \"Provides a controller service that configures a connection to MongoDB and provides access to that connection to other Mongo-related components.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"mongo-collection-name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-aggs\": {\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-collection-name\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-query-aggs\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-db-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"es-rest-query-fields\": {\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-db-name\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-lookup-client-service\": {\n-                                \"description\": \"A MongoDB controller service to use with this lookup service.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"mongo-lookup-projection\": {\n-                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n-                                \"displayName\": \"Projection\",\n+                            \"es-rest-query-script-fields\": {\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-projection\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-lookup-value-field\": {\n-                                \"description\": \"The field whose value will be returned when the lookup key(s) match a record. If not specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n-                                \"displayName\": \"Lookup Value Field\",\n+                            \"es-rest-query-sort\": {\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-value-field\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"es-rest-range-field\": {\n+                                \"description\": \"Field to be tracked as part of an Elasticsearch Range query using a \\\"gt\\\" bound match. This field must exist within the Elasticsearch document for it to be retrieved.\",\n+                                \"displayName\": \"Range Query Field\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"es-rest-range-field\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n+                            \"es-rest-range-format\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to a date with this format. If not specified, Elasticsearch will use the date format provided by the \\\"Range Query Field\\\"'s mapping. For valid syntax, see https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html\",\n+                                \"displayName\": \"Initial Value Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"es-rest-range-initial-value\": {\n+                                \"description\": \"The initial value to use for the query if the processor has not run previously. If the processor has run previously and stored a value in its state, this property will be ignored. If no value is provided, and the processor has not previously run, no Range query bounds will be used, i.e. all documents will be retrieved in the specified \\\"Sort Order\\\".\",\n+                                \"displayName\": \"Initial Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-initial-value\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n+                            \"es-rest-range-time-zone\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to UTC with this time zone. Valid values are ISO 8601 UTC offsets, such as \\\"+01:00\\\" or \\\"-08:00\\\", and IANA time zone IDs, such as \\\"Europe/London\\\".\",\n+                                \"displayName\": \"Initial Value Date Time Zone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"es-rest-range-time-zone\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n+                            \"es-rest-size\": {\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"es-rest-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                            \"es-rest-sort-order\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"asc\",\n+                                        \"value\": \"asc\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"desc\",\n+                                        \"value\": \"desc\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"lookup\",\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"record\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.mongodb.MongoDBLookupService\",\n-                        \"typeDescription\": \"Provides a lookup service based around MongoDB. Each key that is specified \\nwill be added to a query as-is. For example, if you specify the two keys, \\nuser and email, the resulting query will be { \\\"user\\\": \\\"tester\\\", \\\"email\\\": \\\"tester@test.com\\\" }.\\nThe query is limited to the first result (findOne in the Mongo documentation). If no \\\"Lookup Value Field\\\" is specified then the entire MongoDB result document minus the _id field will be returned as a record.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-py4j-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"websocket-client-controller-service\": {\n-                                \"description\": \"A WebSocket CLIENT Controller Service which can connect to a WebSocket server.\",\n-                                \"displayName\": \"WebSocket Client ControllerService\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-client-controller-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"websocket-client-id\": {\n-                                \"description\": \"The client ID to identify WebSocket session. It should be unique within the WebSocket Client Controller Service. Otherwise, it throws WebSocketConfigurationException when it gets started.\",\n-                                \"displayName\": \"WebSocket Client Id\",\n+                                \"defaultValue\": \"asc\",\n+                                \"description\": \"The order in which to sort the \\\"Range Query Field\\\". A \\\"sort\\\" clause for the \\\"Range Query Field\\\" field will be prepended to any provided \\\"Sort\\\" clauses. If a \\\"sort\\\" clause already exists for the \\\"Range Query Field\\\" field, it will not be updated.\",\n+                                \"displayName\": \"Sort Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-client-id\",\n+                                \"name\": \"es-rest-sort-order\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp, trackingRangeValue) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n-                            },\n-                            {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"scroll\",\n+                            \"search\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.ConnectWebSocket\",\n-                        \"typeDescription\": \"Acts as a WebSocket client endpoint to interact with a remote WebSocket server. FlowFiles are transferred to downstream relationships according to received message types as WebSocket client configured with this processor receives messages from remote WebSocket server. If a new flowfile is passed to the processor, the previous sessions will be closed and any data being sent will be aborted.\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n+                        \"typeDescription\": \"A processor that repeatedly runs a paginated query against a field using a Range query to consume new Documents from an Elasticsearch index/query. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the Range query will automatically update the field constraint based on the last retrieved Document value.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n-                            },\n-                            {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44554,112 +48736,200 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"server-url-path\": {\n-                                \"description\": \"The WetSocket URL Path on which this processor listens to. Must starts with '/', e.g. '/example'.\",\n-                                \"displayName\": \"Server URL Path\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"server-url-path\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-server-controller-service\": {\n-                                \"description\": \"A WebSocket SERVER Controller Service which can accept WebSocket requests.\",\n-                                \"displayName\": \"WebSocket Server ControllerService\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-server-controller-service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-query-clause\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-query-definition-style\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-query-definition-style\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n+                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\n+                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"delete\",\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.ListenWebSocket\",\n-                        \"typeDescription\": \"Acts as a WebSocket server endpoint to accept client connections. FlowFiles are transferred to downstream relationships according to received message types as the WebSocket server configured with this processor receives client requests\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.DeleteByQueryElasticsearch\",\n+                        \"typeDescription\": \"Delete from an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n-                            },\n-                            {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The amount of time that it took to complete the delete operation in ms.\",\n+                                \"name\": \"elasticsearch.delete.took\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error running the delete.\",\n+                                \"name\": \"elasticsearch.delete.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44667,148 +48937,187 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"websocket-controller-service-id\": {\n-                                \"defaultValue\": \"${websocket.controller.service.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the id of a WebSocket ControllerService.\",\n-                                \"displayName\": \"WebSocket ControllerService Id\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-controller-service-id\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-endpoint-id\": {\n-                                \"defaultValue\": \"${websocket.endpoint.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the endpoint id of a WebSocket ControllerService.\",\n-                                \"displayName\": \"WebSocket Endpoint Id\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-endpoint-id\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-message-type\": {\n-                                \"defaultValue\": \"TEXT\",\n-                                \"description\": \"The type of message content: TEXT or BINARY\",\n-                                \"displayName\": \"WebSocket Message Type\",\n+                            \"get-es-attribute-name\": {\n+                                \"defaultValue\": \"elasticsearch.doc\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"flowfile-attribute\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"get-es-destination\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of the FlowFile attribute to use for the retrieved document output.\",\n+                                \"displayName\": \"Attribute Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-message-type\",\n+                                \"name\": \"get-es-attribute-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-session-id\": {\n-                                \"defaultValue\": \"${websocket.session.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n-                                \"displayName\": \"WebSocket Session Id\",\n+                            \"get-es-destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Output the retrieved document as a FlowFile attribute specified by the Attribute Name.\",\n+                                        \"displayName\": \"FlowFile Attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the retrieved document is written to the FlowFile content or a FlowFile attribute.\",\n+                                \"displayName\": \"Destination\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"get-es-destination\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-es-id\": {\n+                                \"description\": \"The _id of the document to retrieve.\",\n+                                \"displayName\": \"Document Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-session-id\",\n+                                \"name\": \"get-es-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Fetched documents are routed to this relationship.\",\n+                                \"name\": \"document\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n+                                \"name\": \"not_found\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"publish\",\n-                            \"send\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.websocket.PutWebSocket\",\n-                        \"typeDescription\": \"Sends messages to a WebSocket remote endpoint using a WebSocket session that is established by either ListenWebSocket or ConnectWebSocket.\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\",\n+                        \"typeDescription\": \"Elasticsearch get processor that uses the official Elastic REST client libraries to fetch a single document from Elasticsearch by _id. Note that the full body of the document will be read into memory before being written to a FlowFile for transfer.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n-                            },\n-                            {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n-                            },\n-                            {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n-                            },\n-                            {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"elasticsearch.index\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"elasticsearch.type\"\n                             },\n                             {\n-                                \"description\": \"Detail of the failure.\",\n-                                \"name\": \"websocket.failure.detail\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error fetching the document.\",\n+                                \"name\": \"elasticsearch.get.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44816,508 +49125,440 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether this Processor should commit the offsets to Kafka after receiving messages. Typically, this value should be set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafka in order to provide Exactly Once semantics.\",\n-                                \"displayName\": \"Commit Offsets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Group ID\": {\n-                                \"description\": \"Kafka Consumer Group Identifier corresponding to Kafka group.id property\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Group ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Header Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding applied when reading Kafka Record Header values and writing FlowFile attributes\",\n-                                \"displayName\": \"Header Encoding\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Encoding\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Header Name Pattern\": {\n-                                \"description\": \"Regular Expression Pattern applied to Kafka Record Header Names for selecting Header Values to be written as FlowFile attributes\",\n-                                \"displayName\": \"Header Name Pattern\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Name Pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Kafka Connection Service\": {\n-                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n-                                \"displayName\": \"Kafka Connection Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kafka Connection Service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Key Attribute Encoding\": {\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"Output Strategy\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"description\": \"Encoding for value of configured FlowFile attribute containing Kafka Record Key.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Key Attribute Encoding\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Format\": {\n+                            \"el-rest-format-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"string\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n-                                        \"displayName\": \"Byte Array\",\n-                                        \"value\": \"byte-array\"\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"byte-array\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"Output Strategy\"\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how to represent the Kafka Record Key in the output FlowFile\",\n-                                \"displayName\": \"Key Format\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Key Format\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Record Reader\": {\n-                                \"dependencies\": [\n+                            \"el-rest-output-no-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"record\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Key Format\",\n-                                        \"propertyName\": \"Key Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Reader to use for parsing the Kafka Record Key into a Record\",\n-                                \"displayName\": \"Key Record Reader\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Key Record Reader\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Max Uncommitted Time\": {\n-                                \"defaultValue\": \"1 s\",\n+                            \"el-rest-query\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"full\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed. Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits. This value is also related to maximum poll records and the use of a message demarcator. When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Uncommitted Time\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Demarcator\": {\n+                            \"el-rest-query-clause\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"DEMARCATOR\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, this Processor has an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Demarcator\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Strategy\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RECORD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n                                     }\n                                 ],\n-                                \"description\": \"The format used to output the Kafka Record into a FlowFile Record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Strategy\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Processing Strategy\": {\n+                            \"el-rest-split-up-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write one FlowFile for each Kafka Record consumed\",\n-                                        \"displayName\": \"FLOW_FILE\",\n-                                        \"value\": \"FLOW_FILE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write one FlowFile for each batch of Kafka Records consumed (optionally grouped by Kafka key)\",\n-                                        \"displayName\": \"DEMARCATOR\",\n-                                        \"value\": \"DEMARCATOR\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"Write one FlowFile containing multiple Kafka Records consumed and processed with Record Reader and Record Writer\",\n-                                        \"displayName\": \"RECORD\",\n-                                        \"value\": \"RECORD\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOW_FILE\",\n-                                \"description\": \"Strategy for processing Kafka Records and writing serialized output to FlowFiles\",\n-                                \"displayName\": \"Processing Strategy\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Processing Strategy\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"dependencies\": [\n+                            \"el-rest-split-up-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"RECORD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Reader to use for incoming Kafka messages\",\n-                                \"displayName\": \"Record Reader\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-aggs\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"RECORD\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use in order to serialize the outgoing FlowFiles\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-aggs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Separate By Key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n+                            \"es-rest-query-fields\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Message Demarcator\",\n-                                        \"propertyName\": \"Message Demarcator\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"When this property is enabled, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Separate By Key\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Topic Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Topic is a regular expression according to the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topics provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Format\",\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Topic Format\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Topics\": {\n-                                \"description\": \"The name or pattern of the Kafka Topics from which the Processor consumes Kafka Records. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topics\",\n+                            \"es-rest-query-sort\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Topics\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n+                            \"es-rest-size\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset found for the consumer group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Automatic offset configuration applied when no previous consumer offset found corresponding to Kafka auto.offset.reset property\",\n-                                \"displayName\": \"Auto Offset Reset\",\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.kafka.processors.PublishKafka\"\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles containing one or more serialized Kafka Records\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n+                            },\n+                            {\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n+                            },\n+                            {\n+                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"get\",\n+                            \"json\",\n+                            \"query\",\n+                            \"read\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.kafka.processors.ConsumeKafka\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka Consumer API. The complementary NiFi processor for sending messages is PublishKafka. The Processor supports consumption of Kafka messages, optionally interpreted as NiFi records. Please note that, at this time (in read record mode), the Processor assumes that all records that are retrieved from a given partition have the same schema. For this mode, if any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to run a query (with aggregations) written with the Elasticsearch JSON DSL. It does not automatically paginate queries for the user. If an incoming relationship is added to this processor, it will use the flowfile's content for the query. Care should be taken on the size of the query because the entire response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"description\": \"application/json\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n-                            },\n-                            {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n-                            },\n-                            {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n                             },\n                             {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n                             },\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n                             },\n                             {\n-                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n-                                \"name\": \"kafka.tombstone\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -45325,1995 +49566,2010 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Attribute Header Pattern\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the pattern will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"FlowFile Attribute Header Pattern\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Attribute Header Pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Header Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"FlowFile Attribute Header Pattern\",\n-                                        \"propertyName\": \"FlowFile Attribute Header Pattern\"\n-                                    }\n-                                ],\n-                                \"description\": \"For any attribute that is added as a Kafka Record Header, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kafka Connection Service\": {\n-                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n-                                \"displayName\": \"Kafka Connection Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kafka Connection Service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Kafka Key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Key to use for the Message. If not specified, the FlowFile attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Kafka Key\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kafka Key Attribute Encoding\": {\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Kafka Key Attribute Encoding\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kafka Key Attribute Encoding\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Key Field\": {\n-                                \"dependencies\": [\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Key Field\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Publish Strategy\": {\n+                            \"el-rest-output-no-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n-                                        \"displayName\": \"Use Content as Record Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Publish Strategy\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Key Writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n-                                \"displayName\": \"Record Key Writer\",\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Key Writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Record Metadata Strategy\": {\n+                            \"el-rest-pagination-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n-                                        \"displayName\": \"Metadata From Record\",\n-                                        \"value\": \"FROM_RECORD\"\n+                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n                                     },\n                                     {\n-                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n-                                        \"displayName\": \"Use Configured Values\",\n-                                        \"value\": \"FROM_PROPERTIES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FROM_PROPERTIES\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n-                                \"displayName\": \"Record Metadata Strategy\",\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Metadata Strategy\",\n+                                \"name\": \"el-rest-pagination-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Topic Name\": {\n-                                \"description\": \"Name of the Kafka Topic to which the Processor publishes Kafka Records\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Topic Name\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transactional ID Prefix\": {\n+                            \"el-rest-query-clause\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Transactions Enabled\",\n-                                        \"propertyName\": \"Transactions Enabled\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the KafkaProducer config transactional.id will be a generated UUID and will be prefixed with the configured string.\",\n-                                \"displayName\": \"Transactional ID Prefix\",\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Transactional ID Prefix\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transactions Enabled\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether to provide transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the [Delivery Guarantee] property be set to [Guarantee Replicated Delivery.]\",\n-                                \"displayName\": \"Transactions Enabled\",\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transactions Enabled\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"el-rest-split-up-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka Client acks property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Specifies the compression strategy for records sent to Kafka. Corresponds to Kafka Client compression.type property.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka Client max.request.size property.\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies the Kafka Partition destination for Records.\",\n-                                \"displayName\": \"Partition\",\n+                            \"es-rest-query-aggs\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n+                                \"name\": \"es-rest-query-aggs\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n+                            \"es-rest-query-fields\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners.RoundRobinPartitioner\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-query-sort\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners.ExpressionLanguagePartitioner\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka Client partitioner.class property.\",\n-                                \"displayName\": \"Partitioner Class\",\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"es-rest-size\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If this attribute is set to 'true', if the processor is not configured with a demarcator and if the FlowFile's content is null, then a tombstone message with zero bytes will be sent to Kafka.\",\n-                                \"name\": \"kafka.tombstone\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.kafka.processors.ConsumeKafka\"\n+                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n+                            },\n+                            {\n+                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n                             \"json\",\n-                            \"logs\"\n+                            \"page\",\n+                            \"query\",\n+                            \"read\",\n+                            \"scroll\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.kafka.processors.PublishKafka\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as either a message or as individual records to Apache Kafka using the Kafka Producer API. The messages to send may be individual FlowFiles, may be delimited using a user-specified delimiter (such as a new-line), or may be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafka.\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. It will use the flowfile's content for the query unless the QUERY attribute is populated. Search After/Point in Time queries must include a valid \\\"sort\\\" field.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-key-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-key-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the value is null or blank, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the Bulk request header\",\n+                                \"value\": \"The value of the Bulk request header\"\n+                            },\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body. If FlowFiles are batched, only the first FlowFile in the batch is used to evaluate property values.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"key\": {\n-                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"key-file\": {\n-                                \"description\": \"File path to Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"key-password\": {\n-                                \"description\": \"Password used for decrypting Private Keys\",\n-                                \"displayName\": \"Key Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.key.service.api.PrivateKeyService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"PEM\",\n-                            \"PKCS8\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.key.service.StandardPrivateKeyService\",\n-                        \"typeDescription\": \"Private Key Service provides access to a Private Key loaded from configured sources\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-confluent-platform-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"confluent\",\n-                            \"kafka\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceReader\",\n-                        \"typeDescription\": \"Reads Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceWriter\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"confluent\",\n-                            \"kafka\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceWriter\",\n-                        \"typeDescription\": \"Writes Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Properties that begin with 'request.header.' are populated into a map and passed as http headers in REST requests to the Confluent Schema Registry\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"request.header.*\",\n-                                \"value\": \"String literal, may not be empty\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"authentication-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BASIC\",\n-                                        \"value\": \"BASIC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"HTTP Client Authentication Type for Confluent Schema Registry\",\n-                                \"displayName\": \"Authentication Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authentication-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"ssl-context\": {\n-                                \"description\": \"Specifies the SSL Context Service to use for interacting with the Confluent Schema Registry\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"url\": {\n-                                \"defaultValue\": \"http://localhost:8081\",\n-                                \"description\": \"A comma-separated list of URLs of the Schema Registry to interact with\",\n-                                \"displayName\": \"Schema Registry URLs\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"url\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Username\",\n+                            \"put-es-json-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"confluent\",\n-                            \"kafka\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Confluent Schema Registry so that those Schemas that are stored in the Confluent Schema Registry can be used in NiFi. The Confluent Schema Registry has a notion of a \\\"subject\\\" for schemas, which is their terminology for a schema name. When a Schema is looked up by name by this registry, it will find a Schema in the Confluent Schema Registry with that subject.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-3-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-3-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 s\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that the service will wait for a response from Kafka.\\nIf Kafka does not acknowledge the message within this time period, the service will throw an exception.\\n\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"put-es-json-dynamic_templates\": {\n+                                \"description\": \"The dynamic_templates for the document. Must be parsable as a JSON Object. Requires Elasticsearch 7+\",\n+                                \"displayName\": \"Dynamic Templates\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-dynamic_templates\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"description\": \"Comma-separated list of Kafka Bootstrap Servers in the format host:port. Corresponds to Kafka bootstrap.servers property\",\n-                                \"displayName\": \"Bootstrap Servers\",\n+                            \"put-es-json-id-attr\": {\n+                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n+                                \"displayName\": \"Identifier Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-json-id-attr\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"default.api.timeout.ms\": {\n-                                \"defaultValue\": \"60 s\",\n-                                \"description\": \"Default timeout for Kafka client operations. Mapped to Kafka default.api.timeout.ms. The Kafka request.timeout.ms property is derived from half of the configured timeout\",\n-                                \"displayName\": \"Client Timeout\",\n+                            \"put-es-json-script\": {\n+                                \"description\": \"The script for the document update/upsert. Only applies to Update/Upsert operations. Must be parsable as JSON Object. If left blank, the FlowFile content will be used for document update/upsert\",\n+                                \"displayName\": \"Script\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"default.api.timeout.ms\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-script\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"isolation.level\": {\n+                            \"put-es-json-scripted-upsert\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Read records from Kafka only after the producer has committed a transaction.\",\n-                                        \"displayName\": \"Read Committed\",\n-                                        \"value\": \"read_committed\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Read records from Kafka as soon as the produced has sent the record, regardless of transaction status.\",\n-                                        \"displayName\": \"Read Uncommitted\",\n-                                        \"value\": \"read_uncommitted\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"read_committed\",\n-                                \"description\": \"Specifies how the service should handle transaction isolation levels when communicating with Kafka.\\nThe uncommited option means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions.\\nThe committed option configures the service to not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the\\nconsumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\\nCorresponds to Kafka isolation.level property.\\n\",\n-                                \"displayName\": \"Transaction Isolation Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"isolation.level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 s\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the\\nentire 'send' call. Corresponds to Kafka max.block.ms property\\n\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n+                                \"displayName\": \"Scripted Upsert\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-scripted-upsert\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"put-es-not_found-is-error\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship.\",\n+                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-not_found-is-error\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"put-es-output-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"successful\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-output-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"SASL Password\",\n+                            \"put-es-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of FlowFiles to send over in a single batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n+                                \"name\": \"put-es-record-batch-size\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"SASL Username\",\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"put-es-record-log-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n+                                \"displayName\": \"Log Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-kafka-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"successful\"\n+                            },\n+                            {\n+                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"type\": \"org.apache.nifi.kafka.service.Kafka3ConnectionService\",\n-                        \"typeDescription\": \"Provides and manages connections to Kafka Brokers for producer or consumer operations.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-airtable-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The Batch of FlowFiles will be stored in memory until the bulk operation is performed.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\",\n+                        \"typeDescription\": \"An Elasticsearch put processor that uses the official Elastic REST client libraries. Each FlowFile is treated as a document to be sent to the Elasticsearch _bulk API. Multiple FlowFiles can be batched together into each Request sent to Elasticsearch.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The error message if there is an issue parsing the FlowFile, sending the parsed document to Elasticsearch or parsing the Elasticsearch response\",\n+                                \"name\": \"elasticsearch.put.error\"\n+                            },\n+                            {\n+                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n+                                \"name\": \"elasticsearch.bulk.error\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-airtable-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"15 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the Record Path expression results in a null or blank value, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the Bulk request header\",\n+                                \"value\": \"A Record Path expression to retrieve the Bulk request header value\"\n+                            },\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"api-key\": {\n-                                \"description\": \"The REST API key to use in queries. Should be generated on Airtable's account page.\",\n-                                \"displayName\": \"API Key\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"api-url\": {\n-                                \"defaultValue\": \"https://api.airtable.com/v0\",\n-                                \"description\": \"The URL for the Airtable REST API including the domain and the path to the API (e.g. https://api.airtable.com/v0).\",\n-                                \"displayName\": \"API URL\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"base-id\": {\n-                                \"description\": \"The ID of the Airtable base to be queried.\",\n-                                \"displayName\": \"Base ID\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"base-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-filter\": {\n-                                \"description\": \"Filter records by Airtable's formulas.\",\n-                                \"displayName\": \"Custom Filter\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"fields\": {\n-                                \"description\": \"Comma-separated list of fields to query from the table. Both the field's name and ID can be used.\",\n-                                \"displayName\": \"Fields\",\n+                            \"put-es-not_found-is-error\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship.\",\n+                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"fields\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-not_found-is-error\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-records-per-flowfile\": {\n-                                \"description\": \"The maximum number of result records that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If no value specified, then all records are returned in a single FlowFile.\",\n-                                \"displayName\": \"Max Records Per FlowFile\",\n+                            \"put-es-output-error-responses\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"successful\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-records-per-flowfile\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-output-error-responses\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"query-page-size\": {\n-                                \"description\": \"Number of records to be fetched in a page. Should be between 1 and 100 inclusively.\",\n-                                \"displayName\": \"Query Page Size\",\n+                            \"put-es-record-at-timestamp\": {\n+                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n+                                \"displayName\": \"@timestamp Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-at-timestamp-date-format\": {\n+                                \"description\": \"Specifies the format to use when writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"query-page-size\",\n+                                \"name\": \"put-es-record-at-timestamp-date-format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"query-time-window-lag\": {\n-                                \"defaultValue\": \"3 s\",\n-                                \"description\": \"The amount of lag to be applied to the query time window's end point. Set this property to avoid missing records when the clock of your local machines and Airtable servers' clock are not in sync. Must be greater than or equal to 1 second.\",\n-                                \"displayName\": \"Query Time Window Lag\",\n+                            \"put-es-record-at-timestamp-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n+                                \"displayName\": \"@timestamp Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-at-timestamp-time-format\": {\n+                                \"description\": \"Specifies the format to use when writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n+                                \"displayName\": \"Time Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"query-time-window-lag\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-at-timestamp-time-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"table-id\": {\n-                                \"description\": \"The name or the ID of the Airtable table to be queried.\",\n-                                \"displayName\": \"Table ID\",\n+                            \"put-es-record-at-timestamp-timestamp-format\": {\n+                                \"description\": \"Specifies the format to use when writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n+                                \"displayName\": \"Timestamp Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"table-id\",\n+                                \"name\": \"put-es-record-at-timestamp-timestamp-format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of records to send over in a single batch.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Web Client Service Provider to use for Airtable REST API requests\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"put-es-record-bulk-error-groups\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Result Record Writer\",\n+                                        \"propertyName\": \"put-es-record-error-writer\"\n+                                    }\n+                                ],\n+                                \"description\": \"The errored records written to the \\\"errors\\\" relationship will be grouped by error type and the error related to the first record within the FlowFile added to the FlowFile as \\\"elasticsearch.bulk.error\\\". If \\\"Treat \\\"Not Found\\\" as Success\\\" is \\\"false\\\" then records associated with \\\"not_found\\\" Elasticsearch document responses will also be send to the \\\"errors\\\" relationship.\",\n+                                \"displayName\": \"Group Results by Bulk Error Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n+                                \"name\": \"put-es-record-bulk-error-groups\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-dynamic-templates-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the dynamic_templates for the document. Field must be Map-type compatible (e.g. a Map or Record) or a String parsable into a JSON Object. Requires Elasticsearch 7+\",\n+                                \"displayName\": \"Dynamic Templates Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-dynamic-templates-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-error-writer\": {\n+                                \"description\": \"The response from Elasticsearch will be examined for failed records and the failed records will be written to a record set with this record writer service and sent to the \\\"errors\\\" relationship. Successful records will be written to a record set with this record writer service and sent to the \\\"successful\\\" relationship.\",\n+                                \"displayName\": \"Result Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-record-error-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"airtable\",\n-                            \"database\",\n-                            \"query\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.airtable.QueryAirtableTable\",\n-                        \"typeDescription\": \"Query records from an Airtable table. Records are incrementally retrieved based on the last modified time of the records. Records can also be further filtered by setting the 'Custom Filter' property which supports the formulas provided by the Airtable API. This processor is intended to be run on the Primary Node only.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n-                                \"name\": \"fragment.count\"\n                             },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-language-translation-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-language-translation-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"User-defined properties are used to translate arbitrary text based on attributes.\",\n+                            \"put-es-record-id-path\": {\n+                                \"description\": \"A record path expression to retrieve the ID field for use with Elasticsearch. If left blank the ID will be automatically generated by Elasticsearch.\",\n+                                \"displayName\": \"ID Record Path\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of an attribute to set that will contain the translated text of the value\",\n-                                \"value\": \"The value to translate\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data to be translated\",\n-                                \"displayName\": \"Character Set\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-id-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-index-op\": {\n+                                \"defaultValue\": \"index\",\n+                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n+                                \"displayName\": \"Index Operation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Language\": {\n-                                \"description\": \"The language of incoming data. If no language is set, Yandex will attempt to detect the incoming language automatically.\",\n-                                \"displayName\": \"Input Language\",\n+                            \"put-es-record-index-op-path\": {\n+                                \"description\": \"A record path expression to retrieve the Index Operation field for use with Elasticsearch. If left blank the Index Operation will be determined using the main Index Operation property.\",\n+                                \"displayName\": \"Index Operation Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Input Language\",\n+                                \"name\": \"put-es-record-index-op-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Target Language\": {\n-                                \"defaultValue\": \"en\",\n-                                \"description\": \"The language to translate the text into\",\n-                                \"displayName\": \"Target Language\",\n+                            \"put-es-record-index-record-path\": {\n+                                \"description\": \"A record path expression to retrieve the index field for use with Elasticsearch. If left blank the index will be determined using the main index property.\",\n+                                \"displayName\": \"Index Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Target Language\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-index-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Content\": {\n+                            \"put-es-record-log-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the content should be translated. If false, only the text specified by user-defined properties will be translated.\",\n-                                \"displayName\": \"Translate Content\",\n+                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n+                                \"displayName\": \"Log Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Translate Content\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Yandex API Key\": {\n-                                \"description\": \"The API Key that is registered with Yandex\",\n-                                \"displayName\": \"Yandex API Key\",\n+                            \"put-es-record-reader\": {\n+                                \"description\": \"The record reader to use for reading incoming records from flowfiles.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Yandex API Key\",\n+                                \"name\": \"put-es-record-reader\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"put-es-record-retain-at-timestamp-field\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n+                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n+                                \"displayName\": \"Retain @timestamp (Record Path)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-at-timestamp-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-retain-id-field\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"ID Record Path\",\n+                                        \"propertyName\": \"put-es-record-id-path\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the existing field used as the ID Record Path.\",\n+                                \"displayName\": \"Retain ID (Record Path)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-id-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-script-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the script for the document update/upsert. Only applies to Update/Upsert operations. Field must be Map-type compatible (e.g. a Map or a Record) or a String parsable into a JSON Object\",\n+                                \"displayName\": \"Script Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-script-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-scripted-upsert-path\": {\n+                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the scripted_upsert boolean flag. Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n+                                \"displayName\": \"Scripted Upsert Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-scripted-upsert-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-record-type-record-path\": {\n+                                \"description\": \"A record path expression to retrieve the type field for use with Elasticsearch. If left blank the type will be determined using the main type property.\",\n+                                \"displayName\": \"Type Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-type-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"This relationship is used if the translation cannot be performed for some reason other than communications failure\",\n-                                \"name\": \"translation.failure\"\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"This relationship is used when the translation is successful\",\n-                                \"name\": \"success\"\n+                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"This relationship is used when the translation fails due to a problem such as a network failure, and for which the translation should be attempted again\",\n-                                \"name\": \"comms.failure\"\n+                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n+                            },\n+                            {\n+                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"successful\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The Batch of Records will be stored in memory until the bulk operation is performed.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"language\",\n-                            \"translate\",\n-                            \"translation\",\n-                            \"yandex\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.yandex.YandexTranslate\",\n-                        \"typeDescription\": \"Translates content and attributes from one language to another\",\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\",\n+                        \"typeDescription\": \"A record-aware Elasticsearch put processor that uses the official Elastic REST client libraries. Each Record within the FlowFile is converted into a document to be sent to the Elasticsearch _bulk APi. Multiple documents can be batched into each Request sent to Elasticsearch. Each document's Bulk operation can be configured using Record Path expressions.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If the text cannot be translated, this attribute will be set indicating the reason for the failure\",\n-                                \"name\": \"yandex.translate.failure.reason\"\n+                                \"description\": \"The error message if there is an issue parsing the FlowFile records, sending the parsed documents to Elasticsearch or parsing the Elasticsearch response.\",\n+                                \"name\": \"elasticsearch.put.error\"\n                             },\n                             {\n-                                \"description\": \"When the translation succeeds, if the content was translated, this attribute will be set indicating the new language of the content\",\n-                                \"name\": \"language\"\n+                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.error.count\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.success.count\"\n+                            },\n+                            {\n+                                \"description\": \"The _bulk response if there was an error during processing the record within Elasticsearch.\",\n+                                \"name\": \"elasticsearch.bulk.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-opentelemetry-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-opentelemetry-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"25 ms\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Address\": {\n-                                \"defaultValue\": \"0.0.0.0\",\n-                                \"description\": \"Internet Protocol Address on which to listen for OTLP Export Service Requests. The default value enables listening on all addresses.\",\n-                                \"displayName\": \"Address\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Address\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Maximum number of OTLP request resource elements included in each FlowFile produced\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Authentication\": {\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WANT\",\n-                                \"description\": \"Client authentication policy for TLS communication with HTTPS\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Aggregation output.\",\n+                                \"displayName\": \"Aggregation Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Authentication\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4317\",\n-                                \"description\": \"TCP port number on which to listen for OTLP Export Service Requests over HTTP and gRPC\",\n-                                \"displayName\": \"Port\",\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FULL\",\n+                                \"description\": \"Format of Hits output.\",\n+                                \"displayName\": \"Search Results Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue Capacity\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Maximum number of OTLP request resource elements that can be received and queued\",\n-                                \"displayName\": \"Queue Capacity\",\n+                            \"el-rest-output-no-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Queue Capacity\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service enables TLS communication for HTTPS\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"el-rest-pagination-keep-alive\": {\n+                                \"defaultValue\": \"10 mins\",\n+                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n+                                \"displayName\": \"Pagination Keep Alive\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Worker Threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of threads responsible for decoding and queuing incoming OTLP Export Service Requests\",\n-                                \"displayName\": \"Worker Threads\",\n+                            \"el-rest-pagination-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n+                                        \"displayName\": \"SCROLL\",\n+                                        \"value\": \"pagination-scroll\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"pagination-scroll\",\n+                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n+                                \"displayName\": \"Pagination Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Worker Threads\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Export Service Requests containing OTLP Telemetry\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"OTLP\",\n-                            \"OTel\",\n-                            \"OpenTelemetry\",\n-                            \"logs\",\n-                            \"metrics\",\n-                            \"telemetry\",\n-                            \"traces\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.opentelemetry.ListenOTLP\",\n-                        \"typeDescription\": \"Collect OpenTelemetry messages over HTTP or gRPC. Supports standard Export Service Request messages for logs, metrics, and traces. Implements OpenTelemetry OTLP Specification 1.0.0 with OTLP/gRPC and OTLP/HTTP. Provides protocol detection using the HTTP Content-Type header.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Content-Type set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"OpenTelemetry Resource Type: LOGS, METRICS, or TRACES\",\n-                                \"name\": \"resource.type\"\n-                            },\n-                            {\n-                                \"description\": \"Count of resource elements included in messages\",\n-                                \"name\": \"resource.count\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"authentication-charset\": {\n-                                \"defaultValue\": \"US-ASCII\",\n-                                \"description\": \"The charset for Basic Authentication header base64 string.\",\n-                                \"displayName\": \"Authentication Header Charset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"authentication-charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"connection-attempt-timeout\": {\n-                                \"defaultValue\": \"3\",\n-                                \"description\": \"The number of times to try and establish a connection.\",\n-                                \"displayName\": \"Connection Attempt Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection-attempt-timeout\",\n+                                \"name\": \"el-rest-pagination-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"connection-timeout\": {\n-                                \"defaultValue\": \"3 sec\",\n-                                \"description\": \"The timeout to connect the WebSocket URI.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection-timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-authorization\": {\n-                                \"description\": \"Configures a custom HTTP Authorization Header as described in RFC 7235 Section 4.2. Setting a custom Authorization Header excludes configuring the User Name and User Password properties for Basic Authentication.\",\n-                                \"displayName\": \"Custom Authorization\",\n+                            \"el-rest-query-clause\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-authorization\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"input-buffer-size\": {\n-                                \"defaultValue\": \"4 kb\",\n-                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n-                                \"displayName\": \"Input Buffer Size\",\n+                            \"el-rest-query-definition-style\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-binary-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n-                                \"displayName\": \"Max Binary Message Size\",\n+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-text-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n-                                \"displayName\": \"Max Text Message Size\",\n+                            \"el-rest-split-up-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n+                                        \"displayName\": \"PER_QUERY\",\n+                                        \"value\": \"splitUp-query\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n+                                \"displayName\": \"Search Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-text-message-size\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-host\": {\n-                                \"description\": \"The host name of the HTTP Proxy.\",\n-                                \"displayName\": \"HTTP Proxy Host\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-port\": {\n-                                \"description\": \"The port number of the HTTP Proxy.\",\n-                                \"displayName\": \"HTTP Proxy Port\",\n+                            \"es-rest-query-aggs\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n+                                \"displayName\": \"Aggregations\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-aggs\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"session-maintenance-interval\": {\n-                                \"defaultValue\": \"10 sec\",\n-                                \"description\": \"The interval between session maintenance activities. A WebSocket session established with a WebSocket server can be terminated due to different reasons including restarting the WebSocket server or timing out inactive sessions. This session maintenance activity is periodically executed in order to reconnect those lost sessions, so that a WebSocket client can reuse the same session id transparently after it reconnects successfully.  The maintenance activity is executed until corresponding processors or this controller service is stopped.\",\n-                                \"displayName\": \"Session Maintenance Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"session-maintenance-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"es-rest-query-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"user-name\": {\n-                                \"description\": \"The user name for Basic Authentication.\",\n-                                \"displayName\": \"User Name\",\n+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-script-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-password\": {\n-                                \"description\": \"The user password for Basic Authentication.\",\n-                                \"displayName\": \"User Password\",\n+                            \"es-rest-query-sort\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"websocket-uri\": {\n-                                \"description\": \"The WebSocket URI this client connects to.\",\n-                                \"displayName\": \"WebSocket URI\",\n+                            \"es-rest-size\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n+                                \"displayName\": \"Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-uri\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"client\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"scroll\",\n+                            \"search\"\n                         ],\n-                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketClient\",\n-                        \"typeDescription\": \"Implementation of WebSocketClientService. This service uses Jetty WebSocket client module to provide WebSocket session management throughout the application.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\",\n+                        \"typeDescription\": \"A processor that allows the user to repeatedly run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. Search After/Point in Time queries must include a valid \\\"sort\\\" field. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the query will restart with the first page of results being retrieved.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"auth-path-spec\": {\n-                                \"defaultValue\": \"/*\",\n-                                \"description\": \"Specify a Path Spec to apply Basic Authentication.\",\n-                                \"displayName\": \"Basic Authentication Path Spec\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"auth-path-spec\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"auth-roles\": {\n-                                \"defaultValue\": \"**\",\n-                                \"description\": \"The authenticated user must have one of specified role. Multiple roles can be set as comma separated string. '*' represents any role and so does '**' any role including no role.\",\n-                                \"displayName\": \"Basic Authentication Roles\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"auth-roles\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"basic-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If enabled, client connection requests are authenticated with Basic authentication using the specified Login Provider.\",\n-                                \"displayName\": \"Enable Basic Authentication\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"no\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"want\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"need\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no\",\n-                                \"description\": \"Specifies whether or not the Processor should authenticate client by its certificate. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"SSL Client Authentication\",\n+                            \"el-query-attribute\": {\n+                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n+                                \"displayName\": \"Query Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"input-buffer-size\": {\n-                                \"defaultValue\": \"4 kb\",\n-                                \"description\": \"The size of the input (read from network layer) buffer size.\",\n-                                \"displayName\": \"Input Buffer Size\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"listen-port\": {\n-                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n-                                \"displayName\": \"Listen Port\",\n+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"listen-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"login-service\": {\n-                                \"allowableValues\": [\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"See http://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/security/HashLoginService.html for detail.\",\n-                                        \"displayName\": \"HashLoginService\",\n-                                        \"value\": \"hash\"\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"hash\",\n-                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n-                                \"displayName\": \"Login Service\",\n+                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"login-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-binary-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n-                                \"displayName\": \"Max Binary Message Size\",\n+                            \"el-rest-query-clause\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n+                                \"displayName\": \"Query Clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-text-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a text message during parsing/generating.\",\n-                                \"displayName\": \"Max Text Message Size\",\n+                            \"el-rest-query-definition-style\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-text-message-size\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only WSS requests; otherwise, the server will accept only WS requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"el-rest-script\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"script\\\" to execute during the operation, in JSON syntax. Ex: {\\\"source\\\": \\\"ctx._source.count++\\\", \\\"lang\\\": \\\"painless\\\"}\",\n+                                \"displayName\": \"Script\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-script\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"users-properties-file\": {\n-                                \"description\": \"Specify a property file containing users for Basic Authentication using HashLoginService. See http://www.eclipse.org/jetty/documentation/current/configuring-security.html for detail.\",\n-                                \"displayName\": \"Users Properties File\",\n+                            \"el-rest-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"users-properties-file\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"server\"\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\",\n+                            \"update\"\n                         ],\n-                        \"type\": \"org.apache.nifi.websocket.jetty.JettyWebSocketServer\",\n-                        \"typeDescription\": \"Implementation of WebSocketServerService. This service uses Jetty WebSocket server module to provide WebSocket session management throughout the application.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.elasticsearch.UpdateByQueryElasticsearch\",\n+                        \"typeDescription\": \"Update documents in an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter. The loaded Query can contain any JSON accepted by Elasticsearch's _update_by_query API, for example a \\\"query\\\" object to identify what documents are to be updated, plus a \\\"script\\\" to define the updates to perform.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The amount of time that it took to complete the update operation in ms.\",\n+                                \"name\": \"elasticsearch.update.took\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error running the update.\",\n+                                \"name\": \"elasticsearch.update.error\"\n+                            }\n+                        ]\n                     }\n                 ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n             \"artifact\": \"nifi-enrich-nar\",\n@@ -48143,397 +52399,757 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-registry-nar\",\n+            \"artifact\": \"nifi-protobuf-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-protobuf-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a named schema using the JSON string representation of an Avro schema\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Schema name\",\n-                                \"value\": \"Schema Content\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"avro-reg-validated-field-names\": {\n+                            \"Message Type\": {\n+                                \"description\": \"Fully qualified name of the Protocol Buffers message type including its package (eg. mypackage.MyMessage). The .proto files configured in 'Proto Directory' must contain the definition of this message type.\",\n+                                \"displayName\": \"Message Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proto Directory\": {\n+                                \"description\": \"Directory containing Protocol Buffers message definition (.proto) file(s).\",\n+                                \"displayName\": \"Proto Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proto Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The record schema is generated from the provided proto file\",\n+                                        \"displayName\": \"Generate from Proto file\",\n+                                        \"value\": \"generate-from-proto-file\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate the field names in the Avro schema based on Avro naming rules. If set to true, all field names must be valid Avro names, which must begin with [A-Za-z_], and subsequently contain only [A-Za-z0-9_]. If set to false, no validation will be performed on the field names.\",\n-                                \"displayName\": \"Validate Field Names\",\n+                                \"defaultValue\": \"generate-from-proto-file\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"avro-reg-validated-field-names\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.schemaregistry.services.AvroSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a service for registering and accessing schemas. You can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of Avro's Schema format.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds a named schema using the JSON string representation of a JSON schema\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Schema Name\",\n-                                \"value\": \"Schema Content\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"JSON Schema Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Draft Version 4\",\n-                                        \"displayName\": \"Draft 4\",\n-                                        \"value\": \"DRAFT_4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Draft Version 6\",\n-                                        \"displayName\": \"Draft 6\",\n-                                        \"value\": \"DRAFT_6\"\n-                                    },\n+                            },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 7\",\n-                                        \"displayName\": \"Draft 7\",\n-                                        \"value\": \"DRAFT_7\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 2019-09\",\n-                                        \"displayName\": \"Draft 2019-09\",\n-                                        \"value\": \"DRAFT_2019_09\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 2020-12\",\n-                                        \"displayName\": \"Draft 2020-12\",\n-                                        \"value\": \"DRAFT_2020_12\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DRAFT_2020_12\",\n-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"JSON Schema Version\",\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Version\",\n+                                \"name\": \"schema-reference-reader\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"registry\",\n-                            \"schema\"\n+                            \"parser\",\n+                            \"protobuf\",\n+                            \"reader\",\n+                            \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.schemaregistry.services.StandardJsonSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a service for registering and accessing JSON schemas. One can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of the JSON Schema format. Empty schemas and schemas only consisting of whitespace are not acceptable schemas.The registry is heterogeneous registry as it can store schemas of different schema draft versions. By default the registry is configured to store schemas of Draft 2020-12. When a schema is added, the version which is currently is set, is what the schema is saved as.\",\n+                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n+                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-zendesk-nar\",\n+            \"artifact\": \"nifi-server-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cipher-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"20 sec\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"cipher-algorithm-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Cipher Blocking Chaining Mode\",\n+                                        \"displayName\": \"CBC\",\n+                                        \"value\": \"CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Counter Mode\",\n+                                        \"displayName\": \"CTR\",\n+                                        \"value\": \"CTR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n+                                        \"displayName\": \"GCM\",\n+                                        \"value\": \"GCM\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GCM\",\n+                                \"description\": \"Block cipher mode of operation for decryption using the Advanced Encryption Standard\",\n+                                \"displayName\": \"Cipher Algorithm Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n+                                \"name\": \"cipher-algorithm-mode\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"cipher-algorithm-padding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"NoPadding\",\n+                                        \"displayName\": \"NoPadding\",\n+                                        \"value\": \"NoPadding\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"PKCS5Padding\",\n+                                        \"displayName\": \"PKCS5Padding\",\n+                                        \"value\": \"PKCS5Padding\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"NoPadding\",\n+                                \"description\": \"Padding specification used in cipher operation for decryption using the Advanced Encryption Standard\",\n+                                \"displayName\": \"Cipher Algorithm Padding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"cipher-algorithm-padding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-value-name\": {\n-                                \"description\": \"Password or authentication token for Zendesk login user.\",\n-                                \"displayName\": \"Authentication Credential\",\n+                            \"key-specification\": {\n+                                \"description\": \"Specification providing the raw secret key or a password from which to derive a secret key\",\n+                                \"displayName\": \"Key Specification\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-specification\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"zendesk-export-method\": {\n+                            \"key-specification-format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In cursor-based incremental exports, each page of results includes an \\\"after\\\" cursor pointer to use as the starting cursor for the next page of results.\",\n-                                        \"displayName\": \"Cursor Based\",\n-                                        \"value\": \"cursor\"\n+                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n-                                        \"description\": \"In time-based incremental exports, each page of results includes an end time to use as the start time for the next page of results.\",\n-                                        \"displayName\": \"Time Based\",\n-                                        \"value\": \"time\"\n+                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n+                                        \"displayName\": \"PASSWORD\",\n+                                        \"value\": \"PASSWORD\"\n                                     }\n                                 ],\n-                                \"description\": \"Method for incremental export.\",\n-                                \"displayName\": \"Export Method\",\n+                                \"defaultValue\": \"PASSWORD\",\n+                                \"description\": \"Format describing the configured Key Specification\",\n+                                \"displayName\": \"Key Specification Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-export-method\",\n+                                \"name\": \"key-specification-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"zendesk-query-start-timestamp\": {\n-                                \"description\": \"Initial timestamp to query Zendesk API from in Unix timestamp seconds format.\",\n-                                \"displayName\": \"Query Start Timestamp\",\n+                            {\n+                                \"description\": \"Decryption succeeded\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"AES\",\n+                            \"Argon2\",\n+                            \"PBKDF2\",\n+                            \"bcrypt\",\n+                            \"cryptography\",\n+                            \"decipher\",\n+                            \"decrypt\",\n+                            \"scrypt\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContent\",\n+                        \"typeDescription\": \"Decrypt content encrypted with AES and encoded according conventions added in NiFi 0.5.0 for the EncryptContent Processor. The Processor reads the first 256 bytes to determine the presence of a cryptographic salt based on finding the 'NiFiSALT' delimiter. The salt is not present for content encrypted with a raw hexadecimal key. The Processor determines the presence of the initialization vector based on finding the 'NiFiIV' delimiter.The salt format indicates the Key Derivation Function that the Processor uses to generate a secret key based on a configured password. The Processor derives keys with a size of 128 bits according to the conventions implemented in NiFi 0.5.0.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Private Key Identities\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Private Key Source\",\n+                                        \"propertyName\": \"Private Key Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n+                                \"displayName\": \"Private Key Identities\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Private Key Identities\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Identity Resources\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RESOURCES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Private Key Source\",\n+                                        \"propertyName\": \"Private Key Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more files or URLs containing X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n+                                \"displayName\": \"Private Key Identity Resources\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Private Key Identity Resources\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-resource\": {\n+                            \"Private Key Source\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n-                                        \"displayName\": \"Tickets\",\n-                                        \"value\": \"/api/v2/incremental/tickets\"\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n                                     },\n                                     {\n-                                        \"description\": \"Stream of changes that occurred on tickets. Each event is tied to an update on a ticket and contains all the fields that were updated in that change.\",\n-                                        \"displayName\": \"Ticket Events\",\n-                                        \"value\": \"/api/v2/incremental/ticket_events\"\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PROPERTIES\",\n+                                \"description\": \"Source of information determines the loading strategy for X25519 Private Key Identities\",\n+                                \"displayName\": \"Private Key Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Private Key Source\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption Failed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Decryption Completed\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ChaCha20-Poly1305\",\n+                            \"X25519\",\n+                            \"age\",\n+                            \"age-encryption.org\",\n+                            \"encryption\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentAge\",\n+                        \"typeDescription\": \"Decrypt content using the age-encryption.org/v1 specification. Detects binary or ASCII armored content encoding using the initial file header bytes. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"encryption-scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n                                     },\n                                     {\n-                                        \"description\": \"Ticket metric events API can be used to track reply times, agent work times, and requester wait times.\",\n-                                        \"displayName\": \"Ticket Metric Events\",\n-                                        \"value\": \"/api/v2/incremental/ticket_metric_events\"\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHMD5AND192BITAES-CBC-OPENSSL\"\n                                     },\n                                     {\n-                                        \"description\": \"Zendesk Support has three types of users: end users (customers), agents, and administrators.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"/api/v2/incremental/users\"\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n                                     },\n                                     {\n-                                        \"description\": \"Just as agents can be segmented into groups in Zendesk Support, customers (end-users) can be segmented into organizations.\",\n-                                        \"displayName\": \"Organizations\",\n-                                        \"value\": \"/api/v2/incremental/organizations\"\n+                                        \"description\": \"PKCS5 Scheme 1 with MD5 digest and Data Encryption Standard 64 bit keys. OID 1.2.840.113549.1.5.3\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_DES\",\n+                                        \"value\": \"PBEWITHMD5ANDDES\"\n                                     },\n                                     {\n-                                        \"description\": \"Articles are content items such as help topics or tech notes contained in sections.\",\n-                                        \"displayName\": \"Articles\",\n-                                        \"value\": \"/api/v2/help_center/incremental/articles\"\n+                                        \"description\": \"PKCS Scheme 1 with MD5 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.6\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_RC2\",\n+                                        \"value\": \"PBEWITHMD5ANDRC2\"\n                                     },\n                                     {\n-                                        \"description\": \"When a recipient responds to an NPS survey, their rating, comment, and last survey date are captured.\",\n-                                        \"displayName\": \"NPS - Responses\",\n-                                        \"value\": \"/api/v2/nps/incremental/responses\"\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITAES-CBC-BC\"\n                                     },\n                                     {\n-                                        \"description\": \"Every NPS survey is delivered to one or multiple recipients. For most businesses that use Zendesk Support, the recipients are customers. Agents and admins will never receive surveys.\",\n-                                        \"displayName\": \"NPS - Recipients\",\n-                                        \"value\": \"/api/v2/nps/incremental/recipients\"\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHSHAAND192BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHSHAAND256BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Data Encryption Standard. OID 1.2.840.113549.1.5.10\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DES\",\n+                                        \"value\": \"PBEWITHSHA1ANDDES\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 128 bit keys. OID 1.2.840.113549.1.12.1.4\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_128\",\n+                                        \"value\": \"PBEWITHSHAAND2-KEYTRIPLEDES-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 192 bit keys. OID 1.2.840.113549.1.12.1.3\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_192\",\n+                                        \"value\": \"PBEWITHSHAAND3-KEYTRIPLEDES-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.11\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2\",\n+                                        \"value\": \"PBEWITHSHA1ANDRC2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 128 bit keys. OID 1.2.840.113549.1.12.1.5\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITRC2-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 40 bit keys. OID 1.2.840.113549.1.12.1.6\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_40\",\n+                                        \"value\": \"PBEWITHSHAAND40BITRC2-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 128 bit keys. OID 1.2.840.113549.1.12.1.1\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_128\",\n+                                        \"value\": \"PBEWITHSHAAND128BITRC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 40 bit keys. OID 1.2.840.113549.1.12.1.2\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_40\",\n+                                        \"value\": \"PBEWITHSHAAND40BITRC4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-1 digest and Twofish in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA1_AND_TWOFISH\",\n+                                        \"value\": \"PBEWITHSHAANDTWOFISH-CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHSHA256AND128BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_192\",\n+                                        \"value\": \"PBEWITHSHA256AND192BITAES-CBC-BC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_256\",\n+                                        \"value\": \"PBEWITHSHA256AND256BITAES-CBC-BC\"\n                                     }\n                                 ],\n-                                \"description\": \"The particular Zendesk resource which is meant to be exported.\",\n-                                \"displayName\": \"Resource\",\n+                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n+                                \"displayName\": \"Encryption Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-resource\",\n+                                \"name\": \"encryption-scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Subdomain Name\",\n+                            \"key-derivation-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"OpenSSL Envelope BytesToKey using a digest algorithm with one iteration and optional salt of eight bytes\",\n+                                        \"displayName\": \"OPENSSL_EVP_BYTES_TO_KEY\",\n+                                        \"value\": \"OPENSSL_EVP_BYTES_TO_KEY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n+                                        \"displayName\": \"JASYPT_STANDARD\",\n+                                        \"value\": \"JASYPT_STANDARD\"\n+                                    }\n+                                ],\n+                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n+                                \"displayName\": \"Key Derivation Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-derivation-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\n+                            \"password\": {\n+                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Paging cursor for Zendesk API is stored. Cursor is updated after each successful request.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Decryption succeeded\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"zendesk\"\n+                            \"Jasypt\",\n+                            \"OpenSSL\",\n+                            \"PBES1\",\n+                            \"PKCS5\",\n+                            \"cryptography\",\n+                            \"decipher\",\n+                            \"decrypt\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.zendesk.GetZendesk\",\n-                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n+                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records fetched by the processor.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Password-Based Encryption Scheme\",\n+                                \"name\": \"pbe.scheme\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Block Cipher\",\n+                                \"name\": \"pbe.symmetric.cipher\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n+                                \"name\": \"pbe.digest.algorithm\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -48541,235 +53157,157 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Additional property to be added to the Zendesk request object.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The path in the request object to add. The value needs be a valid JsonPointer.\",\n-                                \"value\": \"The path in the incoming record to get the value from.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"File Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"Binary encoding\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"ASCII Armor encoding\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"Output encoding for encrypted files. Binary encoding provides optimal processing performance.\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"File Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-value-name\": {\n-                                \"description\": \"Password or authentication token for Zendesk login user.\",\n-                                \"displayName\": \"Authentication Credential\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"zendesk-comment-body\": {\n+                            \"Public Key Recipient Resources\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"dependentValues\": [\n+                                            \"RESOURCES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Public Key Source\",\n+                                        \"propertyName\": \"Public Key Source\"\n                                     }\n                                 ],\n-                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n-                                \"displayName\": \"Comment Body\",\n+                                \"description\": \"One or more files or URLs containing X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n+                                \"displayName\": \"Public Key Recipient Resources\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-comment-body\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Public Key Recipient Resources\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-priority\": {\n+                            \"Public Key Recipients\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"dependentValues\": [\n+                                            \"PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Public Key Source\",\n+                                        \"propertyName\": \"Public Key Source\"\n                                     }\n                                 ],\n-                                \"description\": \"The content or the path to the priority in the incoming record.\",\n-                                \"displayName\": \"Priority\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-priority\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                                \"description\": \"One or more X25519 Public Key Recipients, separated with newlines, encoded according to the age specification, starting with age1\",\n+                                \"displayName\": \"Public Key Recipients\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Subdomain Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"name\": \"Public Key Recipients\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": true\n                             },\n-                            \"zendesk-subject\": {\n-                                \"dependencies\": [\n+                            \"Public Key Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The content or the path to the subject in the incoming record.\",\n-                                \"displayName\": \"Subject\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subject\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-type\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\n                                     }\n                                 ],\n-                                \"description\": \"The content or the path to the type in the incoming record.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\n+                                \"defaultValue\": \"PROPERTIES\",\n+                                \"description\": \"Source of information determines the loading strategy for X25519 Public Key Recipients\",\n+                                \"displayName\": \"Public Key Source\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Public Key Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cipher.DecryptContentAge\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the operation failed and retrying the operation will also fail, such as an invalid data or schema.\",\n+                                \"description\": \"Encryption Failed\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"description\": \"Encryption Completed\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"zendesk, ticket\"\n+                            \"ChaCha20-Poly1305\",\n+                            \"X25519\",\n+                            \"age\",\n+                            \"age-encryption.org\",\n+                            \"encryption\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.zendesk.PutZendeskTicket\",\n-                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.\",\n+                        \"type\": \"org.apache.nifi.processors.cipher.EncryptContentAge\",\n+                        \"typeDescription\": \"Encrypt content using the age-encryption.org/v1 specification. Supports binary or ASCII armored content encoding using configurable properties. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records processed.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The error code of from the response.\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message of from the response.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-workday-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-workday-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -48778,157 +53316,261 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Web Client Service Provider\": {\n-                                \"description\": \"Web client which is used to communicate with the Workday API.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"mac-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA256\",\n+                                        \"value\": \"HmacSHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA512\",\n+                                        \"value\": \"HmacSHA512\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hashed Message Authentication Code Function\",\n+                                \"displayName\": \"Message Authentication Code Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Web Client Service Provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Workday Password\": {\n-                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Workday Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Password\",\n+                                \"name\": \"mac-algorithm\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Workday Report URL\": {\n-                                \"description\": \"HTTP remote URL of Workday report including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n-                                \"displayName\": \"Workday Report URL\",\n+                            \"message-authentication-code\": {\n+                                \"description\": \"The MAC to compare with the calculated value\",\n+                                \"displayName\": \"Message Authentication Code\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Report URL\",\n+                                \"name\": \"message-authentication-code\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Workday Username\": {\n-                                \"description\": \"The username provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Workday Username\",\n+                            \"message-authentication-code-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Message Authentication Code\",\n+                                \"displayName\": \"Message Authentication Code Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-authentication-code-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"secret-key\": {\n+                                \"description\": \"Secret key to calculate the hash\",\n+                                \"displayName\": \"Secret Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"secret-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n+                            \"secret-key-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF8\",\n+                                        \"value\": \"UTF8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"defaultValue\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Secret Key\",\n+                                \"displayName\": \"Secret Key Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"secret-key-encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"description\": \"Signature Verification Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"description\": \"Signature Verification Failed\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Workday\",\n-                            \"report\"\n+                            \"Authentication\",\n+                            \"HMAC\",\n+                            \"MAC\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.workday.GetWorkdayReport\",\n-                        \"typeDescription\": \"A processor which can interact with a configurable Workday Report. The processor can forward the content without modification, or you can transform it by providing the specific Record Reader and Record Writer services based on your needs. You can also remove fields by defining schema in the Record Writer. Supported Workday report formats are: csv, simplexml, json\",\n+                        \"type\": \"org.apache.nifi.processors.cipher.VerifyContentMAC\",\n+                        \"typeDescription\": \"Calculates a Message Authentication Code using the provided Secret Key and compares it with the provided MAC property\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.class\"\n+                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n+                                \"name\": \"mac.calculated\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.message\"\n+                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n+                                \"name\": \"mac.encoding\"\n                             },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Source / Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n+                                \"name\": \"mac.algorithm\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-apicurio-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-apicurio-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Cache Expiration\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n+                                \"displayName\": \"Cache Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cache Size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry. The cache size must be a non-negative integer. When it is set to 0, the cache is effectively disabled.\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cache Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Schema Group ID\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The artifact Group ID for the schemas\",\n+                                \"displayName\": \"Schema Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Schema Group ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Schema Registry URL\": {\n+                                \"description\": \"The URL of the Schema Registry e.g. http://localhost:8080\",\n+                                \"displayName\": \"Schema Registry URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Registry URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"Web Client Service Provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Web Client Service Provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship when Record Reader and Writer is set.\",\n-                                \"name\": \"record.count\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"apicurio\",\n+                            \"avro\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.apicurio.schemaregistry.ApicurioSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Apicurio Schema Registry so that those Schemas that are stored in the Apicurio Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Apicurio Schema Registry with their artifact identifiers.\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n             \"artifact\": \"nifi-amqp-nar\",\n@@ -49613,35 +54255,23 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jslt-nar\",\n+            \"artifact\": \"nifi-mqtt-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jslt-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -49650,588 +54280,470 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"jslt-transform-cache-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a JSLT Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"Broker URI\": {\n+                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n+                                \"displayName\": \"Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Broker URI\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client ID\": {\n+                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n+                                \"displayName\": \"Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout (seconds)\": {\n+                                \"defaultValue\": \"30\",\n+                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n+                                \"displayName\": \"Connection Timeout (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-cache-size\",\n-                                \"required\": true,\n+                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-pretty_print\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                            \"Group ID\": {\n+                                \"description\": \"MQTT consumer group ID to use. If group ID not set, client will connect as individual consumer.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-pretty_print\",\n-                                \"required\": true,\n+                                \"name\": \"Group ID\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-result-filter\": {\n-                                \"defaultValue\": \". != null and . != {} and . != []\",\n-                                \"description\": \"A filter for output JSON results using a JSLT expression. This property supports changing the default filter, which removes JSON objects with null values, empty objects and empty arrays from the output JSON. This JSLT must return true for each JSON object to be included and false for each object to be removed. Using a filter value of \\\"true\\\" to disables filtering.\",\n-                                \"displayName\": \"Transform Result Filter\",\n+                            \"Keep Alive Interval (seconds)\": {\n+                                \"defaultValue\": \"60\",\n+                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n+                                \"displayName\": \"Keep Alive Interval (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-result-filter\",\n-                                \"required\": true,\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-transformation\": {\n-                                \"description\": \"JSLT Transformation for transform of JSON data. Any NiFi Expression Language present will be evaluated first to get the final transform to be applied. The JSLT Tutorial provides an overview of supported expressions: https://github.com/schibsted/jslt/blob/master/tutorial.md\",\n-                                \"displayName\": \"JSLT Transformation\",\n+                            \"Last Will Message\": {\n+                                \"description\": \"The message to send as the client's Last Will.\",\n+                                \"displayName\": \"Last Will Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"jslt-transform-transformation\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Message\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-transformation-strategy\": {\n+                            \"Last Will QoS Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n-                                        \"displayName\": \"Entire FlowFile\",\n-                                        \"value\": \"ENTIRE_FLOWFILE\"\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"Apply transformation each JSON Object in an array\",\n-                                        \"displayName\": \"Each JSON Object\",\n-                                        \"value\": \"EACH_OBJECT\"\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"EACH_OBJECT\",\n-                                \"description\": \"Whether to apply the JSLT transformation to the entire FlowFile contents or each JSON object in the root-level array\",\n-                                \"displayName\": \"Transformation Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-transformation-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"jslt\",\n-                            \"json\",\n-                            \"transform\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.jslt.JSLTTransformJSON\",\n-                        \"typeDescription\": \"Applies a JSLT transformation to the FlowFile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSLT transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-snmp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n+                                \"displayName\": \"Last Will QoS Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Last Will QoS Level\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Last Will Retain\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n+                                \"description\": \"Whether to retain the client's Last Will.\",\n+                                \"displayName\": \"Last Will Retain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n+                                \"name\": \"Last Will Retain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n+                            \"Last Will Topic\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-oid\": {\n-                                \"description\": \"Each OID (object identifier) identifies a variable that can be read or set via SNMP. This value is not taken into account for an input flowfile and will be omitted. Can be set to emptystring when the OIDs are provided through flowfile.\",\n-                                \"displayName\": \"OID\",\n+                                \"description\": \"The topic to send the client's Last Will to.\",\n+                                \"displayName\": \"Last Will Topic\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-oid\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-port\",\n+                                \"name\": \"Last Will Topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"MQTT Specification Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n+                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n+                                        \"displayName\": \"v3 AUTO\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"MQTT Specification Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n+                                \"name\": \"MQTT Specification Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n+                            \"Max Queue Size\": {\n+                                \"description\": \"The MQTT messages are always being sent to subscribers on a topic regardless of how frequently the processor is scheduled to run. If the 'Run Schedule' is significantly behind the rate at which the messages are arriving to this processor, then a back up can occur in the internal queue of this processor. This property specifies the maximum number of messages this processor will hold in memory at one time in the internal queue. This data would be lost in case of a NiFi restart.\",\n+                                \"displayName\": \"Max Queue Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"name\": \"Max Queue Size\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"Password\": {\n+                                \"description\": \"Password to use when connecting to the broker\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"snmp-security-level\": {\n+                            \"Quality of Service(QoS)\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The Quality of Service (QoS) to receive the message with. Accepts values '0', '1' or '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'.\",\n+                                \"displayName\": \"Quality of Service (QoS)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"name\": \"Quality of Service(QoS)\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SNMPv3\"\n+                                            \"false\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n                                     }\n                                 ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n+                                \"displayName\": \"Session Expiry Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n-                                \"required\": true,\n+                                \"name\": \"Session Expiry Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-strategy\": {\n+                            \"Session state\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A manager-to-agent request to retrieve the value of a variable. A response with the current value returned.\",\n-                                        \"displayName\": \"GET\",\n-                                        \"value\": \"GET\"\n+                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n+                                        \"displayName\": \"Clean Session\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"A manager-to-agent request to retrieve the value of multiple variables. Snmp WALK also traverses all subnodes under the specified OID.\",\n-                                        \"displayName\": \"WALK\",\n-                                        \"value\": \"WALK\"\n+                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n+                                        \"displayName\": \"Resume Session\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GET\",\n-                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n-                                \"displayName\": \"SNMP Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"Session state\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-strategy\",\n+                                \"name\": \"Session state\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-textual-oid\": {\n-                                \"description\": \"The textual form of the numeric OID to request. This property is user defined, not processed and appended to the outgoing flowfile.\",\n-                                \"displayName\": \"Textual OID\",\n+                            \"Topic Filter\": {\n+                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n+                                \"displayName\": \"Topic Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-textual-oid\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Topic Filter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"add-attributes-as-fields\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"description\": \"If setting this property to true, default fields are going to be added in each record: _topic, _qos, _isDuplicate, _isRetained.\",\n+                                \"displayName\": \"Add attributes as fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"add-attributes-as-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"message-demarcator\": {\n+                                \"description\": \"With this property, you have an option to output FlowFiles which contains multiple messages. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple messages. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each message received will result in a single FlowFile. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing received MQTT Messages into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The MQTT message output\",\n+                                \"name\": \"Message\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The 'Max Queue Size' specifies the maximum number of messages that can be hold in memory by NiFi by a single instance of this processor. A high value for this property could represent a lot of data being stored in memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"get\",\n-                            \"oid\",\n-                            \"snmp\",\n-                            \"walk\"\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.GetSNMP\",\n-                        \"typeDescription\": \"Retrieves information from SNMP Agent with SNMP Get request and outputs a FlowFile with information in attributes and without any content\",\n+                        \"type\": \"org.apache.nifi.processors.mqtt.ConsumeMQTT\",\n+                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n-                                \"name\": \"snmp$<OID>\"\n-                            },\n-                            {\n-                                \"description\": \"Denotes the variable binding in which the error occured.\",\n-                                \"name\": \"snmp$errorIndex\"\n-                            },\n-                            {\n-                                \"description\": \"The snmp4j error status of the PDU.\",\n-                                \"name\": \"snmp$errorStatus\"\n-                            },\n-                            {\n-                                \"description\": \"The description of error status.\",\n-                                \"name\": \"snmp$errorStatusText\"\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n+                                \"description\": \"MQTT broker that was the message source\",\n+                                \"name\": \"mqtt.broker\"\n                             },\n                             {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n+                                \"description\": \"MQTT topic on which message was received\",\n+                                \"name\": \"mqtt.topic\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n+                                \"description\": \"The quality of service for this message.\",\n+                                \"name\": \"mqtt.qos\"\n                             },\n                             {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\n+                                \"description\": \"Whether or not this message might be a duplicate of one which has already been received.\",\n+                                \"name\": \"mqtt.isDuplicate\"\n                             },\n                             {\n-                                \"description\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n-                                \"name\": \"snmp$textualOid\"\n+                                \"description\": \"Whether or not this message was from a current publisher, or was \\\"retained\\\" by the server as the last message published on the topic.\",\n+                                \"name\": \"mqtt.isRetained\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -50240,769 +54752,398 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                            \"Broker URI\": {\n+                                \"description\": \"The URI(s) to use to connect to the MQTT broker (e.g., tcp://localhost:1883). The 'tcp', 'ssl', 'ws' and 'wss' schemes are supported. In order to use 'ssl', the SSL Context Service property must be set. When a comma-separated URI list is set (e.g., tcp://localhost:1883,tcp://localhost:1884), the processor will use a round-robin algorithm to connect to the brokers on connection failure.\",\n+                                \"displayName\": \"Broker URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-manager-port\": {\n-                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n-                                \"displayName\": \"SNMP Manager Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-manager-port\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Broker URI\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                            \"Client ID\": {\n+                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n+                                \"displayName\": \"Client ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Client ID\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-security-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-security-names\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"noAuthNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"SNMP Users Security Names\",\n+                            \"Connection Timeout (seconds)\": {\n+                                \"defaultValue\": \"30\",\n+                                \"description\": \"Maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails.\",\n+                                \"displayName\": \"Connection Timeout (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-security-names\",\n+                                \"name\": \"Connection Timeout (seconds)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-file-path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-file-path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The path of the json file containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON File Path\",\n+                            \"Keep Alive Interval (seconds)\": {\n+                                \"defaultValue\": \"60\",\n+                                \"description\": \"Defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small \\\"ping\\\" message, which the server will acknowledge. A value of 0 disables keepalive processing in the client.\",\n+                                \"displayName\": \"Keep Alive Interval (seconds)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-file-path\",\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-json-content\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON content\",\n+                            \"Last Will Message\": {\n+                                \"description\": \"The message to send as the client's Last Will.\",\n+                                \"displayName\": \"Last Will Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-json-content\",\n+                                \"name\": \"Last Will Message\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-usm-users-source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The JSON containing the USM users\",\n-                                        \"displayName\": \"Json Content\",\n-                                        \"value\": \"usm-json-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The path of the JSON file containing the USM users\",\n-                                        \"displayName\": \"Json File Path\",\n-                                        \"value\": \"usm-json-file-path\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In case of noAuthNoPriv security level - the list of security names separated by commas\",\n-                                        \"displayName\": \"Security Names\",\n-                                        \"value\": \"usm-security-names\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ways to provide USM User data\",\n-                                \"displayName\": \"USM Users Source\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-source\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"Last Will QoS Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n+                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n+                                        \"displayName\": \"0 - At most once\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n+                                        \"displayName\": \"1 - At least once\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n+                                        \"displayName\": \"2 - Exactly once\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"listen\",\n-                            \"snmp\",\n-                            \"trap\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.ListenTrapSNMP\",\n-                        \"typeDescription\": \"Receives information from SNMP Agent and outputs a FlowFile with information in attributes and without any content\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Attributes retrieved from the SNMP response. It may include: snmp$errorIndex, snmp$errorStatus, snmp$errorStatusText, snmp$nonRepeaters, snmp$requestID, snmp$type, snmp$variableBindings\",\n-                                \"name\": \"snmp$*\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n+                                \"displayName\": \"Last Will QoS Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Last Will QoS Level\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Last Will Retain\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n+                                \"description\": \"Whether to retain the client's Last Will.\",\n+                                \"displayName\": \"Last Will Retain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n+                                \"name\": \"Last Will Retain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n+                            \"Last Will Topic\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                                \"description\": \"The topic to send the client's Last Will to.\",\n+                                \"displayName\": \"Last Will Topic\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n+                                \"name\": \"Last Will Topic\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"MQTT Specification Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n+                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n+                                        \"displayName\": \"v3 AUTO\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"MQTT Specification Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n+                                \"name\": \"MQTT Specification Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"Password\": {\n+                                \"description\": \"Password to use when connecting to the broker\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"snmp-security-level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                            \"Quality of Service(QoS)\": {\n+                                \"description\": \"The Quality of Service (QoS) to send the message with. Accepts three values '0', '1' and '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'. Expression language is allowed in order to support publishing messages with different QoS but the end value of the property must be either '0', '1' or '2'. \",\n+                                \"displayName\": \"Quality of Service (QoS)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Quality of Service(QoS)\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                            \"Retain Message\": {\n+                                \"description\": \"Whether or not the retain flag should be set on the MQTT message.\",\n+                                \"displayName\": \"Retain Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Retain Message\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"snmp-trap-agent-address\": {\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SNMPv1\"\n+                                            \"false\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The address where the SNMP Manager sends the trap.\",\n-                                \"displayName\": \"SNMP Trap Agent Address\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-agent-address\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-trap-enterprise-oid\": {\n-                                \"dependencies\": [\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SNMPv1\"\n+                                            \"5\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n                                     }\n                                 ],\n-                                \"description\": \"Enterprise is the vendor identification (OID) for the network management sub-system that generated the trap.\",\n-                                \"displayName\": \"Enterprise OID\",\n+                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n+                                \"displayName\": \"Session Expiry Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-enterprise-oid\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session Expiry Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-generic-type\": {\n+                            \"Session state\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n-                                        \"displayName\": \"Cold Start\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A warmStart trap signifies that the sending protocol entity is reinitializing itself such that neither the agent configuration nor the protocol entity implementation is altered.\",\n-                                        \"displayName\": \"Warm Start\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A linkDown trap signifies that the sending protocol entity recognizes a failure in one of the communication links represented in the agent's configuration.\",\n-                                        \"displayName\": \"Link Down\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A linkUp trap signifies that the sending protocol entity recognizes that one of the communication links represented in the agent's configuration has come up.\",\n-                                        \"displayName\": \"Link Up\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An authenticationFailure trap signifies that the sending protocol entity is the addressee of a protocol message that is not properly authenticated. While implementations of the SNMP must be capable of generating this trap, they must also be capable of suppressing the emission of such traps via an implementation- specific mechanism.\",\n-                                        \"displayName\": \"Authentication Failure\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An egpNeighborLoss trap signifies that an EGP neighbor for whom the sending protocol entity was an EGP peer has been marked down and the peer relationship no longer obtains\",\n-                                        \"displayName\": \"EGP Neighborloss\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An enterpriseSpecific trap signifies that a particular enterprise-specific trap has occurred which can be defined in the Specific Trap Type field.\",\n-                                        \"displayName\": \"Enterprise Specific\",\n-                                        \"value\": \"6\"\n+                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n+                                        \"displayName\": \"Clean Session\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Provide the Generic Trap Type with the \\\"generic-trap-type\\\" flowfile attribute.\",\n-                                        \"displayName\": \"With \\\"generic-trap-type\\\" FlowFile Attribute\",\n-                                        \"value\": \"generic-trap-type\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n+                                        \"displayName\": \"Resume Session\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Generic trap type is an integer in the range of 0 to 6. See processor usage for details.\",\n-                                \"displayName\": \"Generic Trap Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n+                                \"displayName\": \"Session state\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-trap-generic-type\",\n+                                \"name\": \"Session state\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-manager-host\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The host of the SNMP Manager where the trap is sent.\",\n-                                \"displayName\": \"SNMP Manager Host\",\n+                            \"Topic\": {\n+                                \"description\": \"The topic to publish the message to.\",\n+                                \"displayName\": \"Topic\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-manager-host\",\n+                                \"name\": \"Topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-manager-port\": {\n-                                \"description\": \"The port of the SNMP Manager where the trap is sent.\",\n-                                \"displayName\": \"SNMP Manager Port\",\n+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-manager-port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-oid-value\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The value of the trap OID.\",\n-                                \"displayName\": \"Trap OID Value\",\n+                            \"message-demarcator\": {\n+                                \"description\": \"With this property, you have an option to publish multiple messages from a single FlowFile. This property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart the FlowFile content. This is an optional property ; if not provided, and if not defining a Record Reader/Writer, each FlowFile will be published as a single message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS.\",\n+                                \"displayName\": \"Message Demarcator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-oid-value\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-specific-type\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"6\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Generic Trap Type\",\n-                                        \"propertyName\": \"snmp-trap-generic-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specific trap type is a number that further specifies the nature of the event that generated the trap in the case of traps of generic type 6 (enterpriseSpecific). The interpretation of this code is vendor-specific.\",\n-                                \"displayName\": \"Specific Trap Type\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-specific-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"snmp-version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an MQTT Message.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"send\",\n-                            \"snmp\",\n-                            \"trap\"\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"publish\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.SendTrapSNMP\",\n-                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n+                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n+                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -51015,383 +55156,386 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"box-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"snmp-authentication-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n-                                        \"displayName\": \"SHA\",\n-                                        \"value\": \"SHA\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA224\",\n-                                        \"value\": \"HMAC128SHA224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"HMAC192SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"HMAC384SHA512\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\n+                            \"box-file-id\": {\n+                                \"defaultValue\": \"${box.id}\",\n+                                \"description\": \"The ID of the File to fetch\",\n+                                \"displayName\": \"File ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"box-file-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.ListBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n-                                \"displayName\": \"SNMP Community\",\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"box\",\n+                            \"fetch\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Box\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Box\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-hostname\",\n+                                \"name\": \"box-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\n+                            \"box-folder-id\": {\n+                                \"description\": \"The ID of the folder from which to pull list of files.\",\n+                                \"displayName\": \"Folder ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-port\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"box-folder-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n+                                \"defaultValue\": \"all\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"authPriv\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"authPriv\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"snmp-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     }\n                                 ],\n-                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n-                                \"displayName\": \"SNMP Security Level\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n+                                \"name\": \"min-age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"snmp-version\": {\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When 'true', will include list of files from sub-folders. Otherwise, will return only files that are within the folder defined by the 'Folder ID' property.\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"oid\",\n-                            \"set\",\n-                            \"snmp\"\n+                            \"box\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.SetSNMP\",\n-                        \"typeDescription\": \"Based on incoming FlowFile attributes, the processor will execute SNMP Set requests. When finding attributes with the name snmp$<OID>, the processor will attempt to set the value of the attribute to the corresponding OID given in the attribute name.\",\n+                        \"type\": \"org.apache.nifi.processors.box.ListBoxFile\",\n+                        \"typeDescription\": \"Lists files in a Box folder. Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n-                                \"name\": \"snmp$<OID>\"\n-                            },\n-                            {\n-                                \"description\": \"Denotes the variable binding in which the error occured.\",\n-                                \"name\": \"snmp$errorIndex\"\n-                            },\n-                            {\n-                                \"description\": \"The snmp4j error status of the PDU.\",\n-                                \"name\": \"snmp$errorStatus\"\n-                            },\n-                            {\n-                                \"description\": \"The description of error status.\",\n-                                \"name\": \"snmp$errorStatusText\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n                             },\n                             {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n                             },\n                             {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateful-analysis-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-stateful-analysis-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -51404,127 +55548,218 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Sub-window length\": {\n-                                \"description\": \"When set, values will be batched into sub-windows of the set length. This allows for much larger length total windows to be set but sacrifices some precision. If this is not set (or is 0) then each value is stored in state with the timestamp of when it was received. After the length of time stated in Time window elaspes the value will be removed. If this is set, values will be batched together every X amount of time (where X is the time period set for this property) and removed all at once.\",\n-                                \"displayName\": \"Sub-window length\",\n+                            \"box-client-service\": {\n+                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n+                                \"displayName\": \"Box Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Sub-window length\",\n+                                \"name\": \"box-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"box-folder-id\": {\n+                                \"description\": \"The ID of the folder where the file is uploaded. Please see Additional Details to obtain Folder ID.\",\n+                                \"displayName\": \"Folder ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"box-folder-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Chunked upload is allowed for files larger than 20 MB. It is recommended to use chunked upload for files exceeding 50 MB.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Time window\": {\n-                                \"description\": \"The time window on which to calculate the rolling window.\",\n-                                \"displayName\": \"Time window\",\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Box folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time window\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value to track\": {\n-                                \"description\": \"The expression on which to evaluate each FlowFile. The result of the expression will be added to the rolling window value.\",\n-                                \"displayName\": \"Value to track\",\n+                            \"create-folder\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Subfolder Name\",\n+                                        \"propertyName\": \"subfolder-name\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether to check if the subfolder exists and to automatically create it if it does not. Permission to list folders is required. \",\n+                                \"displayName\": \"Create Subfolder\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"create-folder\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to upload to the specified Box folder.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value to track\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"subfolder-name\": {\n+                                \"description\": \"The name (path) of the subfolder where files are uploaded. The subfolder name is relative to the folder specified by 'Folder ID'. Example: subFolder, subFolder1/subfolder2\",\n+                                \"displayName\": \"Subfolder Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"subfolder-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Box object.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                            \"org.apache.nifi.processors.box.ListBoxFile\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Store the values backing the rolling window. This includes storing the individual values and their time-stamps or the batches of values and their counts.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When state fails to save when processing a FlowFile, the FlowFile is routed here.\",\n-                                \"name\": \"set state fail\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles are successfully processed are routed here\",\n+                                \"description\": \"Files that have been successfully written to Box are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"When a FlowFile fails for a reason other than failing to set state it is routed here.\",\n+                                \"description\": \"Files that could not be written to Box for some reason are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"data science\",\n-                            \"rolling\",\n-                            \"state\",\n-                            \"window\"\n+                            \"box\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.stateful.analysis.AttributeRollingWindow\",\n-                        \"typeDescription\": \"Track a Rolling Window based on evaluating an Expression Language expression on each FlowFile and add that value to the processor's state. Each FlowFile will be emitted with the count of FlowFiles and total aggregate value of values processed in the current time window.\",\n+                        \"type\": \"org.apache.nifi.processors.box.PutBoxFile\",\n+                        \"typeDescription\": \"Puts content to a Box folder.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The rolling window value (sum of all the values stored).\",\n-                                \"name\": \"rolling_window_value\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n                             },\n                             {\n-                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_count\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_mean\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The variance of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_variance\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n                             },\n                             {\n-                                \"description\": \"The standard deviation (positive square root of the variance) of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_stddev\"\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The error code returned by Box\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by Box\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-salesforce-nar\",\n+            \"artifact\": \"nifi-mongodb-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -51537,507 +55772,410 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"15 s\",\n-                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"delete-mongo-delete-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Delete only the first document that matches the query.\",\n+                                        \"displayName\": \"Delete One\",\n+                                        \"value\": \"one\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete every document that matches the query.\",\n+                                        \"displayName\": \"Delete Many\",\n+                                        \"value\": \"many\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n+                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n+                                        \"value\": \"attr\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"one\",\n+                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n+                                \"displayName\": \"Delete Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"delete-mongo-delete-mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"salesforce-api-version\": {\n-                                \"defaultValue\": \"54.0\",\n-                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n-                                \"displayName\": \"API Version\",\n+                            \"delete-mongo-fail-on-no-delete\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fail when no documents are deleted.\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Do not fail when nothing is deleted.\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether to send the flowfile to the success or failure relationship if nothing is successfully deleted.\",\n+                                \"displayName\": \"Fail When Nothing Is Deleted\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delete-mongo-fail-on-no-delete\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"salesforce-url\": {\n-                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n-                                \"displayName\": \"Salesforce Instance URL\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n-                                \"name\": \"objectType\"\n+                                \"description\": \"Configurable parameter for controlling delete mode on a per-flowfile basis. The process must be configured to use this option. Acceptable values are 'one' and 'many.'\",\n+                                \"name\": \"mongodb.delete.mode\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"For FlowFiles created as a result of an execution error.\",\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"put\",\n-                            \"salesforce\",\n-                            \"sobject\"\n+                            \"delete\",\n+                            \"mongo\",\n+                            \"mongodb\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.salesforce.PutSalesforceObject\",\n-                        \"typeDescription\": \"Creates new records for the specified Salesforce sObject. The type of the Salesforce object must be set in the input flowfile's 'objectType' attribute. This processor cannot update existing records.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.DeleteMongo\",\n+                        \"typeDescription\": \"Executes a delete query against a MongoDB collection. The query is provided in the body of the flowfile and the user can select whether it will delete one or many documents that match it.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Salesforce.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"age-delay\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    },\n-                                    {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35.\",\n-                                \"displayName\": \"Age Delay\",\n+                            \"Batch Size\": {\n+                                \"description\": \"The number of elements to be returned from the server in one batch\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"age-delay\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"age-field\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n-                                \"displayName\": \"Age Field\",\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"age-field\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Limit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"create-zero-record-files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether or not to create a FlowFile when the Salesforce REST API does not return any records\",\n-                                \"displayName\": \"Create Zero Record FlowFiles\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-zero-record-files\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-soql-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify the SOQL query to run.\",\n-                                \"displayName\": \"Custom SOQL Query\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"custom-soql-query\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-where-condition\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"A custom expression to be added in the WHERE clause of the query\",\n-                                \"displayName\": \"Custom WHERE Condition\",\n+                            \"Projection\": {\n+                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n+                                \"displayName\": \"Projection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"custom-where-condition\",\n+                                \"name\": \"Projection\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"field-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n-                                \"displayName\": \"Field Names\",\n+                            \"Query\": {\n+                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"field-names\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-age-filter\": {\n-                                \"dependencies\": [\n+                            \"Sort\": {\n+                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n+                                \"displayName\": \"Sort\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Sort\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-mongo-send-empty\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"This property specifies the start time that the processor applies when running the first query.\",\n-                                \"displayName\": \"Initial Age Start Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"initial-age-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"oauth2-access-token-provider\": {\n-                                \"description\": \"Service providing OAuth2 Access Tokens for authenticating using the HTTP Authorization Header\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If a query executes successfully, but returns no results, send an empty JSON document signifying no result.\",\n+                                \"displayName\": \"Send Empty Result\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"oauth2-access-token-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"get-mongo-send-empty\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"query-type\": {\n+                            \"json-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide query by properties.\",\n-                                        \"displayName\": \"Property Based Query\",\n-                                        \"value\": \"property-based-query\"\n+                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n+                                        \"displayName\": \"Extended JSON\",\n+                                        \"value\": \"Extended\"\n                                     },\n                                     {\n-                                        \"description\": \"Provide custom SOQL query.\",\n-                                        \"displayName\": \"Custom Query\",\n-                                        \"value\": \"custom-query\"\n+                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n+                                        \"displayName\": \"Standard JSON\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"property-based-query\",\n-                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n-                                \"displayName\": \"Query Type\",\n+                                \"defaultValue\": \"Extended\",\n+                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n+                                \"displayName\": \"JSON Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"query-type\",\n+                                \"name\": \"json-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"15 s\",\n-                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"mongo-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service used for writing records returned from the Salesforce REST API\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"salesforce-api-version\": {\n-                                \"defaultValue\": \"54.0\",\n-                                \"description\": \"The version number of the Salesforce REST API appended to the URL after the services/data path. See Salesforce documentation for supported versions\",\n-                                \"displayName\": \"API Version\",\n+                            \"mongo-date-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n+                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON.\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-date-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"salesforce-url\": {\n-                                \"description\": \"The URL of the Salesforce instance including the domain without additional path information, such as https://MyDomainName.my.salesforce.com\",\n-                                \"displayName\": \"Salesforce Instance URL\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sobject-name\": {\n-                                \"dependencies\": [\n+                            \"results-per-flowfile\": {\n+                                \"description\": \"How many results to put into a FlowFile at once. The whole body will be treated as a JSON array of results.\",\n+                                \"displayName\": \"Results Per FlowFile\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"results-per-flowfile\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"use-pretty-printing\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Salesforce sObject to be queried\",\n-                                \"displayName\": \"sObject Name\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Choose whether or not to pretty print the JSON from the results of the query. Choosing 'True' can greatly increase the space requirements on disk depending on the complexity of the JSON document\",\n+                                \"displayName\": \"Pretty Print Results JSON\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sobject-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-pretty-printing\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.PutSalesforceObject\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"When 'Age Field' is set, after performing a query the time of execution is stored. Subsequent queries will be augmented with an additional condition so that only records that are newer than the stored execution time (adjusted with the optional value of 'Age Delay') will be retrieved. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"query\",\n-                            \"salesforce\",\n-                            \"sobject\",\n-                            \"soql\"\n+                            \"get\",\n+                            \"mongodb\",\n+                            \"read\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\",\n-                        \"typeDescription\": \"Retrieves records from a Salesforce sObject. Users can add arbitrary filter conditions by setting the 'Custom WHERE Condition' property. The processor can also run a custom query, although record processing is not supported in that case. Supports incremental retrieval: users can define a field in the 'Age Field' property that will be used to determine when the record was created. When this property is set the processor will retrieve new records. Incremental loading and record-based processing are only supported in property-based queries. It's also possible to define an initial cutoff value for the age, filtering out all older records even for the first run. In case of 'Property Based Query' this processor should run on the Primary Node only. FlowFile attribute 'record.count' indicates how many records were retrieved and written to the output. The processor can accept an optional input FlowFile and reference the FlowFile attributes in the query.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongo\",\n+                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n                             },\n                             {\n-                                \"description\": \"Sets the total number of records in the FlowFile.\",\n-                                \"name\": \"total.record.count\"\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-network-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -52046,101 +56184,194 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"FIELDS_DESTINATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Parsed data routes as flowfile JSON content\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Parsed data routes as flowfile attributes\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the results of the parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attribute, fields will be populated as attributes. If set to flowfile-content, the netflowv5 field will be converted into a flat JSON object.\",\n-                                \"displayName\": \"Parsed fields destination\",\n+                            \"Batch Size\": {\n+                                \"description\": \"The number of elements to be returned from the server in one batch\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Projection\": {\n+                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n+                                \"displayName\": \"Projection\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Projection\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Query\": {\n+                                \"description\": \"The selection criteria to do the lookup. If the field is left blank, it will look for input from an incoming connection from another processor to provide the query as a valid JSON document inside of the FlowFile's body. If this field is left blank and a timer is enabled instead of an incoming connection, that will result in a full collection fetch using a \\\"{}\\\" query.\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Sort\": {\n+                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n+                                \"displayName\": \"Sort\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Sort\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-mongo-record-writer-factory\": {\n+                                \"description\": \"The record writer to use to write the result sets.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"get-mongo-record-writer-factory\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongodb-schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"description\": \"The name of the schema in the configured schema registry to use for the query results.\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongodb-schema-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n-                                \"name\": \"udp.port\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a netflowv5 message will be transferred to this Relationship without any attributes being added\",\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original raw content\",\n+                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"byte\",\n-                            \"datagram\",\n-                            \"netflow\",\n-                            \"network\",\n-                            \"packet\",\n-                            \"v5\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"json\",\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.network.ParseNetflowv5\",\n-                        \"typeDescription\": \"Parses netflowv5 byte ingest and add to NiFi flowfile as attributes or JSON content.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongoRecord\",\n+                        \"typeDescription\": \"A record-based version of GetMongo that uses the Record writers to write the MongoDB result set.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n-                                \"name\": \"netflowv5.header.*\"\n+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n                             },\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n-                                \"name\": \"netflowv5.record.*\"\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -52153,361 +56384,194 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"PCAP Max Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Maximum size of each output PCAP file. PCAP packets larger than the configured size result in routing FlowFiles to the failure relationship.\",\n-                                \"displayName\": \"PCAP Max Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"PCAP Max Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The individual PCAP 'segments' of the original PCAP FlowFile will be routed to this relationship.\",\n-                                \"name\": \"split\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Capture\",\n-                            \"Network\",\n-                            \"PCAP\",\n-                            \"Packet\",\n-                            \"Splitter\",\n-                            \"TShark\",\n-                            \"TcpDump\",\n-                            \"WinDump\",\n-                            \"Wireshark\",\n-                            \"sniffers\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.network.pcap.SplitPCAP\",\n-                        \"typeDescription\": \"Splits one pcap file into multiple pcap files based on a maximum size.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The reason the FlowFile was sent to the failure relationship.\",\n-                                \"name\": \"error.reason\"\n-                            },\n-                            {\n-                                \"description\": \"All split PCAP FlowFiles produced from the same parent PCAP FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split PCAP FlowFiles that were created from a single parent PCAP FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split PCAP FlowFiles generated from the parent PCAP FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent PCAP FlowFile\",\n-                                \"name\": \"segment.original.filename\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-2-6-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the data is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted successfully' after successfully writing the content to a Kafka node, without waiting for a response. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Records are considered 'transmitted successfully' if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes.\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"insert\",\n+                                        \"value\": \"insert\"\n                                     },\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"update\",\n+                                        \"value\": \"update\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"insert\",\n+                                \"description\": \"Indicates whether the processor should insert or update content\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Update Query Key\": {\n+                                \"description\": \"Key name used to build the update query criteria; this property is valid only when using update mode, otherwise it is ignored. Example: _id\",\n+                                \"displayName\": \"Update Query Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Update Query Key\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"Upsert\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When true, inserts a document if no document matches the update query criteria; this property is valid only when using update mode, otherwise it is ignored\",\n+                                \"displayName\": \"Upsert\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"Upsert\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"security.protocol\": {\n+                            \"put-mongo-update-mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"displayName\": \"With whole document\",\n+                                        \"value\": \"doc\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"With operators enabled\",\n+                                        \"value\": \"operators\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"doc\",\n+                                \"description\": \"Choose an update mode. You can either supply a JSON document to use as a direct replacement or specify a document that contains update operators like $set, $unset, and $inc. When Operators mode is enabled, the flowfile content is expected to be the operator part for example: {$set:{\\\"key\\\": \\\"value\\\"},$inc:{\\\"count\\\":1234}} and the update query will come from the configured Update Query property.\",\n+                                \"displayName\": \"Update Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"put-mongo-update-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"putmongo-update-query\": {\n+                                \"description\": \"Specify a full MongoDB query to be used for the lookup query to do an update/upsert.\",\n+                                \"displayName\": \"Update Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"putmongo-update-query\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"kafka\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"update\",\n+                            \"write\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -52515,678 +56579,558 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. This value should be false when a PublishKafkaRecord processor is expected to commit the offsets using Exactly Once semantics, and should be reserved for dataflows that are designed to run within Stateless NiFi. See Processor's Usage / Additional Details for more information. Note that setting this value to false can lead to significant data duplication or potentially even data loss if the dataflow is not properly configured.\",\n-                                \"displayName\": \"Commit Offsets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the data is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"group.id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"honor-transactions\": {\n+                            \"Ordered\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                                \"description\": \"Ordered execution of bulk-writes and break on error - otherwise arbitrary order and continue on error\",\n+                                \"displayName\": \"Ordered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"Ordered\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"key-attribute-encoding\": {\n+                            {\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"bulk\",\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"update\",\n+                            \"write\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoBulkOperations\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB as bulk-update\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bypass-validation\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"If the <Separate By Key> property is set to true, FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"        Enable or disable bypassing document schema validation during insert or update operations.\\n        Bypassing document validation is a Privilege Action in MongoDB.\\n        Enabling this property can result in authorization errors for users with limited privileges.\\n\",\n+                                \"displayName\": \"Bypass Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"bypass-validation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n-                                        \"displayName\": \"Byte Array\",\n-                                        \"value\": \"byte-array\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"byte-array\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n-                                \"displayName\": \"Key Format\",\n+                            \"insert_count\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of records to group together for one single insert/upsert operation against MongoDB.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-format\",\n+                                \"name\": \"insert_count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-record-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"record\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Key Format\",\n-                                        \"propertyName\": \"key-format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n-                                \"displayName\": \"Key Record Reader\",\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-record-reader\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"output-strategy\": {\n+                            \"ordered\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"Perform ordered or unordered operations\",\n+                                \"displayName\": \"Ordered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n+                                \"name\": \"ordered\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Value Record Reader\",\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Value Writer\",\n+                            \"update-key-fields\": {\n+                                \"description\": \"Comma separated list of fields based on which to identify documents that need to be updated. If this property is set NiFi will attempt an upsert operation on all documents. If this property is not set all documents will be inserted.\",\n+                                \"displayName\": \"Update Key Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"update-key-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"update-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n+                                        \"description\": \"Updates only the first document that matches the query.\",\n+                                        \"displayName\": \"Update One\",\n+                                        \"value\": \"one\"\n                                     },\n                                     {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"Updates every document that matches the query.\",\n+                                        \"displayName\": \"Update Many\",\n+                                        \"value\": \"many\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n+                                        \"description\": \"Use the value of the 'mongodb.update.mode' attribute of the incoming flowfile. Acceptable values are 'one' and 'many'.\",\n+                                        \"displayName\": \"Use 'mongodb.update.mode' flowfile attribute.\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"one\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"propertyDisplayName\": \"Update Key Fields\",\n+                                        \"propertyName\": \"update-key-fields\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"description\": \"Choose between updating a single document or multiple documents per incoming record.\",\n+                                \"displayName\": \"Update Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n+                                \"name\": \"update-mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Configurable parameter for controlling update mode on a per-flowfile basis. Acceptable values are 'one' and 'many' and controls whether a single incoming record should update a single or multiple Mongo documents.\",\n+                                \"name\": \"mongodb.update.mode\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"record\",\n+                            \"update\",\n+                            \"upsert\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoRecord\",\n+                        \"typeDescription\": \"This processor is a record-aware processor for inserting/upserting data into MongoDB. It uses a configured record reader and schema to read an incoming record set from the body of a flowfile and then inserts/upserts batches of those records into a configured MongoDB collection. This processor does not support deletes. The number of documents to insert/upsert at a time is controlled by the \\\"Batch Size\\\" configuration property. This value should be set to a reasonable size to ensure that MongoDB is not overloaded with too many operations at once.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The number of elements returned from the server in one batch.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo Database Name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"allow-disk-use\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"description\": \"Set this to true to enable writing data to temporary files to prevent exceeding the maximum memory use limit during aggregation pipeline staged when handling large datasets.\",\n+                                \"displayName\": \"Allow Disk Use\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"name\": \"allow-disk-use\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"json-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n+                                        \"displayName\": \"Extended JSON\",\n+                                        \"value\": \"Extended\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n+                                        \"displayName\": \"Standard JSON\",\n+                                        \"value\": \"Standard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"Extended\",\n+                                \"description\": \"By default, MongoDB's Java driver returns \\\"extended JSON\\\". Some of the features of this variant of JSON may cause problems for other JSON parsers that expect only standard JSON types and conventions. This configuration setting  controls whether to use extended JSON or provide a clean view that conforms to standard JSON.\",\n+                                \"displayName\": \"JSON Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"json-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                            \"mongo-agg-query\": {\n+                                \"description\": \"The aggregation query to be executed.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-agg-query\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"mongo-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n+                            \"mongo-date-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n+                                \"description\": \"The date format string to use for formatting Date fields that are returned from Mongo. It is only applied when the JSON output format is set to Standard JSON.\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-date-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"results-per-flowfile\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"How many results to put into a flowfile at once. The whole body will be treated as a JSON array of results.\",\n+                                \"displayName\": \"Results Per FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n+                                \"name\": \"results-per-flowfile\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n+                                \"name\": \"results\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles received from Kafka.  Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\n+                            \"aggregate\",\n+                            \"aggregation\",\n+                            \"mongo\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafkaRecord_2_6. Please note that, at this time, the Processor assumes that all records that are retrieved from a given partition have the same schema. If any of the Kafka messages are pulled but cannot be parsed or written with the configured Record Reader or Record Writer, the contents of the message will be written to a separate FlowFile, and that FlowFile will be transferred to the 'parse.failure' relationship. Otherwise, each FlowFile is sent to the 'success' relationship and may contain many individual messages within the single FlowFile. A 'record.count' attribute is added to indicate how many messages are contained in the FlowFile. No two Kafka messages will be placed into the same FlowFile if they have different schemas, or if they have different values for a message header that is included by the <Headers to Add as Attributes> property.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.RunMongoAggregation\",\n+                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the records are from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -53194,548 +57138,276 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. Typically, we want this value set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafkaRecord in order to provide Exactly Once semantics. See Processor's Usage / Additional Details for more information.\",\n-                                \"displayName\": \"Commit Offsets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"delete-gridfs-query\": {\n+                                \"description\": \"A valid MongoDB query to use to find and delete one or more files from GridFS.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n+                                \"name\": \"delete-gridfs-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"group.id\": {\n-                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"group.id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"header-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"honor-transactions\",\n+                                \"name\": \"gridfs-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data and is encoded using hexadecimal characters with uppercase letters\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, you have an option to output FlowFiles which contains all Kafka messages in a single batch for a given topic and partition and this property allows you to provide a string (interpreted as UTF-8) to use for demarcating apart multiple Kafka messages. This is an optional property and if not provided each Kafka message received will result in a single FlowFile which  time it is triggered. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter depending on the OS\",\n-                                \"displayName\": \"Message Demarcator\",\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"delete\",\n+                            \"gridfs\",\n+                            \"mongodb\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.DeleteGridFS\",\n+                        \"typeDescription\": \"Deletes a file from GridFS using a file name or a query.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"message-demarcator\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"gridfs-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                            \"gridfs-query\": {\n+                                \"description\": \"A valid MongoDB query to use to fetch one or more files from GridFS.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"mongo-operation-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"description\": \"Fetch the entire query result and then make it available to downstream processors.\",\n+                                        \"displayName\": \"Full Query Fetch\",\n+                                        \"value\": \"all-at-once\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"description\": \"As soon as the query start sending results to the downstream processors at regular intervals.\",\n+                                        \"displayName\": \"Stream Query Results\",\n+                                        \"value\": \"streaming\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"all-at-once\",\n+                                \"description\": \"This option controls when results are made available to downstream processors. If Stream Query Results is enabled, provenance will not be tracked relative to the input flowfile if an input flowfile is received and starts the query. In Stream Query Results mode errors will be handled by sending a new flowfile with the original content and attributes of the input flowfile to the failure relationship. Streaming should only be used if there is reliable connectivity between MongoDB and NiFi.\",\n+                                \"displayName\": \"Operation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"mongo-operation-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"mongo-query-attribute\": {\n+                                \"description\": \"If set, the query will be written to a specified attribute on the output flowfiles.\",\n+                                \"displayName\": \"Query Output Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic(s) to pull from. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topic Name(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n+                            \"fetch\",\n+                            \"gridfs\",\n+                            \"mongo\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.FetchGridFS\",\n+                        \"typeDescription\": \"Retrieves one or more files from a GridFS bucket by file name or by a user-defined query.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages written if more than one\",\n-                                \"name\": \"kafka.count\"\n-                            },\n-                            {\n-                                \"description\": \"The key of message if present and if single message. How the key is encoded depends on the value of the 'Key Attribute Encoding' property.\",\n-                                \"name\": \"kafka.key\"\n-                            },\n-                            {\n-                                \"description\": \"The offset of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.offset\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n-                            {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n-                            },\n-                            {\n-                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n-                                \"name\": \"kafka.tombstone\"\n+                                \"description\": \"The custom metadata stored with a file is attached to this property if it exists.\",\n+                                \"name\": \"gridfs.file.metadata\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -53743,1270 +57415,1068 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n+                            \"gridfs-bucket-name\": {\n+                                \"description\": \"The GridFS bucket where the files will be stored. If left blank, it will use the default value 'fs' that the MongoDB client driver uses.\",\n+                                \"displayName\": \"Bucket Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gridfs-client-service\": {\n+                                \"description\": \"The MongoDB client service to use for database connections.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n+                                \"name\": \"gridfs-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Metadata Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n-                                        \"displayName\": \"Use Configured Values\",\n-                                        \"value\": \"Use Configured Values\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n-                                        \"displayName\": \"Metadata From Record\",\n-                                        \"value\": \"Metadata From Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Use Configured Values\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n-                                \"displayName\": \"Record Metadata Strategy\",\n+                            \"gridfs-file-name\": {\n+                                \"description\": \"The name of the file in the bucket that is the target of this processor. GridFS file names do not include path information because GridFS does not sort files into folders within a bucket.\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Metadata Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"putgridfs-chunk-size\": {\n+                                \"defaultValue\": \"256 KB\",\n+                                \"description\": \"Controls the maximum size of each chunk of a file uploaded into GridFS.\",\n+                                \"displayName\": \"Chunk Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-chunk-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"putgridfs-enforce-uniqueness\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"No uniqueness will be enforced.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"Both the filename and hash must be unique.\",\n+                                        \"displayName\": \"Both\",\n+                                        \"value\": \"both\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Only the filename must be unique.\",\n+                                        \"displayName\": \"Name\",\n+                                        \"value\": \"name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Only the file hash must be unique.\",\n+                                        \"displayName\": \"Hash\",\n+                                        \"value\": \"hash\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"When enabled, this option will ensure that uniqueness is enforced on the bucket. It will do so by creating a MongoDB index that matches your selection. It should ideally be configured once when the bucket is created for the first time because it could take a long time to build on an existing bucket wit a lot of data.\",\n+                                \"displayName\": \"Enforce Uniqueness\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"putgridfs-enforce-uniqueness\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            \"putgridfs-hash-attribute\": {\n+                                \"defaultValue\": \"hash.value\",\n+                                \"description\": \"If uniquness enforcement is enabled and the file hash is part of the constraint, this must be set to an attribute that exists on all incoming flowfiles.\",\n+                                \"displayName\": \"Hash Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"putgridfs-hash-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"putgridfs-properties-prefix\": {\n+                                \"description\": \"Attributes that have this prefix will be added to the file stored in GridFS as metadata.\",\n+                                \"displayName\": \"File Properties Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n+                                \"name\": \"putgridfs-properties-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            {\n+                                \"description\": \"Flowfiles that fail the duplicate check are sent to this relationship.\",\n+                                \"name\": \"duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"file\",\n+                            \"gridfs\",\n+                            \"mongo\",\n+                            \"put\",\n+                            \"store\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.gridfs.PutGridFS\",\n+                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Catalog Name\": {\n+                                \"description\": \"The name of the catalog used to locate the desired table. This may not apply for the database that you are querying. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n+                                \"name\": \"Catalog Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for retrieving table information.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"Schema Name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly. Also notice that if the same table name exists in multiple schemas and Schema Name is not specified, the service will find those tables and give an error if the different tables have the same column name(s).\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n+                                \"name\": \"Schema Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"registry\",\n+                            \"schema\",\n+                            \"table\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.db.schemaregistry.DatabaseTableSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a service for generating a record schema from a database table definition. The service is configured to use a table name and a database connection fetches the table metadata (i.e. table definition) such as column names, data types, nullability, etc.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-social-media-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"backfill-minutes\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of minutes (up to 5 minutes) of streaming data to be requested after a disconnect. Only available for project with academic research access. See https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/recovery-and-redundancy-features\",\n+                                \"displayName\": \"Backfill Minutes\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"backfill-minutes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"backoff-attempts\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The number of reconnection tries the processor will attempt in the event of a disconnection of the stream for any reason, before throwing an exception. To start a stream after this exception occur and the connection is fixed, please stop and restart the processor. If the valueof this property is 0, then backoff will never occur and the processor will always need to be restartedif the stream fails.\",\n+                                \"displayName\": \"Backoff Attempts\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"backoff-attempts\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"backoff-time\": {\n+                                \"defaultValue\": \"1 mins\",\n+                                \"description\": \"The duration to backoff before requesting a new stream ifthe current one fails for any reason. Will increase by factor of 2 every time a restart fails\",\n+                                \"displayName\": \"Backoff Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"backoff-time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-key-field\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a field in the Input Records that should be used as the Key for the Kafka message.\",\n-                                \"displayName\": \"Message Key Field\",\n+                            \"base-path\": {\n+                                \"defaultValue\": \"https://api.twitter.com\",\n+                                \"description\": \"The base path that the processor will use for making HTTP requests. The default value should be sufficient for most use cases.\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"base-path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum size of the number of Tweets to be written to a single FlowFile. Will write fewer Tweets based on the number available in the queue at the time of processor invocation.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interprets the <Partition> property as a RecordPath that will be evaluated against each Record to determine which partition the Record will go to. All Records that have the same value for the given RecordPath will go to the same Partition.\",\n-                                        \"displayName\": \"RecordPath Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RecordPathPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                            \"bearer-token\": {\n+                                \"description\": \"The Bearer Token provided by Twitter.\",\n+                                \"displayName\": \"Bearer Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"bearer-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"publish-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n-                                        \"displayName\": \"Use Content as Record Value\",\n-                                        \"value\": \"USE_VALUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                            \"connect-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum time in which client should establish a connection with the Twitter API before a time out. Setting the value to 0 disables connection timeouts.\",\n+                                \"displayName\": \"Connect Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"publish-strategy\",\n+                                \"name\": \"connect-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-key-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Key Writer to use for outgoing FlowFiles\",\n-                                \"displayName\": \"Record Key Writer\",\n+                            \"expansions\": {\n+                                \"description\": \"A comma-separated list of expansions for objects in the returned tweet. See https://developer.twitter.com/en/docs/twitter-api/expansions for proper usage. Possible field values include: author_id, referenced_tweets.id, referenced_tweets.id.author_id, entities.mentions.username, attachments.poll_ids, attachments.media_keys ,in_reply_to_user_id, geo.place_id\",\n+                                \"displayName\": \"Expansions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-key-writer\",\n+                                \"name\": \"expansions\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"maximum-backoff-time\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"The maximum duration to backoff to start attempting a new stream.It is recommended that this number be much higher than the 'Backoff Time' property\",\n+                                \"displayName\": \"Maximum Backoff Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"maximum-backoff-time\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"media-fields\": {\n+                                \"description\": \"A comma-separated list of media fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media for proper usage. Possible field values include: alt_text, duration_ms, height, media_key, non_public_metrics, organic_metrics, preview_image_url, promoted_metrics, public_metrics, type, url, width\",\n+                                \"displayName\": \"Media Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"media-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                            \"place-fields\": {\n+                                \"description\": \"A comma-separated list of place fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place for proper usage. Possible field values include: contained_within, country, country_code, full_name, geo, id, name, place_type\",\n+                                \"displayName\": \"Place Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n-                                \"required\": true,\n+                                \"name\": \"place-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                            \"poll-fields\": {\n+                                \"description\": \"A comma-separated list of poll fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll for proper usage. Possible field values include: duration_minutes, end_datetime, id, options, voting_status\",\n+                                \"displayName\": \"Poll Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"poll-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                            \"queue-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Maximum size of internal queue for streamed messages\",\n+                                \"displayName\": \"Queue Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"queue-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum time of inactivity between receiving tweets from Twitter through the API before a timeout. Setting the value to 0 disables read timeouts.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"stream-endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n+                                        \"description\": \"Streams about one percent of all Tweets. https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream\",\n+                                        \"displayName\": \"Sample Stream\",\n+                                        \"value\": \"Sample Endpoint\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"description\": \"The search stream produces Tweets that match filtering rules configured on Twitter services. At least one well-formed filtering rule must be configured. https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream\",\n+                                        \"displayName\": \"Search Stream\",\n+                                        \"value\": \"Search Endpoint\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"Sample Endpoint\",\n+                                \"description\": \"The source from which the processor will consume Tweets.\",\n+                                \"displayName\": \"Stream Endpoint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"stream-endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"tweet-fields\": {\n+                                \"description\": \"A comma-separated list of tweet fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet for proper usage. Possible field values include: attachments, author_id, context_annotations, conversation_id, created_at, entities, geo, id, in_reply_to_user_id, lang, non_public_metrics, organic_metrics, possibly_sensitive, promoted_metrics, public_metrics, referenced_tweets, reply_settings, source, text, withheld\",\n+                                \"displayName\": \"Tweet Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"transactional-id-prefix\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use Transactions\",\n-                                        \"propertyName\": \"use-transactions\"\n-                                    }\n-                                ],\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"transactional-id-prefix\",\n+                                \"name\": \"tweet-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                            \"user-fields\": {\n+                                \"description\": \"A comma-separated list of user fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user for proper usage. Possible field values include: created_at, description, entities, id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld\",\n+                                \"displayName\": \"User Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n-                                \"required\": true,\n+                                \"name\": \"user-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafkaRecord_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n                             \"json\",\n-                            \"logs\"\n+                            \"social media\",\n+                            \"status\",\n+                            \"tweets\",\n+                            \"twitter\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as individual records to Apache Kafka using the Kafka 2.6 Producer API. The contents of the FlowFile are expected to be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafkaRecord_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.twitter.ConsumeTwitter\",\n+                        \"typeDescription\": \"Streams tweets from Twitter's streaming API v2. The stream provides a sample stream or a search stream based on previously uploaded rules. This processor also provides a pass through for certain fields of the tweet to be returned as part of the response. See https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction for more information regarding the Tweet object model.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"The MIME Type set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of Tweets in the FlowFile\",\n+                                \"name\": \"tweets\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-image-viewer-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-asana-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"These properties will be added on the Kafka configuration after loading any provided configuration properties. In the event a dynamic property represents a property that was already set, its value will be ignored and WARN message logged. For the list of available Kafka properties please refer to: http://kafka.apache.org/documentation.html#configuration. \",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n-                                        \"displayName\": \"Route to Failure\",\n-                                        \"value\": \"Route to Failure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n-                                        \"displayName\": \"Rollback\",\n-                                        \"value\": \"Rollback\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Route to Failure\",\n-                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n-                                \"displayName\": \"Failure Strategy\",\n+                            \"asana-api-url\": {\n+                                \"defaultValue\": \"https://app.asana.com/api/1.0\",\n+                                \"description\": \"Base URL of Asana API. Leave it as default, unless you have your own Asana instance serving on a different URL. (typical for on-premise installations)\",\n+                                \"displayName\": \"API URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n+                                \"name\": \"asana-api-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that we are willing to wait for a response from Kafka. If Kafka does not acknowledge the message within this time period, the FlowFile will be routed to 'failure'.\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\n+                            \"asana-personal-access-token\": {\n+                                \"description\": \"Similarly to entering your username/password into a website, when you access your Asana data via the API you need to authenticate. Personal Access Token (PAT) is an authentication mechanism for accessing the API. You can generate a PAT from the Asana developer console. Refer to Asana Authentication Quick Start for detailed instructions on getting started.\",\n+                                \"displayName\": \"Personal Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"name\": \"asana-personal-access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"asana-workspace-name\": {\n+                                \"description\": \"Specify which Asana workspace to use. Case sensitive. A workspace is the highest-level organizational unit in Asana. All projects and tasks have an associated workspace. An organization is a special kind of workspace that represents a company. In an organization, you can group your projects into teams.\",\n+                                \"displayName\": \"Workspace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"name\": \"asana-workspace-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-asana-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"asana\",\n+                            \"authentication\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.asana.StandardAsanaClientProviderService\",\n+                        \"typeDescription\": \"Common service to authenticate with Asana, and to work on a specified workspace.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-standard-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"component-type\": {\n+                                \"description\": \"Components of the given type will produce a rule violation (i.e. they shouldn't exist). Either the simple or the fully qualified name of the type should be provided.\",\n+                                \"displayName\": \"Component Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"name\": \"component-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"compression.type\": {\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"component\",\n+                            \"controller service\",\n+                            \"processor\",\n+                            \"type\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.flowanalysis.rules.DisallowComponentType\",\n+                        \"typeDescription\": \"Produces rule violations for each component (i.e. processors or controller services) of a given type.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n+                                \"name\": \"dbcp-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"key-attribute-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n-                                    },\n+                            \"parameter-group-name-column\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The key is interpreted as arbitrary binary data that is encoded using hexadecimal characters with uppercase letters.\",\n-                                        \"displayName\": \"Hex Encoded\",\n-                                        \"value\": \"hex\"\n+                                        \"dependentValues\": [\n+                                            \"grouping-by-column\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n+                                        \"propertyName\": \"parameter-grouping-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\n+                                \"description\": \"The name of a column containing the name of the parameter group into which the parameter should be mapped.\",\n+                                \"displayName\": \"Parameter Group Name Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"parameter-group-name-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"parameter-grouping-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A single table is partitioned by the 'Parameter Group Name Column'.  All rows with the same value in this column will map to a group of the same name.\",\n+                                        \"displayName\": \"Column\",\n+                                        \"value\": \"grouping-by-column\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An entire table maps to a Parameter Group.  The group name will be the table name.\",\n+                                        \"displayName\": \"Table Name\",\n+                                        \"value\": \"grouping-by-table-name\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"grouping-by-column\",\n+                                \"description\": \"The strategy used to group parameters.\",\n+                                \"displayName\": \"Parameter Grouping Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameter-grouping-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.request.size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka's 'max.request.size' property and defaults to 1 MB (1048576).\",\n-                                \"displayName\": \"Max Request Size\",\n+                            \"parameter-name-column\": {\n+                                \"description\": \"The name of a column containing the parameter name.\",\n+                                \"displayName\": \"Parameter Name Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"parameter-name-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-demarcator\": {\n-                                \"description\": \"Specifies the string (interpreted as UTF-8) to use for demarcating multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate Kafka message. To enter special character such as 'new line' use CTRL+Enter or Shift+Enter, depending on your OS.\",\n-                                \"displayName\": \"Message Demarcator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"For any attribute that is added as a message header, as configured via the <Attributes to Send as Headers> property, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n+                            \"parameter-value-column\": {\n+                                \"description\": \"The name of a column containing the parameter value.\",\n+                                \"displayName\": \"Parameter Value Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"name\": \"parameter-value-column\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                            \"sql-where-clause\": {\n+                                \"description\": \"A optional SQL query 'WHERE' clause by which to filter all results.  The 'WHERE' keyword should not be included.\",\n+                                \"displayName\": \"SQL WHERE clause\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sasl.kerberos.service.name\": {\n-                                \"description\": \"The service name that matches the primary name of the Kafka server configured in the broker JAAS configuration\",\n-                                \"displayName\": \"Kerberos Service Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"sql-where-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n-                                    },\n+                            \"table-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"dependentValues\": [\n+                                            \"grouping-by-column\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n+                                        \"propertyName\": \"parameter-grouping-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"description\": \"The name of the database table containing the parameters.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n+                            \"table-names\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n+                                            \"grouping-by-table-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n+                                        \"propertyName\": \"parameter-grouping-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"A comma-separated list of names of the database tables containing the parameters.\",\n+                                \"displayName\": \"Table Names\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"table-names\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"sql\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.DatabaseParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from database tables\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read environment variables, which may contain environment credentials.\",\n+                                \"requiredPermission\": \"access environment credentials\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"environment-variable-inclusion-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"All Environment Variables will be included\",\n+                                        \"displayName\": \"Include All\",\n+                                        \"value\": \"include-all\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"List comma-separated Environment Variable names to include\",\n+                                        \"displayName\": \"Comma-Separated\",\n+                                        \"value\": \"comma-separated\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"description\": \"Include Environment Variable names that match a Regular Expression\",\n+                                        \"displayName\": \"Regular Expression\",\n+                                        \"value\": \"regex\"\n                                     }\n                                 ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"defaultValue\": \"include-all\",\n+                                \"description\": \"Indicates how Environment Variables should be included\",\n+                                \"displayName\": \"Environment Variable Inclusion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"environment-variable-inclusion-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n+                            \"include-environment-variables\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n+                                            \"regex\",\n+                                            \"comma-separated\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Environment Variable Inclusion Strategy\",\n+                                        \"propertyName\": \"environment-variable-inclusion-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                                \"description\": \"Specifies environment variable names that should be included from the fetched environment variables.\",\n+                                \"displayName\": \"Include Environment Variables\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-environment-variables\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"parameter-group-name\": {\n+                                \"defaultValue\": \"Environment Variables\",\n+                                \"description\": \"The name of the parameter group that will be fetched.  This indicates the name of the Parameter Context that may receive the fetched parameters.\",\n+                                \"displayName\": \"Parameter Group Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"parameter-group-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"environment\",\n+                            \"variable\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.EnvironmentVariableParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from environment variables\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"parameter-group-directories\": {\n+                                \"description\": \"A comma-separated list of directory absolute paths that will map to named parameter groups.  Each directory that contains files will map to a parameter group, named after the innermost directory in the path.  Files inside the directory will map to parameter names, whose values are the content of each respective file.\",\n+                                \"displayName\": \"Parameter Group Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"parameter-group-directories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"transactional-id-prefix\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Use Transactions\",\n-                                        \"propertyName\": \"use-transactions\"\n-                                    }\n-                                ],\n-                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n-                                \"displayName\": \"Transactional Id Prefix\",\n+                            \"parameter-value-byte-limit\": {\n+                                \"defaultValue\": \"256 B\",\n+                                \"description\": \"The maximum byte size of a parameter value.  Since parameter values are pulled from the contents of files, this is a safeguard that can prevent memory issues if large files are included.\",\n+                                \"displayName\": \"Parameter Value Byte Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameter-value-byte-limit\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-transactions\": {\n+                            \"parameter-value-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"File content is Base64-encoded, and will be decoded before providing the value as a Parameter.\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"base64\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"File content is not encoded, and will be provided directly as a Parameter value.\",\n+                                        \"displayName\": \"Plain text\",\n+                                        \"value\": \"plaintext\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                                \"defaultValue\": \"base64\",\n+                                \"description\": \"Indicates how parameter values are encoded inside Parameter files.\",\n+                                \"displayName\": \"Parameter Value Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n+                                \"name\": \"parameter-value-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If this attribute is set to 'true', if the processor is not configured with a demarcator and if the FlowFile's content is null, then a tombstone message with zero bytes will be sent to Kafka.\",\n-                                \"name\": \"kafka.tombstone\"\n-                            }\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"file\"\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n+                        \"type\": \"org.apache.nifi.parameter.KubernetesSecretParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from files, in the format provided by Kubernetes mounted secrets.  Parameter groups are indicated by a set of directories, and files within the directories map to parameter names. The content of the file becomes the parameter value.  Since Kubernetes mounted Secrets are base64-encoded, the parameter provider defaults to Base64-decoding the value of the parameter from the file.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Access Token\": {\n+                                \"description\": \"Access Token used for authentication against the 1Password APIs.\",\n+                                \"displayName\": \"Access Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Access Token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n+                            \"Connect Server\": {\n+                                \"description\": \"HTTP endpoint of the 1Password Connect Server to connect to. Example: http://localhost:8080\",\n+                                \"displayName\": \"Connect Server\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connect Server\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Web Client Service Provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Web Client Service Provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        },\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n+                            \"1Password\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as a message to Apache Kafka using the Kafka 2.6 Producer API.The messages to send may be individual FlowFiles or may be delimited, using a user-specified delimiter, such as a new-line. The complementary NiFi processor for fetching messages is ConsumeKafka_2_6.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.parameter.OnePasswordParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from 1Password Connect Server\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-image-viewer-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -55019,417 +58489,378 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n+                            \"attribute-list\": {\n+                                \"description\": \"Comma separated list of attributes to be included in the resulting CSV. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive and supports attribute names that contain commas. If an attribute specified in the list is not found it will be emitted to the resulting CSV with an empty string or null depending on the 'Null Value' property. If a core attribute is specified in this list and the 'Include Core Attributes' property is false, the core attribute will be included. The attribute list ALWAYS wins.\",\n+                                \"displayName\": \"Attribute List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"attribute-list\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"attributes-regex\": {\n+                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.  The final output will contain a combination of matches found in the ATTRIBUTE_LIST and ATTRIBUTE_REGEX.\",\n+                                \"displayName\": \"Attributes Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"attributes-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The resulting CSV string will be placed into a new flowfile attribute named 'CSVData'.  The content of the flowfile will not be changed.\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The resulting CSV string will be placed into the content of the flowfile.Existing flowfile context will be overwritten. 'CSVData' will not be written to at all (neither null nor empty string).\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if CSV value is written as a new flowfile attribute 'CSVData' or written in the flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n+                                \"name\": \"destination\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"file\": {\n-                                \"defaultValue\": \"${dropbox.id}\",\n-                                \"description\": \"The Dropbox identifier or path of the Dropbox file to fetch. The 'File' should match the following regular expression pattern: /.*|id:.* . When ListDropbox is used for input, either '${dropbox.id}' (identifying files by Dropbox id) or '${path}/${filename}' (identifying files by path) can be used as 'File' value.\",\n-                                \"displayName\": \"File\",\n+                            \"include-core-attributes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes, which are contained in every FlowFile, should be included in the final CSV value generated.  Core attributes will be added to the end of the CSVData and CSVSchema strings.  The Attribute List property overrides this setting.\",\n+                                \"displayName\": \"Include Core Attributes\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-core-attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"include-schema\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true the schema (attribute names) will also be converted to a CSV string which will either be applied to a new attribute named 'CSVSchema' or applied at the first row in the content depending on the DESTINATION property setting.\",\n+                                \"displayName\": \"Include Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"include-schema\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"null-value\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true a non existing or empty attribute will be 'null' in the resulting CSV. If false an empty string will be placed in the CSV\",\n+                                \"displayName\": \"Null Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"null-value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"Successfully converted attributes to CSV\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"description\": \"Failed to convert attributes to CSV\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"attributes\",\n+                            \"csv\",\n+                            \"flowfile\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                        \"typeDescription\": \"Fetches files from Dropbox. Designed to be used in tandem with ListDropbox.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.AttributesToCSV\",\n+                        \"typeDescription\": \"Generates a CSV representation of the input FlowFile Attributes. The resulting CSV can be written to either a newly generated attribute named 'CSVAttributes' or written to the FlowFile as content.  If the attribute value contains a comma, newline or double quote, then the attribute value will be escaped with double quotes.  Any double quote characters in the attribute value are escaped with another double quote.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n-                            },\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n-                            },\n-                            {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n+                                \"description\": \"CSV representation of the Schema\",\n+                                \"name\": \"CSVSchema\"\n                             },\n                             {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"CSV representation of Attributes\",\n+                                \"name\": \"CSVData\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n+                            \"Attributes List\": {\n+                                \"description\": \"Comma separated list of attributes to be included in the resulting JSON. If this value is left empty then all existing Attributes will be included. This list of attributes is case sensitive. If an attribute specified in the list is not found it will be be emitted to the resulting JSON with an empty string or NULL value.\",\n+                                \"displayName\": \"Attributes List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Attributes List\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if JSON value is written as a new flowfile attribute 'JSONAttributes' or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Destination\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n+                            \"Include Core Attributes\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines if the FlowFile org.apache.nifi.flowfile.attributes.CoreAttributes which are contained in every FlowFile should be included in the final JSON value generated.\",\n+                                \"displayName\": \"Include Core Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"folder\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"The Dropbox identifier or path of the folder from which to pull list of files. 'Folder' should match the following regular expression pattern: /.*|id:.* . Example for folder identifier: id:odTlUvbpIEAAAAAAAAAGGQ. Example for folder path: /Team1/Task1.\",\n-                                \"displayName\": \"Folder\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder\",\n+                                \"name\": \"Include Core Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"JSON Handling Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n+                                        \"description\": \"Escapes JSON attribute values to strings\",\n+                                        \"displayName\": \"Escaped\",\n+                                        \"value\": \"ESCAPED\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Handles JSON attribute values as nested structured objects or arrays\",\n+                                        \"displayName\": \"Nested\",\n+                                        \"value\": \"NESTED\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"ESCAPED\",\n+                                \"description\": \"Strategy to use for handling attributes which contain nested JSON.\",\n+                                \"displayName\": \"JSON Handling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"JSON Handling Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files newer than this will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Null Value\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true a non existing selected attribute will be NULL in the resulting JSON. If false an empty string will be placed in the JSON\",\n+                                \"displayName\": \"Null Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"Null Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"recursive-search\": {\n+                            \"Pretty Print\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subfolders of the Dropbox folder.\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"flowfile-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"Destination\"\n+                                    }\n+                                ],\n+                                \"description\": \"Apply pretty print formatting to the output.\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"Pretty Print\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"attributes-to-json-regex\": {\n+                                \"description\": \"Regular expression that will be evaluated against the flow file attributes to select the matching attributes. This property can be used in combination with the attributes list property.\",\n+                                \"displayName\": \"Attributes Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"attributes-to-json-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"Successfully converted attributes to JSON\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Failed to convert attributes to JSON\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"storage\"\n+                            \"attributes\",\n+                            \"flowfile\",\n+                            \"json\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                        \"typeDescription\": \"Retrieves a listing of files from Dropbox (shortcuts are ignored). Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. When the 'Record Writer' property is set, the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.AttributesToJSON\",\n+                        \"typeDescription\": \"Generates a JSON representation of the input FlowFile Attributes. The resulting JSON can be written to either a new Attribute 'JSONAttributes' or written to the FlowFile as content. Attributes  which contain nested JSON objects can either be handled as JSON or as escaped JSON depending on the strategy chosen.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n-                            },\n-                            {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"JSON representation of Attributes\",\n+                                \"name\": \"JSONAttributes\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -55437,908 +58868,690 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Record Path property\",\n+                                \"value\": \"The Record Path value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"chunked-upload-size\": {\n-                                \"defaultValue\": \"8 MB\",\n-                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. It is recommended to specify chunked upload size smaller than 'Chunked Upload Threshold' and as multiples of 4 MB. Maximum allowed value is 150 MB.\",\n-                                \"displayName\": \"Chunked Upload Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"150 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Maximum allowed value is 150 MB.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"conflict-resolution-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Dropbox folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The full name of the file to upload.\",\n-                                \"displayName\": \"Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"folder\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"The path of the Dropbox folder to upload files to. The folder will be created if it does not exist yet.\",\n-                                \"displayName\": \"Folder\",\n+                            \"record-stats-limit\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Limit the number of individual stats that are returned for each record path to the top N results.\",\n+                                \"displayName\": \"record-stats-limit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"folder\",\n+                                \"name\": \"record-stats-limit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-stats-reader\": {\n+                                \"description\": \"A record reader to use for reading the records.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-stats-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n+                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to Dropbox for some reason are transferred to this relationship.\",\n+                                \"description\": \"If a flowfile fails to be processed, it goes here.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"metrics\",\n+                            \"record\",\n+                            \"stats\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.dropbox.PutDropbox\",\n-                        \"typeDescription\": \"Puts content to a Dropbox folder.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CalculateRecordStats\",\n+                        \"typeDescription\": \"A processor that can count the number of items in a record set, as well as provide counts based on user-defined criteria on subsets of the record set.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n-                            },\n-                            {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n-                            },\n-                            {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n+                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n+                                \"description\": \"A count of the records that contain a value for the user defined property.\",\n+                                \"name\": \"recordStats.<User Defined Property Name>.count\"\n                             },\n                             {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"Each value discovered for the user defined property will have its own count attribute. Total number of top N value counts to be added is defined by the limit configuration.\",\n+                                \"name\": \"recordStats.<User Defined Property Name>.<value>.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-scripting-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Default property values are sufficient.\\nConnect the 'success' relationship to CompressContent.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.IdentifyMimeType\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" = \\\"use mime.type attribute\\\"\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.CompressContent\"\n+                                    }\n+                                ],\n+                                \"description\": \"Check whether or not a FlowFile is compressed and if so, decompress it.\",\n+                                \"keywords\": [\n+                                    \"auto\",\n+                                    \"detect\",\n+                                    \"mime type\",\n+                                    \"compress\",\n+                                    \"decompress\",\n+                                    \"gzip\",\n+                                    \"bzip2\"\n+                                ],\n+                                \"notes\": \"If IdentifyMimeType determines that the content is not compressed, CompressContent will pass the FlowFile along to the 'success' relationship without attempting to decompress it.\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Compression Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy-hadoop\",\n+                                        \"value\": \"snappy-hadoop\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy framed\",\n+                                        \"value\": \"snappy framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"use mime.type attribute\",\n+                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Compression Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"compress\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Compression Format\",\n+                                        \"propertyName\": \"Compression Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The compression level to use; this is valid only when using gzip, deflate or xz-lzma2 compression. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Compression Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.script.ScriptedLookupService\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"compress\",\n+                                        \"value\": \"compress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"decompress\",\n+                                        \"value\": \"decompress\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"compress\",\n+                                \"description\": \"Indicates whether the processor should compress content or decompress content. Must be either 'compress' or 'decompress'\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Update Filename\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will remove the filename extension when decompressing data (only if the extension indicates the appropriate compression format) and add the appropriate extension when compressing data\",\n+                                \"displayName\": \"Update Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Update Filename\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"lookup\",\n-                            \"script\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.script.SimpleScriptedLookupService\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted LookupService instance in order to enrich records from an incoming flow file. The script is expected to return an optional string value rather than an arbitrary object (record, e.g.). Also the scripted lookup service should implement StringLookupService, otherwise the getValueType() method must be implemented even though it will be ignored, as SimpleScriptedLookupService returns String as the value type on the script's behalf.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            },\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                        \"tags\": [\n+                            \"brotli\",\n+                            \"bzip2\",\n+                            \"compress\",\n+                            \"content\",\n+                            \"decompress\",\n+                            \"deflate\",\n+                            \"gzip\",\n+                            \"lz4-framed\",\n+                            \"lzma\",\n+                            \"snappy\",\n+                            \"snappy framed\",\n+                            \"snappy-hadoop\",\n+                            \"xz-lzma2\",\n+                            \"zstd\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n+                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. A common idiom is to precede CompressContent with IdentifyMimeType and configure Mode='decompress' AND Compression Format='use mime.type attribute'. When used in this manner, the MIME type is automatically detected and the data is decompressed, if necessary. If decompression is unnecessary, the data is passed through to the 'success' relationship. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Mode\\\" = \\\"compress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm should be used.\",\n+                                \"description\": \"Compress the contents of a FlowFile\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm was used to compress the data previously.\",\n+                                \"description\": \"Decompress the contents of a FlowFile\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"record\",\n-                            \"recordFactory\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.script.ScriptedReader\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordReaderFactory instance in order to read/parse/generate records from an incoming flow file.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the Mode property is set to compress, the appropriate MIME Type is set. If the Mode property is set to decompress and the file is successfully decompressed, this attribute is removed, as the MIME Type is no longer known.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"Grouping Attribute\": {\n+                                \"description\": \"By default, a single \\\"throttle\\\" is used for all FlowFiles. If this value is specified, a separate throttle is used for each value specified by the attribute with this name. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Grouping Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Grouping Attribute\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Maximum Data Rate\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n+                                \"displayName\": \"Maximum Data Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Maximum Data Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n+                            \"Maximum FlowFile Rate\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"description\": \"The maximum rate at which FlowFiles should pass through this processor. The format of this property is expected to be a positive integer representing FlowFiles count per Time Duration\",\n+                                \"displayName\": \"Maximum FlowFile Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"record\",\n-                            \"script\",\n-                            \"writer\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.script.ScriptedRecordSetWriter\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordSetWriterFactory instance in order to write records to an outgoing flow file.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"Maximum FlowFile Rate\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Maximum Rate\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"data rate\",\n+                                            \"attribute value\",\n+                                            \"flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a positive integer, or a Data Size (such as '1 MB') if Rate Control Criteria is set to 'data rate'.\",\n+                                \"displayName\": \"Maximum Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Maximum Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Rate Control Criteria\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"Rate is controlled by counting bytes transferred per time duration.\",\n+                                        \"displayName\": \"data rate\",\n+                                        \"value\": \"data rate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Rate is controlled by counting FlowFiles transferred per time duration\",\n+                                        \"displayName\": \"flowfile count\",\n+                                        \"value\": \"flowfile count\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Rate is controlled by accumulating the value of a specified attribute that is transferred per time duration\",\n+                                        \"displayName\": \"attribute value\",\n+                                        \"value\": \"attribute value\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Rate is controlled by counting bytes and FlowFiles transferred per time duration; if either threshold is met, throttling is enforced\",\n+                                        \"displayName\": \"data rate or flowfile count\",\n+                                        \"value\": \"data rate or flowfile count\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"data rate\",\n+                                \"description\": \"Indicates the criteria that is used to control the throughput rate. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Rate Control Criteria\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Rate Control Criteria\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"record\",\n-                            \"record sink\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.record.sink.script.ScriptedRecordSink\",\n-                        \"typeDescription\": \"Allows the user to provide a scripted RecordSinkService instance in order to transmit records to the desired target. The script must set a variable 'recordSink' to an implementation of RecordSinkService.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Rate Controlled Attribute\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"attribute value\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of an attribute whose values build toward the rate limit if Rate Control Criteria is set to 'attribute value'. The value of the attribute referenced by this property must be a positive long, or the FlowFile will be routed to failure. This value is ignored if Rate Control Criteria is not set to 'attribute value'. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Rate Controlled Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Rate Controlled Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Rate Exceeded Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"The FlowFile will be held in its input queue until the rate of data has fallen below the configured maximum and will then be allowed through.\",\n+                                        \"displayName\": \"Hold FlowFile\",\n+                                        \"value\": \"Hold FlowFile\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"The FlowFile will be routed to the 'rate exceeded' Relationship.\",\n+                                        \"displayName\": \"Route to 'rate exceeded'\",\n+                                        \"value\": \"Route to 'rate exceeded'\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Clojure\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"Hold FlowFile\",\n+                                \"description\": \"Specifies how to handle an incoming FlowFile when the maximum data rate has been exceeded.\",\n+                                \"displayName\": \"Rate Exceeded Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"Rate Exceeded Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"Time Duration\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"The amount of time to which the Maximum Rate pertains. Changing this value resets the rate counters.\",\n+                                \"displayName\": \"Time Duration\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Duration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.InvokeScriptedProcessor\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that were successfully processed\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles will be routed to this relationship if they are missing a necessary Rate Controlled Attribute or the attribute is not in the expected format\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to be processed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"clojure\",\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"script\"\n+                            \"rate\",\n+                            \"rate control\",\n+                            \"throttle\",\n+                            \"throughput\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ExecuteScript\",\n-                        \"typeDescription\": \"Experimental - Executes a script given the flow file and a process session.  The script is responsible for handling the incoming flow file (transfer to SUCCESS or remove, e.g.) as well as any flow files created by the script. If the handling is incomplete or incorrect, the session will be rolled back. Experimental: Impact of sustained usage not yet verified.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.processors.standard.ControlRate\",\n+                        \"typeDescription\": \"Controls the rate at which data is transferred to follow-on processors. If you configure a very small Time Duration, then the accuracy of the throttle gets worse. You can improve this accuracy by decreasing the Yield Duration, at the expense of more Tasks given to the processor.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `data rate`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how much data should be allowed through each second.\\n\\nFor example, to allow through 8 MB per second, set \\\"Maximum Rate\\\" to `8 MB`.\\n\",\n+                                \"description\": \"Limit the rate at which data is sent to a downstream system with little to no bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"data rate\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many FlowFiles should be allowed through each second.\\n\\nFor example, to allow through 100 FlowFiles per second, set \\\"Maximum Rate\\\" to `100`.\\n\",\n+                                \"description\": \"Limit the rate at which FlowFiles are sent to a downstream system with little to no bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"flowfile rate\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each second.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `100`.\\nIf more than 100 requests come in during any one second, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n+                                \"description\": \"Reject requests that exceed a specific rate with little to no bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"request rate\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 min`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each minute.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `6000`.\\nThis will allow through 6,000 FlowFiles per minute, which averages to 100 FlowFiles per second. However, those 6,000 FlowFiles may come all within the first couple of\\nseconds, or they may come in over a period of 60 seconds. As a result, this gives us an average rate of 100 FlowFiles per second but allows for bursts of data.\\nIf more than 6,000 requests come in during any one minute, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n+                                \"description\": \"Reject requests that exceed a specific rate, allowing for bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"request rate\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56346,131 +59559,72 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                            \"Input Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to expect for Input\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Input Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"Output Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to convert to\",\n+                                \"displayName\": \"Output Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Output Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"\",\n+                                \"name\": \"success\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"script\"\n+                            \"character set\",\n+                            \"characterset\",\n+                            \"convert\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.InvokeScriptedProcessor\",\n-                        \"typeDescription\": \"Experimental - Invokes a script engine for a Processor defined in the given script. The script must define a valid class that implements the Processor interface, and it must set a variable 'processor' to an instance of the class. Processor methods such as onTrigger() will be delegated to the scripted Processor instance. Also any Relationships or PropertyDescriptors defined by the scripted processor will be added to the configuration dialog. The scripted processor can implement public void setLogger(ComponentLog logger) to get access to the parent logger, as well as public void onScheduled(ProcessContext context) and public void onStopped(ProcessContext context) methods to be invoked when the parent InvokeScriptedProcessor is scheduled or stopped, respectively.  NOTE: The script will be loaded when the processor is populated with property values, see the Restrictions section for more security implications.  Experimental: Impact of sustained usage not yet verified.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertCharacterSet\",\n+                        \"typeDescription\": \"Converts a FlowFile's content from one character set to another\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56478,184 +59632,333 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"Catalog Name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Catalog Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Catalog Name\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"JDBC Connection Pool\": {\n+                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n+                                \"displayName\": \"JDBC Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"JDBC Connection Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Schema Name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Schema Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Statement Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DELETE\",\n+                                        \"value\": \"DELETE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use statement.type Attribute\",\n+                                        \"value\": \"Use statement.type Attribute\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the type of SQL Statement to generate\",\n+                                \"displayName\": \"Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"Statement Type\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the table that the statement should update\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Translate Field Names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate JSON field names into the appropriate column names for the table specified. If false, the JSON field names must match the column names exactly, or the column will not be updated\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Translate Field Names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Unmatched Column Behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the JSON document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming JSON element does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Unmatched Column Behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Unmatched Field Behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Unmatched Field Behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Update Keys\": {\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n+                                \"displayName\": \"Update Keys\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Update Keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"jts-quoted-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n-                                \"required\": true,\n+                                \"name\": \"jts-quoted-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"jts-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jts-quoted-table-identifiers\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"jts-sql-param-attr-prefix\": {\n+                                \"defaultValue\": \"sql\",\n+                                \"description\": \"The string to be prepended to the outgoing flow file attributes, such as <sql>.args.1.value, where <sql> is replaced with the specified value\",\n+                                \"displayName\": \"SQL Parameter Attribute Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"jts-sql-param-attr-prefix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"table-schema-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many Table Schemas should be cached\",\n+                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"table-schema-cache-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                            \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n+                            \"org.apache.nifi.processors.standard.PutSQL\"\n                         ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Matching records of the original FlowFile will be routed to this relationship. If there are no matching records, no FlowFile will be routed here.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"A FlowFile is routed to this relationship when its contents have successfully been converted into a SQL statement\",\n+                                \"name\": \"sql\"\n                             },\n                             {\n-                                \"description\": \"In case of any issue during processing the incoming FlowFile, the incoming FlowFile will be routed to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be converted into a SQL statement. Common causes include invalid JSON content or the JSON content missing a required field (if using an INSERT statement type).\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the number of filtered or remaining records.\",\n+                                \"description\": \"When a FlowFile is converted to SQL, the original JSON FlowFile is routed to this relationship\",\n                                 \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"record\",\n-                            \"script\"\n+                            \"database\",\n+                            \"delete\",\n+                            \"flat\",\n+                            \"insert\",\n+                            \"json\",\n+                            \"rdbms\",\n+                            \"relational\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                        \"typeDescription\": \"This processor provides the ability to filter records out from FlowFiles using the user-provided script. Every record will be evaluated by the script which must return with a boolean value. Records with \\\"true\\\" result will be routed to the \\\"matching\\\" relationship in a batch. Other records will be filtered out.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertJSONToSQL\",\n+                        \"typeDescription\": \"Converts a JSON-formatted FlowFile into an UPDATE, INSERT, or DELETE SQL statement. The incoming FlowFile is expected to be \\\"flat\\\" JSON message, meaning that it consists of a single JSON element and each field maps to a simple type. If a field maps to a JSON object, that JSON object will be interpreted as Text. If the input is an array of JSON elements, each element in the array is output as a separate FlowFile to the 'sql' relationship. Upon successful conversion, the original FlowFile is routed to the 'original' relationship and the SQL is routed to the 'sql' relationship.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Sets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.table\"\n                             },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.catalog\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.value\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56663,43 +59966,44 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"Include Zero Record FlowFiles\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Include Zero Record FlowFiles\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n@@ -56707,155 +60011,94 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n                             \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Record Writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n+                            \"avro\",\n+                            \"convert\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n                             \"record\",\n-                            \"script\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"schema\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                        \"typeDescription\": \"Receives Record-oriented data (i.e., data that can be read by the configured Record Reader) and evaluates the user provided script against each record in the incoming flow file. Each record is then grouped with other records sharing the same partition and a FlowFile is created for each groups of records. Two records shares the same partition if the evaluation of the script results the same return value for both. Those will be considered as part of the same partition.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                        \"typeDescription\": \"Converts records from one data format to another using configured Record Reader and Record Write Controller Services. The Reader and Writer must be configured with \\\"matching\\\" schemas. By this, we mean the schemas must have the same field names. The types of the fields do not have to be the same if a field value can be coerced from one type to another. For instance, if the input schema has a field named \\\"balance\\\" of type double, the output schema can have a field named \\\"balance\\\" with a type of string, double, or float. If any field is present in the input that is not present in the output, the field will be left out of the output. If any field is specified in the output schema but is not present in the input data/schema, then the field will not be present in the output or will have a null value, depending on the writer.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"The Record Reader should be configured according to the incoming data format.\\nThe Record Writer should be configured according to the desired output format.\",\n+                                \"description\": \"Convert data from one record-oriented format to another\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The partition of the outgoing flow file. If the script indicates that the partition has a null value, the attribute will be set to the literal string \\\"<null partition>\\\" (without quotes). Otherwise, the attribute is set to the String representation of whatever value is returned by the script.\",\n-                                \"name\": \"partition\"\n-                            },\n-                            {\n                                 \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records within the flow file.\",\n+                                \"description\": \"The number of records in the FlowFile\",\n                                 \"name\": \"record.count\"\n                             },\n                             {\n                                 \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n                                 \"name\": \"record.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56863,185 +60106,259 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n+                            \"ajust-immediately\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the counter will be updated immediately, without regard to whether the ProcessSession is commit or rolled back;otherwise, the counter will be incremented only if and when the ProcessSession is committed.\",\n+                                \"displayName\": \"Call Immediate Adjustment\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ajust-immediately\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"character-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies a character encoding to use.\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"split-words-on-symbols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, the word count will identify strings separated by common logical delimiters [ _ - . ] as independent words (ex. split-words-on-symbols = 4 words).\",\n+                                \"displayName\": \"Split Words on Symbols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"split-words-on-symbols\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n+                            \"text-character-count\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of characters (including whitespace and symbols, but not including newlines and carriage returns) present in the incoming text.\",\n+                                \"displayName\": \"Count Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"text-character-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"text-line-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If enabled, will count the number of lines present in the incoming text.\",\n+                                \"displayName\": \"Count Lines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"text-line-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"text-line-nonempty-count\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of lines that contain a non-whitespace character present in the incoming text.\",\n+                                \"displayName\": \"Count Non-Empty Lines\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"text-line-nonempty-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"text-word-count\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If enabled, will count the number of words (alphanumeric character groups bounded by whitespace) present in the incoming text. Common logical delimiters [_-.] do not bound a word unless 'Split Words on Symbols' is true.\",\n+                                \"displayName\": \"Count Words\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"text-word-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.jolt.JoltTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ExecuteScript\",\n-                            \"org.apache.nifi.processors.standard.LookupRecord\",\n-                            \"org.apache.nifi.processors.standard.QueryRecord\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.standard.SplitText\"\n                         ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Each FlowFile that were successfully transformed will be routed to this Relationship\",\n+                                \"description\": \"The flowfile contains the original content with one or more attributes added containing the respective counts\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be transformed will be routed to this Relationship\",\n+                                \"description\": \"If the flowfile text cannot be counted for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"modify\",\n-                            \"record\",\n-                            \"script\",\n-                            \"transform\",\n-                            \"update\"\n+                            \"character\",\n+                            \"count\",\n+                            \"line\",\n+                            \"text\",\n+                            \"word\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                        \"typeDescription\": \"Provides the ability to evaluate a simple script against each record in an incoming FlowFile. The script may transform the record in some way, filter the record, or fork additional records. See Processor's Additional Details for more information.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CountText\",\n+                        \"typeDescription\": \"Counts various metrics on incoming text. The requested results will be recorded as attributes. The resulting flowfile will not have its content modified.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of lines of text present in the FlowFile content\",\n+                                \"name\": \"text.line.count\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The number of lines of text (with at least one non-whitespace character) present in the original FlowFile\",\n+                                \"name\": \"text.line.nonempty.count\"\n                             },\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The number of words present in the original FlowFile\",\n+                                \"name\": \"text.word.count\"\n+                            },\n+                            {\n+                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n+                                \"name\": \"text.character.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -57049,1656 +60366,878 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n+                            \"fail_when_empty\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\n-                                \"dynamic\": false,\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Route to failure if the content is empty. While hashing an empty value is valid, some flows may want to detect empty input.\",\n+                                \"displayName\": \"Fail if the content is empty\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"fail_when_empty\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"hash_algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD2\",\n+                                        \"value\": \"MD2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n+                                        \"displayName\": \"SHA-1\",\n+                                        \"value\": \"SHA-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-224\",\n+                                        \"value\": \"SHA-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-384\",\n+                                        \"value\": \"SHA-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/224\",\n+                                        \"value\": \"SHA-512/224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n+                                        \"displayName\": \"SHA-512/256\",\n+                                        \"value\": \"SHA-512/256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-224\",\n+                                        \"value\": \"SHA3-224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-256\",\n+                                        \"value\": \"SHA3-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-384\",\n+                                        \"value\": \"SHA3-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n+                                        \"displayName\": \"SHA3-512\",\n+                                        \"value\": \"SHA3-512\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-160\",\n+                                        \"value\": \"BLAKE2-160\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-256\",\n+                                        \"value\": \"BLAKE2-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-384\",\n+                                        \"value\": \"BLAKE2-384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n+                                        \"displayName\": \"BLAKE2-512\",\n+                                        \"value\": \"BLAKE2-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy compatibility). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hash_algorithm\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFile containing the valid records from the incoming FlowFile will be routed to this relationship. If there are no valid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFile containing the invalid records from the incoming FlowFile will be routed to this relationship. If there are no invalid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"invalid\"\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"In case of any issue during processing the incoming flow file, the incoming FlowFile will be routed to this relationship.\",\n+                                \"description\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the FlowFiles might routed to \\\"valid\\\" and \\\"invalid\\\" relationships.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"record\",\n-                            \"script\",\n-                            \"validate\"\n+                            \"blake2\",\n+                            \"content\",\n+                            \"cryptography\",\n+                            \"hash\",\n+                            \"md5\",\n+                            \"sha\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.script.ScriptedValidateRecord\",\n-                        \"typeDescription\": \"This processor provides the ability to validate records in FlowFiles using the user-provided script. The script is expected to have a record as incoming argument and return with a boolean value. Based on this result, the processor categorizes the records as \\\"valid\\\" or \\\"invalid\\\" and routes them to the respective relationship in batch. Additionally the original FlowFile will be routed to the \\\"original\\\" relationship or in case of unsuccessful processing, to the \\\"failed\\\" relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.CryptographicHashContent\",\n+                        \"typeDescription\": \"Calculates a cryptographic hash value for the flowfile content using the given algorithm and writes it to an output attribute. Please refer to https://csrc.nist.gov/Projects/Hash-Functions/NIST-Policy-on-Hash-Functions for help to decide which algorithm to use.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"This processor adds an attribute whose value is the result of hashing the flowfile content. The name of this attribute is specified by the value of the algorithm, e.g. 'content_SHA-256'.\",\n+                                \"name\": \"content_<algorithm>\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"A script engine property to update\",\n-                                \"value\": \"The value to set it to\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Body\": {\n-                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script Body\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                            \"@OnScheduled Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnScheduled method, so that the processor can be forced to take a long time to start up\",\n+                                \"displayName\": \"@OnScheduled Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"@OnScheduled Pause Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script File\": {\n-                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n-                                \"displayName\": \"Script File\",\n+                            \"@OnStopped Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnStopped method, so that the processor can be forced to take a long time to shutdown\",\n+                                \"displayName\": \"@OnStopped Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"reporting\",\n-                            \"script\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.script.ScriptedReportingTask\",\n-                        \"typeDescription\": \"Provides reporting and status information to a script. ReportingContext, ComponentLog, and VirtualMachineMetrics objects are made available as variables (context, log, and vmMetrics, respectively) to the script for further processing. The context makes various information available such as events, provenance, bulletins, controller services, process groups, Java Virtual Machine metrics, etc.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-redis-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-flow-registry-client-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"@OnStopped Pause Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"@OnUnscheduled Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the @OnUnscheduled method, so that the processor can be forced to take a long time to respond when user clicks stop\",\n+                                \"displayName\": \"@OnUnscheduled Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"@OnUnscheduled Pause Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n+                            \"Content Size\": {\n+                                \"defaultValue\": \"1 KB\",\n+                                \"description\": \"The number of bytes to write each time that the FlowFile is written to\",\n+                                \"displayName\": \"Content Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n+                                \"name\": \"Content Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"CustomValidate Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n+                                \"displayName\": \"CustomValidate Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"CustomValidate Pause Time\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-transport-protocol\": {\n+                            \"Fail When @OnScheduled called\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"db\",\n-                            \"record\",\n-                            \"s2s\",\n-                            \"site\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.sink.SiteToSiteReportingRecordSink\",\n-                        \"typeDescription\": \"Provides a service to write records using a configured RecordSetWriter over a Site-to-Site connection.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to send sensitive details contained in bulletin events to any external system.\",\n-                                \"requiredPermission\": \"export nifi details\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnScheduled are called\",\n+                                \"displayName\": \"Fail When @OnScheduled called\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Fail When @OnScheduled called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\n+                            \"Fail When @OnStopped called\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnStopped are called\",\n+                                \"displayName\": \"Fail When @OnStopped called\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Platform\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The value to use for the platform field in each event.\",\n-                                \"displayName\": \"Platform\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"name\": \"Fail When @OnStopped called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"include-null-values\": {\n+                            \"Fail When @OnUnscheduled called\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\n+                                \"description\": \"Specifies whether or not the Processor should throw an Exception when the methods annotated with @OnUnscheduled are called\",\n+                                \"displayName\": \"Fail When @OnUnscheduled called\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-null-values\",\n+                                \"name\": \"Fail When @OnUnscheduled called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n+                            \"FlowFile Exception Class\": {\n+                                \"defaultValue\": \"java.lang.RuntimeException\",\n+                                \"description\": \"Exception class to be thrown (must extend java.lang.RuntimeException).\",\n+                                \"displayName\": \"FlowFile Exception Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Exception Class\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n+                            \"FlowFile Exception Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to throw exception.\",\n+                                \"displayName\": \"FlowFile Exception Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Exception Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\n+                            \"FlowFile Failure Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n+                                \"displayName\": \"FlowFile Failure Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Failure Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n+                            \"FlowFile Rollback Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back (without penalty).\",\n+                                \"displayName\": \"FlowFile Rollback Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\n+                                \"name\": \"FlowFile Rollback Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"bulletin\",\n-                            \"site\",\n-                            \"site to site\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteBulletinReportingTask\",\n-                        \"typeDescription\": \"Publishes Bulletin events using the Site To Site protocol. Note: only up to 5 bulletins are stored per component and up to 10 bulletins at controller level for a duration of up to 5 minutes. If this reporting task is not scheduled frequently enough some bulletins may not be sent.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            },\n+                            \"FlowFile Rollback Penalty Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back with penalty.\",\n+                                \"displayName\": \"FlowFile Rollback Penalty Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"FlowFile Rollback Penalty Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n+                            \"FlowFile Rollback Yield Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to roll back and yield.\",\n+                                \"displayName\": \"FlowFile Rollback Yield Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n+                                \"name\": \"FlowFile Rollback Yield Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"FlowFile Success Iterations\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Number of FlowFiles to forward to success relationship.\",\n+                                \"displayName\": \"FlowFile Success Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"FlowFile Success Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"include-null-values\": {\n+                            \"Ignore Interrupts When Paused\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\n+                                \"description\": \"If the Processor's thread(s) are sleeping (due to one of the \\\"Pause Time\\\" properties above), and the thread is interrupted, this indicates whether the Processor should ignore the interrupt and continue sleeping or if it should allow itself to be interrupted.\",\n+                                \"displayName\": \"Ignore Interrupts When Paused\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-null-values\",\n+                                \"name\": \"Ignore Interrupts When Paused\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n+                            \"No FlowFile Exception Class\": {\n+                                \"defaultValue\": \"java.lang.RuntimeException\",\n+                                \"description\": \"Exception class to be thrown if no FlowFile (must extend java.lang.RuntimeException).\",\n+                                \"displayName\": \"No FlowFile Exception Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n+                                \"name\": \"No FlowFile Exception Class\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n+                            \"No FlowFile Exception Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to throw NPE exception if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Exception Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n+                                \"name\": \"No FlowFile Exception Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\n+                            \"No FlowFile Skip Iterations\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Number of times to skip onTrigger if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Skip Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-metrics-application-id\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics\",\n-                                \"displayName\": \"Application ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-metrics-application-id\",\n+                                \"name\": \"No FlowFile Skip Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-metrics-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Metrics will be formatted according to the Ambari Metrics API. See Additional Details in Usage documentation.\",\n-                                        \"displayName\": \"Ambari Format\",\n-                                        \"value\": \"ambari-format\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Metrics will be formatted using the Record Writer property of this reporting task. See Additional Details in Usage documentation to have the description of the default schema.\",\n-                                        \"displayName\": \"Record Format\",\n-                                        \"value\": \"record-format\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ambari-format\",\n-                                \"description\": \"The output format that will be used for the metrics. If Record Format is selected, a Record Writer must be provided. If Ambari Format is selected, the Record Writer property should be empty.\",\n-                                \"displayName\": \"Output Format\",\n+                            \"No FlowFile Yield Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to yield if no FlowFile.\",\n+                                \"displayName\": \"No FlowFile Yield Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-metrics-format\",\n+                                \"name\": \"No FlowFile Yield Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-metrics-hostname\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics\",\n-                                \"displayName\": \"Hostname\",\n+                            \"OnTrigger Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the onTrigger() method, so that the processor can be forced to take a long time to perform its task\",\n+                                \"displayName\": \"OnTrigger Pause Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-metrics-hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"OnTrigger Pause Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n+                            \"Write Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of times to write to the FlowFile\",\n+                                \"displayName\": \"Write Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\n+                                \"name\": \"Write Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles processed successfully.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to process.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"status\"\n+                            \"FlowFile\",\n+                            \"debug\",\n+                            \"flow\",\n+                            \"processor\",\n+                            \"test\",\n+                            \"utility\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteMetricsReportingTask\",\n-                        \"typeDescription\": \"Publishes same metrics as the Ambari Reporting task using the Site To Site protocol.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DebugFlow\",\n+                        \"typeDescription\": \"The DebugFlow processor aids testing and debugging the FlowFile framework by allowing various responses to be explicitly triggered in response to the receipt of a FlowFile or a timer event without a FlowFile if using timer or cron based scheduling.  It can force responses needed to exercise or test various failure modes that can occur when a processor runs.\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"explicitRestrictions\": [\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to send sensitive details contained in Provenance events to any external system.\",\n-                                \"requiredPermission\": \"export nifi details\"\n+                                \"description\": \"A record's cache key is generated by combining the name of each dynamic property with its evaluated record value (as specified by the corresponding RecordPath).\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of the property.\",\n+                                \"value\": \"A valid RecordPath to the record field to be included in the cache key used for deduplication.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"bloom-filter-certainty\": {\n+                                \"defaultValue\": \"0.10\",\n+                                \"description\": \"The desired false positive probability when using the BloomFilter type. Using a value of .05 for example, guarantees a five-percent probability that the result is a false positive. The closer to 1 this value is set, the more precise the result at the expense of more storage space utilization.\",\n+                                \"displayName\": \"Bloom Filter Certainty\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"bloom-filter-certainty\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"cache-identifier\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"multiple\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"An optional expression language field that overrides the record's computed cache key. This field has an additional attribute available: ${record.hash.value}, which contains the cache key derived from dynamic properties (if set) or record fields.\",\n+                                \"displayName\": \"Cache Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"cache-identifier\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\n+                            \"deduplication-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Single File\",\n+                                        \"value\": \"single\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Multiple Files\",\n+                                        \"value\": \"multiple\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n+                                \"defaultValue\": \"single\",\n+                                \"description\": \"The strategy to use for detecting and routing duplicate records. The option for detecting duplicates across a single FlowFile operates in-memory, whereas detection spanning multiple FlowFiles utilises a distributed map cache.\",\n+                                \"displayName\": \"Deduplication Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Platform\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The value to use for the platform field in each event.\",\n-                                \"displayName\": \"Platform\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"name\": \"deduplication-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"distributed-map-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"multiple\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property is required when the deduplication strategy is set to 'multiple files.' The map cache will for each record, atomically check whether the cache key exists and if not, set it.\",\n+                                \"displayName\": \"Distributed Map Cache client\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"distributed-map-cache\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"include-null-values\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"filter-capacity-hint\": {\n+                                \"defaultValue\": \"25000\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"bloom-filter\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Filter Type\",\n+                                        \"propertyName\": \"filter-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\n+                                \"description\": \"An estimation of the total number of unique records to be processed. The more accurate this number is will lead to fewer false negatives on a BloomFilter.\",\n+                                \"displayName\": \"Filter Capacity Hint\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-null-values\",\n+                                \"name\": \"filter-capacity-hint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-event-filter\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Event Type to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-event-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-event-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Event Type to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-id-filter\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component ID to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-id-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component ID to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-name-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Name to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-name-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Name to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-type-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Type to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-type-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Type to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-transport-protocol\": {\n+                            \"filter-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n+                                        \"description\": \"Exactly matches records seen before with 100% accuracy at the expense of more storage usage. Stores the filter data in a single cache entry in the distributed cache, and is loaded entirely into memory during duplicate detection. This filter is preferred for small to medium data sets and offers high performance, being loaded into memory when this processor is running.\",\n+                                        \"displayName\": \"HashSet\",\n+                                        \"value\": \"hash-set\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Space-efficient data structure ideal for large data sets using probability to determine if a record was seen previously. False positive matches are possible, but false negatives are not \\u2013 in other words, a query returns either \\\"possibly in the set\\\" or \\\"definitely not in the set\\\". You should use this option if the FlowFile content is large and you can tolerate some duplication in the data. Uses constant storage space regardless of the record set size.\",\n+                                        \"displayName\": \"BloomFilter\",\n+                                        \"value\": \"bloom-filter\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n+                                \"defaultValue\": \"hash-set\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"single\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The filter used to determine whether a record has been seen before based on the matching RecordPath criteria. If hash set is selected, a Java HashSet object will be used to deduplicate all encountered records. If the bloom filter option is selected, a bloom filter will be used. The bloom filter option is less memory intensive, but has a chance of having false positives.\",\n+                                \"displayName\": \"Filter Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\n+                                \"name\": \"filter-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"start-position\": {\n+                            \"include-zero-record-flowfiles\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n-                                        \"displayName\": \"Beginning of Stream\",\n-                                        \"value\": \"beginning-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n-                                        \"displayName\": \"End of Stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"beginning-of-stream\",\n-                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n-                                \"displayName\": \"Start Position\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"start-position\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"stateful\": {\n-                            \"description\": \"Stores the Reporting Task's last event Id so that on restart the task knows where it left off.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"lineage\",\n-                            \"provenance\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"tracking\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteProvenanceReportingTask\",\n-                        \"typeDescription\": \"Publishes Provenance events using the Site To Site protocol.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If a FlowFile sent to either the duplicate or non-duplicate relationships contains no records, a value of `false` in this property causes the FlowFile to be dropped. Otherwise, the empty FlowFile is emitted.\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Component Name Filter Regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A regex specifying which component names to report.  Any component name matching this regex will be included.\",\n-                                \"displayName\": \"Component Name Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Component Name Filter Regex\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Component Type Filter Regex\": {\n-                                \"defaultValue\": \"(Processor|ProcessGroup|RemoteProcessGroup|RootProcessGroup|Connection|InputPort|OutputPort)\",\n-                                \"description\": \"A regex specifying which component types to report.  Any component type matching this regex will be included.  Component types are: Processor, RootProcessGroup, ProcessGroup, RemoteProcessGroup, Connection, InputPort, OutputPort\",\n-                                \"displayName\": \"Component Type Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Component Type Filter Regex\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\n+                            \"put-cache-identifier\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Distributed Map Cache client\",\n+                                        \"propertyName\": \"distributed-map-cache\"\n+                                    }\n+                                ],\n+                                \"description\": \"For each record, check whether the cache identifier exists in the distributed map cache. If it doesn't exist and this property is true, put the identifier to the cache.\",\n+                                \"displayName\": \"Cache the Entry Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n+                                \"name\": \"put-cache-identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Platform\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The value to use for the platform field in each status record.\",\n-                                \"displayName\": \"Platform\",\n+                            \"record-hashing-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Do not use a hashing algorithm. The value of resolved RecordPaths will be combined with a delimiter (~) to form the unique cache key. This may use significantly more storage depending on the size and shape or your data.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-256 cryptographic hashing algorithm.\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"SHA-512 cryptographic hashing algorithm.\",\n+                                        \"displayName\": \"SHA-512\",\n+                                        \"value\": \"SHA-512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA-256\",\n+                                \"description\": \"The algorithm used to hash the cache key.\",\n+                                \"displayName\": \"Record Hashing Algorithm\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-hashing-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"include-null-values\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-null-values\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n                             \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n-                                \"required\": false,\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Records detected as duplicates are routed to this relationship.\",\n+                                \"name\": \"duplicate\"\n                             },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Records not found in the cache are routed to this relationship.\",\n+                                \"name\": \"non-duplicate\"\n                             },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The original input FlowFile is sent to this relationship unless a fatal error occurs.\",\n+                                \"name\": \"original\"\n                             }\n-                        },\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The HashSet filter type will grow memory space proportionate to the number of unique records processed. The BloomFilter type will use constant memory regardless of the number of records processed.\",\n+                                \"resource\": \"MEMORY\"\n+                            },\n+                            {\n+                                \"description\": \"If a more advanced hash algorithm is chosen, the amount of time required to hash any particular record could increase substantially.\",\n+                                \"resource\": \"CPU\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"history\",\n-                            \"metrics\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"status\"\n+                            \"change\",\n+                            \"dedupe\",\n+                            \"distinct\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"filter\",\n+                            \"hash\",\n+                            \"modify\",\n+                            \"record\",\n+                            \"replace\",\n+                            \"text\",\n+                            \"unique\",\n+                            \"update\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteStatusReportingTask\",\n-                        \"typeDescription\": \"Publishes Status events using the Site To Site protocol.  The component type and name filter regexes form a union: only components matching both regexes will be reported.  However, all process groups are recursively searched for matching components, regardless of whether the process group matches the component filters.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-update-attribute-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DeduplicateRecord\",\n+                        \"typeDescription\": \"This processor de-duplicates individual records within a record set. It can operate on a per-file basis using an in-memory hashset or bloom filter. When configured with a distributed map cache, it de-duplicates records across multiple files.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Number of records written to the destination FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-update-attribute-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -58706,1479 +61245,978 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Updates a FlowFile attribute specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A FlowFile attribute to update\",\n-                                \"value\": \"The value to set it to\"\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Delete Attributes Expression\": {\n-                                \"description\": \"Regular expression for attributes to be deleted from FlowFiles.  Existing attributes that match will be deleted regardless of whether they are updated by this processor.\",\n-                                \"displayName\": \"Delete Attributes Expression\",\n+                            \"Directory Path\": {\n+                                \"defaultValue\": \"${absolute.path}\",\n+                                \"description\": \"The path to the directory the file to delete is located in.\",\n+                                \"displayName\": \"Directory Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Delete Attributes Expression\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Stateful Variables Initial Value\": {\n-                                \"description\": \"If using state to set/reference variables then this value is used to set the initial value of the stateful variable. This will only be used in the @OnScheduled method when state does not contain a value for the variable. This is required if running statefully but can be empty if needed.\",\n-                                \"displayName\": \"Stateful Variables Initial Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Stateful Variables Initial Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Store State\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Do not store state\",\n-                                        \"value\": \"Do not store state\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Store state locally\",\n-                                        \"value\": \"Store state locally\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do not store state\",\n-                                \"description\": \"Select whether or not state will be stored. Selecting 'Stateless' will offer the default functionality of purely updating the attributes on a FlowFile in a stateless manner. Selecting a stateful option will not only store the attributes on the FlowFile but also in the Processors state. See the 'Stateful Usage' topic of the 'Additional Details' section of this processor's documentation for more information\",\n-                                \"displayName\": \"Store State\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Store State\",\n+                                \"name\": \"Directory Path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"canonical-value-lookup-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many canonical lookup values should be stored in the cache\",\n-                                \"displayName\": \"Cache Value Lookup Cache Size\",\n+                            \"Filename\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to delete.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"canonical-value-lookup-cache-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Filename\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"stateful\": {\n-                            \"description\": \"Gives the option to store values not only on the FlowFile but as stateful variables to be referenced in a recursive manner.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n+                                \"description\": \"All FlowFiles, for which the file to delete did not exist, are routed to this relationship\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles, for which an existing file has been deleted, are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles, for which an existing file could not be deleted, are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n                             \"delete\",\n-                            \"modification\",\n-                            \"state\",\n-                            \"update\"\n+                            \"file\",\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"local\",\n+                            \"remove\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.attributes.UpdateAttribute\",\n-                        \"typeDescription\": \"Updates the Attributes for a FlowFile by using the Attribute Expression Language and/or deletes the attributes based on a regular expression\",\n+                        \"type\": \"org.apache.nifi.processors.standard.DeleteFile\",\n+                        \"typeDescription\": \"Deletes a file from the filesystem.\",\n                         \"useCases\": [\n                             {\n-                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the newly added attribute.\\nThe value of the property will become the value of the newly added attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\",\n-                                \"description\": \"Add a new FlowFile attribute\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the attribute whose value will be overwritten.\\nThe value of the property will become the new value of the attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\\nFor example, to change the `txId` attribute to the uppercase version of its current value, add a property named `txId` with a value of `${txId:toUpper()}`\\n\",\n-                                \"description\": \"Overwrite a FlowFile attribute with a new value\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property whose name is `filename` and whose value is the desired filename.\\n\\nFor example, to set the filename to `abc.txt`, add a property named `filename` with a value of `abc.txt`.\\nTo add the `txId` attribute as a prefix to the filename, add a property named `filename` with a value of `${txId}${filename}`.\\nOr, to make the filename more readable, separate the txId from the rest of the filename with a hyphen by using a value of `${txId}-${filename}`.\\n\",\n-                                \"description\": \"Rename a file\",\n+                                \"configuration\": \"Retrieve a file from the filesystem, e.g. using 'ListFile' and 'FetchFile'.\\nProcess the file using any combination of processors.\\nStore the resulting file to a destination, e.g. using 'PutSFTP'.\\nUsing 'DeleteFile', delete the file from the filesystem only after the result has been stored.\\n\",\n+                                \"description\": \"Delete source file only after its processing completed\",\n                                 \"keywords\": [],\n                                 \"notes\": \"\"\n                             }\n                         ],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This processor may write or remove zero or more attributes as described in additional details\",\n-                                \"name\": \"See additional details\"\n+                                \"description\": \"Human-readable reason of failure. Only available if FlowFile is routed to relationship 'failure'.\",\n+                                \"name\": \"DeleteFile.failure.reason\"\n+                            },\n+                            {\n+                                \"description\": \"The class name of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n+                                \"name\": \"DeleteFile.failure.exception.class\"\n+                            },\n+                            {\n+                                \"description\": \"The message of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n+                                \"name\": \"DeleteFile.failure.exception.message\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"credential-configuration-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n-                                        \"displayName\": \"Default Credential\",\n-                                        \"value\": \"default-credential\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"managed-identity\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"default-credential\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Credential Configuration Strategy\",\n+                            \"Age Off Duration\": {\n+                                \"description\": \"Time interval to age off cached FlowFiles\",\n+                                \"displayName\": \"Age Off Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credential-configuration-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Age Off Duration\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"managed-identity\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credential Configuration Strategy\",\n-                                        \"propertyName\": \"credential-configuration-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the value used to identify duplicates; it is this value that is cached\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"credentials\",\n-                            \"provider\",\n-                            \"security\",\n-                            \"session\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.StandardAzureCredentialsControllerService\",\n-                        \"typeDescription\": \"Provide credentials to use with an Azure client.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-consistency-level\": {\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cache The Entry Identifier\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"STRONG\",\n-                                        \"value\": \"STRONG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BOUNDED_STALENESS\",\n-                                        \"value\": \"BOUNDED_STALENESS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SESSION\",\n-                                        \"value\": \"SESSION\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SESSION\",\n-                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n-                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When true this cause the processor to check for duplicates and cache the Entry Identifier. When false, the processor would only check for duplicates and not cache the Entry Identifier, requiring another processor to add identifiers to the distributed cache.\",\n+                                \"displayName\": \"Cache The Entry Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"name\": \"Cache The Entry Identifier\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-key\": {\n-                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n-                                \"displayName\": \"Cosmos DB Access Key\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to cache unique identifiers, used to determine duplicates\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"azure-cosmos-db-uri\": {\n-                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n-                                \"displayName\": \"Cosmos DB URI\",\n+                            \"FlowFile Description\": {\n+                                \"defaultValue\": \"\",\n+                                \"description\": \"When a FlowFile is added to the cache, this value is stored along with it so that if a duplicate is found, this description of the original FlowFile will be added to the duplicate's \\\"original.flowfile.description\\\" attribute\",\n+                                \"displayName\": \"FlowFile Description\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-uri\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"FlowFile Description\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"If a FlowFile has been detected to be a duplicate, it will be routed to this relationship\",\n+                                \"name\": \"duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n+                                \"name\": \"non-duplicate\"\n+                            },\n+                            {\n+                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"document\",\n-                            \"service\"\n+                            \"dedupe\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"hash\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.cosmos.document.AzureCosmosDBClientService\",\n-                        \"typeDescription\": \"Provides a controller service that configures a connection to Cosmos DB (Core SQL API)  and provides access to that connection to other Cosmos DB-related components.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DetectDuplicate\",\n+                        \"typeDescription\": \"Caches a value, computed from FlowFile attributes, for each incoming FlowFile and determines if the cached value has already been seen. If so, routes the FlowFile to 'duplicate' with an attribute named 'original.identifier' that specifies the original FlowFile's \\\"description\\\", which is specified in the <FlowFile Description> property. If the FlowFile is not determined to be a duplicate, the Processor routes the FlowFile to 'non-duplicate'\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles routed to the duplicate relationship will have an attribute added named original.flowfile.description. The value of this attribute is determined by the attributes of the original copy of the data and by the FlowFile Description property.\",\n+                                \"name\": \"original.flowfile.description\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adding a property with the name '5' and value '10' means that the relationship with name '5' will receive 10 FlowFiles in each iteration instead of 1.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The relationship name (positive number)\",\n+                                \"value\": \"The relationship Weight (positive number)\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles are sent to this relationship per the <Distribution Strategy>\",\n+                            \"name\": \"A number 1..<Number Of Relationships>\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application Client ID\": {\n-                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n-                                \"displayName\": \"Application Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Client ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Application Key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Azure Data Explorer Application Key for Authentication\",\n-                                \"displayName\": \"Application Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Application Tenant ID\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n-                                \"displayName\": \"Application Tenant ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Tenant ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Authentication Strategy\": {\n+                            \"Distribution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Azure Application Registration with Application Key\",\n-                                        \"displayName\": \"Application Credentials\",\n-                                        \"value\": \"APPLICATION_CREDENTIALS\"\n+                                        \"description\": \"Relationship selection is evenly distributed in a round robin fashion; all relationships must be available.\",\n+                                        \"displayName\": \"round robin\",\n+                                        \"value\": \"round robin\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Managed Identity\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\n+                                        \"description\": \"Relationship selection is distributed across all available relationships in order of their weight; at least one relationship must be available.\",\n+                                        \"displayName\": \"next available\",\n+                                        \"value\": \"next available\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Relationship selection is the first available relationship without further distribution among all relationships; at least one relationship must be available.\",\n+                                        \"displayName\": \"overflow\",\n+                                        \"value\": \"overflow\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"MANAGED_IDENTITY\",\n-                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n-                                \"displayName\": \"Authentication Strategy\",\n+                                \"defaultValue\": \"round robin\",\n+                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n+                                \"displayName\": \"Distribution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n+                                \"name\": \"Distribution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cluster URI\": {\n-                                \"description\": \"Azure Data Explorer Cluster URI\",\n-                                \"displayName\": \"Cluster URI\",\n+                            \"Number of Relationships\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Determines the number of Relationships to which the load should be distributed\",\n+                                \"displayName\": \"Number of Relationships\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster URI\",\n+                                \"name\": \"Number of Relationships\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoIngestService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Where to route flowfiles for this relationship index\",\n+                                \"name\": \"1\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\",\n-                            \"azure\",\n-                            \"ingest\"\n+                            \"distribute\",\n+                            \"load balance\",\n+                            \"round robin\",\n+                            \"route\",\n+                            \"weighted\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoIngestService\",\n-                        \"typeDescription\": \"Sends batches of flowfile content or stream flowfile content to an Azure ADX cluster.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": true,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DistributeLoad\",\n+                        \"typeDescription\": \"Distributes FlowFiles to downstream processors based on a Distribution Strategy. If using the Round Robin strategy, the default is to assign each destination a weighting of 1 (evenly distributed). However, optional properties can be added to the change this; adding a property with the name '5' and value '10' means that the relationship with name '5' will be receive 10 FlowFiles in each iteration instead of 1.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n+                                \"name\": \"distribute.load.relationship\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application Client ID\": {\n-                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n-                                \"displayName\": \"Application Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Client ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Application Key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Azure Data Explorer Application Key for Authentication\",\n-                                \"displayName\": \"Application Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Application Tenant ID\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n-                                \"displayName\": \"Application Tenant ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Tenant ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Authentication Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Azure Application Registration with Application Key\",\n-                                        \"displayName\": \"Application Credentials\",\n-                                        \"value\": \"APPLICATION_CREDENTIALS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Azure Managed Identity\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MANAGED_IDENTITY\",\n-                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n-                                \"displayName\": \"Authentication Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Cluster URI\": {\n-                                \"description\": \"Azure Data Explorer Cluster URI\",\n-                                \"displayName\": \"Cluster URI\",\n+                            \"Number of Copies\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many copies of each incoming FlowFile will be made\",\n+                                \"displayName\": \"Number of Copies\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster URI\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Number of Copies\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoQueryService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\n+                            \"duplicate\",\n+                            \"load\",\n+                            \"test\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoQueryService\",\n-                        \"typeDescription\": \"Standard implementation of Kusto Query Service for Azure Data Explorer\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.DuplicateFlowFile\",\n+                        \"typeDescription\": \"Intended for load testing, this processor will create the configured number of copies of each incoming FlowFile. The original FlowFile as well as all generated copies are sent to the 'success' relationship. In addition, each FlowFile gets an attribute 'copy.index' set to the copy number, where the original FlowFile gets a value of zero, and all copies receive incremented integer values.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n+                                \"name\": \"copy.index\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Authentication Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Azure Event Hub shared access key\",\n-                                        \"displayName\": \"Shared Access Key\",\n-                                        \"value\": \"SHARED_ACCESS_KEY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Default Azure Credential will read credentials from standard environment variables and will also attempt to read Managed Identity credentials when running in Microsoft Azure environments\",\n-                                        \"displayName\": \"Default Azure Credential\",\n-                                        \"value\": \"DEFAULT_AZURE_CREDENTIAL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n-                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n-                                \"displayName\": \"Authentication Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Provides the Event Hub Name for connections\",\n-                                \"displayName\": \"Event Hub Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Provides provides the host for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Event Hub Namespace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Partition Key\": {\n-                                \"description\": \"A hint for Azure Event Hub message broker how to distribute messages across one or more partitions\",\n-                                \"displayName\": \"Partition Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Partition Key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Service Bus Endpoint\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Default Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"China Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Germany Service Bus Endpoint\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n-                                    },\n-                                    {\n-                                        \"description\": \"United States Government Endpoint\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"Provides the domain for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Shared Access Policy\": {\n+                            \"Encoded Line Length\": {\n+                                \"defaultValue\": \"76\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"base32\",\n+                                            \"base64\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the shared access policy. This policy must have Send claims\",\n-                                \"displayName\": \"Shared Access Policy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Shared Access Policy Key\": {\n-                                \"dependencies\": [\n+                                        \"propertyDisplayName\": \"Encoding\",\n+                                        \"propertyName\": \"Encoding\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"Encode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The primary or secondary key of the shared access policy\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"dependentValues\": [\n+                                            \"MULTIPLE_LINES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Line Output Mode\",\n+                                        \"propertyName\": \"Line Output Mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"description\": \"Each line of encoded data will contain up to the configured number of characters, rounded down to the nearest multiple of 4.\",\n+                                \"displayName\": \"Encoded Line Length\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Encoded Line Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"record\",\n-                            \"sink\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.eventhub.AzureEventHubRecordSink\",\n-                        \"typeDescription\": \"Format and send Records to Azure Event Hubs\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"credentials-type\": {\n+                            \"Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n-                                        \"displayName\": \"Account Key\",\n-                                        \"value\": \"ACCOUNT_KEY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n-                                        \"displayName\": \"SAS Token\",\n-                                        \"value\": \"SAS_TOKEN\"\n+                                        \"description\": \"Encode or decode using Base64 set of characters\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"base64\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\n+                                        \"description\": \"Encode or decode using Base32 set of characters\",\n+                                        \"displayName\": \"Base32\",\n+                                        \"value\": \"base32\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n-                                        \"displayName\": \"Service Principal\",\n-                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                        \"description\": \"Encode or decode using hexadecimal set of characters\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"hex\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\n+                                \"defaultValue\": \"base64\",\n+                                \"description\": \"Specifies the type of encoding used.\",\n+                                \"displayName\": \"Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credentials-type\",\n+                                \"name\": \"Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n-                                \"dependencies\": [\n+                            \"Line Output Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"MANAGED_IDENTITY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"The encoded content will be written as a single line.\",\n+                                        \"displayName\": \"Single Line\",\n+                                        \"value\": \"SINGLE_LINE\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\",\n-                                            \"MANAGED_IDENTITY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"The encoded content will be written as multiple lines.\",\n+                                        \"displayName\": \"Multiple Lines\",\n+                                        \"value\": \"MULTIPLE_LINES\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"service-principal-client-id\": {\n+                                \"defaultValue\": \"SINGLE_LINE\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"base32\",\n+                                            \"base64\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal.\",\n-                                \"displayName\": \"Service Principal Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"service-principal-client-secret\": {\n-                                \"dependencies\": [\n+                                        \"propertyDisplayName\": \"Encoding\",\n+                                        \"propertyName\": \"Encoding\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"Encode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n                                     }\n                                 ],\n-                                \"description\": \"Password of the Client/Application.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"description\": \"Controls the line formatting for encoded content based on selected property values.\",\n+                                \"displayName\": \"Line Output Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-secret\",\n+                                \"name\": \"Line Output Mode\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\n-                                \"dependencies\": [\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"Transform original input to encoded representation\",\n+                                        \"displayName\": \"Encode\",\n+                                        \"value\": \"Encode\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Transform encoded input to original representation\",\n+                                        \"displayName\": \"Decode\",\n+                                        \"value\": \"Decode\"\n                                     }\n                                 ],\n-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"defaultValue\": \"Encode\",\n+                                \"description\": \"Specifies whether the content should be encoded or decoded.\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-tenant-id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ACCOUNT_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token, Managed Identity or Service Principal instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a FlowFile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a FlowFile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"dfs.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"storage-sas-token\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SAS_TOKEN\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Shared Access Signature token (the leading '?' may be included) There are certain risks in allowing the SAS token to be stored as a FlowFile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n-                                \"displayName\": \"SAS Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for ADLS processors.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n+                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"name\": \"failure\"\n+                            },\n                             {\n-                                \"description\": \"If 'adls.credentials.name' attribute contains the name of the dynamic property, then the ADLSCredentialsService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register ADLSCredentialsService\",\n-                                \"value\": \"The ADLSCredentialsService\"\n+                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"base32\",\n+                            \"base64\",\n+                            \"decode\",\n+                            \"encode\",\n+                            \"hex\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerServiceLookup\",\n-                        \"typeDescription\": \"Provides an ADLSCredentialsService that can be used to dynamically select another ADLSCredentialsService. This service requires an attribute named 'adls.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'adls.credentials.name' will be used to select the ADLSCredentialsService that has been registered with that name. This will allow multiple ADLSCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'adls.credentials.name' attribute.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EncodeContent\",\n+                        \"typeDescription\": \"Encode or decode the contents of a FlowFile using Base64, Base32, or hex encoding schemes\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"batch-count\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n+                                \"displayName\": \"Batch Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"defaultValue\": \"${azure.container}\",\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"group-id\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Group Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"group-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"file\",\n-                            \"microsoft\",\n-                            \"resource\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureBlobStorageFileResourceService\",\n-                        \"typeDescription\": \"Provides an Azure Blob Storage file resource for other components.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"inactive-timeout\": {\n+                                \"defaultValue\": \"30 min\",\n+                                \"description\": \"Indicates the duration after which state for an inactive group will be cleared from managed state. Group is determined as inactive if any new incoming FlowFile has not seen for a group for specified duration. Inactive Timeout must be longer than Wait Timeout. If a FlowFile arrives late after its group is already cleared, it will be treated as a brand new group, but will never match the order since expected preceding FlowFiles are already gone. The FlowFile will eventually timeout for waiting and routed to 'overtook'. To avoid this, group states should be kept long enough, however, shorter duration would be helpful for reusing the same group identifier again.\",\n+                                \"displayName\": \"Inactive Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"inactive-timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"defaultValue\": \"${azure.directory}\",\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n+                            \"initial-order\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When the first FlowFile of a group arrives, initial target order will be computed and stored in the managed state. After that, target order will start being tracked by EnforceOrder and stored in the state management store. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and initial order will be left unknown until consecutive FlowFiles provide a valid initial order.\",\n+                                \"displayName\": \"Initial Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"initial-order\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"maximum-order\": {\n+                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n+                                \"displayName\": \"Maximum Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"maximum-order\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"order-attribute\": {\n+                                \"description\": \"A name of FlowFile attribute whose value will be used to enforce order of FlowFiles within a group. If a FlowFile does not have this attribute, or its value is not an integer, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Order Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"order-attribute\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"defaultValue\": \"${azure.filesystem}\",\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"wait-timeout\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'overtook' relationship.\",\n+                                \"displayName\": \"Wait Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"wait-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n+                                \"name\": \"overtook\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n+                                \"name\": \"skipped\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n+                                \"name\": \"wait\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"file\",\n-                            \"microsoft\",\n-                            \"resource\",\n-                            \"storage\"\n+                            \"order\",\n+                            \"sort\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureDataLakeStorageFileResourceService\",\n-                        \"typeDescription\": \"Provides an Azure Data Lake Storage (ADLS) file resource for other components.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EnforceOrder\",\n+                        \"typeDescription\": \"Enforces expected ordering of FlowFiles that belong to the same data group within a single node.  Although PriorityAttributePrioritizer can be used on a connection to ensure that flow files going through that connection are in priority order, depending on error-handling, branching, and other flow designs, it is possible for FlowFiles to get out-of-order. EnforceOrder can be used to enforce original ordering for those FlowFiles. [IMPORTANT] In order to take effect of EnforceOrder, FirstInFirstOutPrioritizer should be used at EVERY downstream relationship UNTIL the order of FlowFiles physically get FIXED by operation such as MergeContent or being stored to the final destination.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute. This value is used to determine wait timeout.\",\n+                                \"name\": \"EnforceOrder.startedAt\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute denoting which relationship it was routed to.\",\n+                                \"name\": \"EnforceOrder.result\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n+                                \"name\": \"EnforceOrder.detail\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n+                                \"name\": \"EnforceOrder.expectedOrder\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\n+                                \"description\": \"If <Destination>='flowfile-attribute' then that FlowFile attribute will be set to any JSON objects that match the JsonPath.  If <Destination>='flowfile-content' then the FlowFile content will be updated to any JSON objects that match the JsonPath.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register AzureStorageCredentialsService_v12\",\n-                                \"value\": \"The AzureStorageCredentialsService_v12\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n+                                \"value\": \"A JsonPath expression\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup_v12\",\n-                        \"typeDescription\": \"Provides an AzureStorageCredentialsService_v12 that can be used to dynamically select another AzureStorageCredentialsService_v12. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService_v12 that has been registered with that name. This will allow multiple AzureStorageCredentialsServices_v12 to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"credentials-type\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n-                                        \"displayName\": \"Account Key\",\n-                                        \"value\": \"ACCOUNT_KEY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n-                                        \"displayName\": \"SAS Token\",\n-                                        \"value\": \"SAS_TOKEN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n-                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n-                                        \"displayName\": \"Service Principal\",\n-                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the JsonPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one JsonPath may be specified, and the property name is ignored.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credentials-type\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"MANAGED_IDENTITY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n+                            \"Null Value Representation\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\",\n-                                            \"MANAGED_IDENTITY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"service-principal-client-id\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal.\",\n-                                \"displayName\": \"Service Principal Client ID\",\n+                                \"defaultValue\": \"empty string\",\n+                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n+                                \"displayName\": \"Null Value Representation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-id\",\n+                                \"name\": \"Null Value Representation\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-secret\": {\n-                                \"dependencies\": [\n+                            \"Path Not Found Behavior\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password of the Client/Application.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-secret\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"service-principal-tenant-id\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"warn\",\n+                                        \"value\": \"warn\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"skip\",\n+                                        \"value\": \"skip\"\n                                     }\n                                 ],\n-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-tenant-id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-key\": {\n+                                \"defaultValue\": \"ignore\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"ACCOUNT_KEY\"\n+                                            \"flowfile-attribute\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"Destination\"\n                                     }\n                                 ],\n-                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token, Managed Identity or Service Principal instead for fine-grained control with policies.\",\n-                                \"displayName\": \"Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name.\",\n-                                \"displayName\": \"Storage Account Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"blob.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                                \"description\": \"Indicates how to handle missing JSON path expressions when destination is set to 'flowfile-attribute'. Selecting 'warn' will generate a warning when a JSON path expression is not found. Selecting 'skip' will omit attributes for any unmatched JSON path expressions.\",\n+                                \"displayName\": \"Path Not Found Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"Path Not Found Behavior\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"dependencies\": [\n+                            \"Return Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SAS_TOKEN\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"auto-detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"json\",\n+                                        \"value\": \"json\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"scalar\",\n+                                        \"value\": \"scalar\"\n                                     }\n                                 ],\n-                                \"description\": \"Shared Access Signature token (the leading '?' may be included)\",\n-                                \"displayName\": \"SAS Token\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Indicates the desired return type of the JSON Path expressions.  Selecting 'auto-detect' will set the return type to 'json' for a Destination of 'flowfile-content', and 'scalar' for a Destination of 'flowfile-attribute'.\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-sas-token\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12\",\n-                        \"typeDescription\": \"Provides credentials for Azure Storage processors using Azure Storage client library v12.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azure-credentials-service\": {\n-                                \"description\": \"Controller service used to obtain Azure credentials to be used with Key Vault client.\",\n-                                \"displayName\": \"Azure Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid JSON\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"group-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression matching on the 'group-name' tag value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' tag value that matches this Regex will not be fetched.\",\n-                                \"displayName\": \"Group Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"group-name-pattern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n                             },\n-                            \"key-vault-uri\": {\n-                                \"description\": \"Vault URI of the Key Vault that contains the secrets\",\n-                                \"displayName\": \"Key Vault URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-vault-uri\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"key\",\n-                            \"keyvault\",\n-                            \"secrets\",\n-                            \"vault\"\n+                            \"JSON\",\n+                            \"JsonPath\",\n+                            \"evaluate\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parameter.azure.AzureKeyVaultSecretsParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from Azure Key Vault Secrets.  Each secret becomes a Parameter, which map to a Parameter Group byadding a secret tag named 'group-name'.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\",\n+                        \"typeDescription\": \"Evaluates one or more JsonPath expressions against the content of a FlowFile. The results of those expressions are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. JsonPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid JsonPath expression. A Return Type of 'auto-detect' will make a determination based off the configured destination. When 'Destination' is set to 'flowfile-attribute,' a return type of 'scalar' will be used. When 'Destination' is set to 'flowfile-content,' a return type of 'JSON' will be used.If the JsonPath evaluates to a JSON array or JSON object and the Return Type is set to 'scalar' the FlowFile will be unmodified and will be routed to failure. A Return Type of JSON can return scalar values if the provided JsonPath evaluates to the specified value and will be routed as a match.If Destination is 'flowfile-content' and the JsonPath does not evaluate to a defined path, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is 'flowfile-attribute' and the expression matches nothing, attributes will be created with empty strings as the value unless 'Path Not Found Behaviour' is set to 'skip', and the FlowFile will always be routed to 'matched.'\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60186,217 +62224,153 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XPath Expression.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XPath Expression.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n+                                \"value\": \"An XPath expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Conflicting records will not be inserted, and FlowFile will not be routed to failure\",\n-                                        \"displayName\": \"Ignore\",\n-                                        \"value\": \"IGNORE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n-                                        \"description\": \"Conflicting records will be upserted, and FlowFile will not be routed to failure\",\n-                                        \"displayName\": \"Upsert\",\n-                                        \"value\": \"UPSERT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"IGNORE\",\n-                                \"description\": \"Choose whether to ignore or upsert when conflict error occurs during insertion\",\n-                                \"displayName\": \"Cosmos DB Conflict Handling Strategy\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the XPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one XPath may be specified, and the property name is ignored.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n-                                \"required\": false,\n+                                \"name\": \"Destination\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-connection-service\": {\n-                                \"description\": \"If configured, the controller service used to obtain the connection string and access key\",\n-                                \"displayName\": \"Cosmos DB Connection Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-connection-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"azure-cosmos-db-consistency-level\": {\n+                            \"Return Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"STRONG\",\n-                                        \"value\": \"STRONG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BOUNDED_STALENESS\",\n-                                        \"value\": \"BOUNDED_STALENESS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SESSION\",\n-                                        \"value\": \"SESSION\"\n+                                        \"displayName\": \"auto-detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                        \"displayName\": \"nodeset\",\n+                                        \"value\": \"nodeset\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SESSION\",\n-                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n-                                \"displayName\": \"Cosmos DB Consistency Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"azure-cosmos-db-container-id\": {\n-                                \"description\": \"The unique identifier for the container\",\n-                                \"displayName\": \"Cosmos DB Container ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-container-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"azure-cosmos-db-key\": {\n-                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n-                                \"displayName\": \"Cosmos DB Access Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"azure-cosmos-db-name\": {\n-                                \"description\": \"The database name or id. This is used as the namespace for document collections or containers\",\n-                                \"displayName\": \"Cosmos DB Name\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Indicates the desired return type of the Xpath expressions.  Selecting 'auto-detect' will set the return type to 'nodeset' for a Destination of 'flowfile-content', and 'string' for a Destination of 'flowfile-attribute'.\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-name\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-partition-key\": {\n-                                \"description\": \"The partition key used to distribute data among servers\",\n-                                \"displayName\": \"Cosmos DB Partition Key\",\n+                            \"Validate DTD\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n+                                \"displayName\": \"Allow DTD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-partition-key\",\n+                                \"name\": \"Validate DTD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"azure-cosmos-db-uri\": {\n-                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n-                                \"displayName\": \"Cosmos DB URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-uri\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"insert-batch-size\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"The number of records to group together for one single insert operation against Cosmos DB\",\n-                                \"displayName\": \"Insert Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert-batch-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid XML, or if the Return Type is 'nodeset' and the XPath evaluates to multiple nodes\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that are written to Cosmos DB are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the XPath is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"evaluate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.cosmos.document.PutAzureCosmosDBRecord\",\n-                        \"typeDescription\": \"This processor is a record-aware processor for inserting data into Cosmos DB with Core SQL API. It uses a configured record reader and schema to read an incoming record set from the body of a Flowfile and then inserts those records into a configured Cosmos DB Container.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXPath\",\n+                        \"typeDescription\": \"Evaluates one or more XPaths against the content of a FlowFile. The results of those XPaths are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor. XPaths are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is flowfile-attribute; otherwise, the property name is ignored). The value of the property must be a valid XPath expression. If the XPath evaluates to more than one node and the Return Type is set to 'nodeset' (either directly, or via 'auto-detect' with a Destination of 'flowfile-content'), the FlowFile will be unmodified and will be routed to failure. If the XPath does not evaluate to a Node, the FlowFile will be routed to 'unmatched' without having its contents modified. If Destination is flowfile-attribute and the expression matches nothing, attributes will be created with empty strings as the value, and the FlowFile will always be routed to 'matched'\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute.\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60404,312 +62378,176 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If <Destination>='flowfile-attribute' then the FlowFile attribute is set to the result of the XQuery.  If <Destination>='flowfile-content' then the FlowFile content is set to the result of the XQuery.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute'\",\n+                                \"value\": \"An XQuery\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Data Format\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec\",\n-                                        \"displayName\": \"avro\",\n-                                        \"value\": \"avro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec.\",\n-                                        \"displayName\": \"apacheavro\",\n-                                        \"value\": \"apacheavro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with comma-separated values (,). For more information, see RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files.\",\n-                                        \"displayName\": \"csv\",\n-                                        \"value\": \"csv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file containing JSON objects separated by \\\\n or \\\\r\\\\n. For more information, see JSON Lines (JSONL).\",\n-                                        \"displayName\": \"json\",\n-                                        \"value\": \"json\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file containing a JSON array of property containers (each representing a record) or any number of property containers separated by spaces, \\\\n or \\\\r\\\\n. Each property container may be spread across multiple lines. This format is preferable to JSON unless the data is not property containers.\",\n-                                        \"displayName\": \"multijson\",\n-                                        \"value\": \"multijson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An ORC file.\",\n-                                        \"displayName\": \"orc\",\n-                                        \"value\": \"orc\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A parquet file.\",\n-                                        \"displayName\": \"parquet\",\n-                                        \"value\": \"parquet\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with values separated by vertical bars (|).\",\n-                                        \"displayName\": \"psv\",\n-                                        \"value\": \"psv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with values separated by semicolons (;).\",\n-                                        \"displayName\": \"scsv\",\n-                                        \"value\": \"scsv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with SOH-separated values. (SOH is the ASCII code point 1. This format is used by Hive in HDInsight).\",\n-                                        \"displayName\": \"sohsv\",\n-                                        \"value\": \"sohsv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with tab delimited values (\\\\t).\",\n-                                        \"displayName\": \"tsv\",\n-                                        \"value\": \"tsv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with tab-delimited values (\\\\t). A backslash (\\\\) is used as escape character.\",\n-                                        \"displayName\": \"tsve\",\n-                                        \"value\": \"tsve\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n-                                        \"description\": \"A text file with lines separated by \\\\n. Empty lines are skipped\",\n-                                        \"displayName\": \"txt\",\n-                                        \"value\": \"txt\"\n-                                    }\n-                                ],\n-                                \"description\": \"The format of the data that is sent to Azure Data Explorer. Supported formats include: avro, csv, json\",\n-                                \"displayName\": \"Data Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Data Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Name\": {\n-                                \"description\": \"Azure Data Explorer Database Name for ingesting data\",\n-                                \"displayName\": \"Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ingest Mapping Name\": {\n-                                \"description\": \"The name of the mapping responsible for storing the data in the appropriate columns.\",\n-                                \"displayName\": \"Ingest Mapping Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Ingest Mapping Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ingest Status Polling Interval\": {\n-                                \"defaultValue\": \"5 s\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n-                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"description\": \"Defines the value of interval of time to poll for ingestion status\",\n-                                \"displayName\": \"Ingest Status Polling Interval\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the XQuery evaluation are written to the FlowFile content or a FlowFile attribute. If set to <flowfile-content>, only one XQuery may be specified and the property name is ignored.  If set to <flowfile-attribute> and the XQuery returns more than one result, multiple attributes will be added to theFlowFile, each named with a '.n' one-up number appended to the specified attribute name\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ingest Status Polling Interval\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingest Status Polling Timeout\": {\n-                                \"defaultValue\": \"5 m\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n-                                        \"propertyName\": \"Poll for Ingest Status\"\n-                                    }\n-                                ],\n-                                \"description\": \"Defines the total amount time to poll for ingestion status\",\n-                                \"displayName\": \"Ingest Status Polling Timeout\",\n+                            \"Output: Indent\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n+                                \"displayName\": \"Output: Indent\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ingest Status Polling Timeout\",\n+                                \"name\": \"Output: Indent\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingestion Ignore First Record\": {\n+                            \"Output: Method\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"xml\",\n+                                        \"value\": \"xml\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Defines whether ignore first record while ingestion.\",\n-                                \"displayName\": \"Ingestion Ignore First Record\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ingestion Ignore First Record\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kusto Ingest Service\": {\n-                                \"description\": \"Azure Data Explorer Kusto Ingest Service\",\n-                                \"displayName\": \"Kusto Ingest Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kusto Ingest Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoIngestService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Partially Succeeded Routing Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"success\",\n-                                        \"value\": \"success\"\n+                                        \"displayName\": \"html\",\n+                                        \"value\": \"html\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"failure\",\n-                                        \"value\": \"failure\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"failure\",\n-                                \"description\": \"Defines where to route FlowFiles that resulted in a partially succeeded status.\",\n-                                \"displayName\": \"Partially Succeeded Routing Strategy\",\n+                                \"defaultValue\": \"xml\",\n+                                \"description\": \"Identifies the overall method that should be used for outputting a result tree.\",\n+                                \"displayName\": \"Output: Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partially Succeeded Routing Strategy\",\n+                                \"name\": \"Output: Method\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Poll for Ingest Status\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n+                            \"Output: Omit XML Declaration\": {\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Determines whether to poll on ingestion status after an ingestion to Azure Data Explorer is completed\",\n-                                \"displayName\": \"Poll for Ingest Status\",\n+                                \"description\": \"Specifies whether the processor should output an XML declaration when transforming a result tree.\",\n+                                \"displayName\": \"Output: Omit XML Declaration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Poll for Ingest Status\",\n+                                \"name\": \"Output: Omit XML Declaration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Streaming Enabled\": {\n+                            \"Validate DTD\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to stream data to Azure Data Explorer.\",\n-                                \"displayName\": \"Streaming Enabled\",\n+                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n+                                \"displayName\": \"Allow DTD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Streaming Enabled\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"Azure Data Explorer Table Name for ingesting data\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"Validate DTD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Ingest processing failed\",\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery cannot be evaluated against the content of the FlowFile.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Ingest processing succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to this relationship when the XQuery is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"XQuery\",\n+                            \"evaluate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.data.explorer.PutAzureDataExplorer\",\n-                        \"typeDescription\": \"Acts as an Azure Data Explorer sink which sends FlowFiles to the provided endpoint. Data can be sent through queued ingestion or streaming ingestion to the Azure Data Explorer cluster.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.EvaluateXQuery\",\n+                        \"typeDescription\": \"Evaluates one or more XQueries against the content of a FlowFile.  The results of those XQueries are assigned to FlowFile Attributes or are written to the content of the FlowFile itself, depending on configuration of the Processor.  XQueries are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed (if the Destination is 'flowfile-attribute'; otherwise, the property name is ignored).  The value of the property must be a valid XQuery.  If the XQuery returns more than one result, new attributes or FlowFiles (for Destinations of 'flowfile-attribute' or 'flowfile-content' respectively) will be created for each result (attributes will have a '.n' one-up number appended to the specified attribute name).  If any provided XQuery returns a result, the FlowFile(s) will be routed to 'matched'. If no provided XQuery returns a result, the FlowFile will be routed to 'unmatched'.  If the Destination is 'flowfile-attribute' and the XQueries matche nothing, no attributes will be applied to the FlowFile.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This processor adds user-defined attributes if the <Destination> property is set to flowfile-attribute .\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60717,107 +62555,167 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"An environment variable name\",\n+                                \"value\": \"An environment variable value\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Database Name\": {\n-                                \"description\": \"Azure Data Explorer Database Name for querying\",\n-                                \"displayName\": \"Database Name\",\n+                            \"Argument Delimiter\": {\n+                                \"defaultValue\": \" \",\n+                                \"description\": \"Delimiter to use to separate arguments for a command [default: space]. Must be a single character.\",\n+                                \"displayName\": \"Argument Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Argument Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kusto Query Service\": {\n-                                \"description\": \"Azure Data Explorer Kusto Query Service\",\n-                                \"displayName\": \"Kusto Query Service\",\n+                            \"Batch Duration\": {\n+                                \"description\": \"If the process is expected to be long-running and produce textual output, a batch duration can be specified so that the output will be captured for this amount of time and a FlowFile will then be sent out with the results and a new FlowFile will be started, rather than waiting for the process to finish before sending out the results\",\n+                                \"displayName\": \"Batch Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kusto Query Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoQueryService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Batch Duration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Query\": {\n-                                \"description\": \"Query to be run against Azure Data Explorer\",\n-                                \"displayName\": \"Query\",\n+                            \"Command\": {\n+                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n+                                \"displayName\": \"Command\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Command\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Command Arguments\": {\n+                                \"description\": \"The arguments to supply to the executable delimited by white space. White space can be escaped by enclosing it in double-quotes.\",\n+                                \"displayName\": \"Command Arguments\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Command Arguments\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Output MIME type\": {\n+                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Batch Duration' is set.\",\n+                                \"displayName\": \"Output MIME Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output MIME type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Redirect Error Stream\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n+                                \"displayName\": \"Redirect Error Stream\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Redirect Error Stream\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Working Directory\": {\n+                                \"description\": \"The directory to use as the current working directory when executing the command\",\n+                                \"displayName\": \"Working Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Working Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles containing original input associated with a failed Query\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles containing results of a successful Query\",\n+                                \"description\": \"All created FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\n+                            \"command\",\n+                            \"external\",\n+                            \"invoke\",\n+                            \"process\",\n+                            \"script\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.data.explorer.QueryAzureDataExplorer\",\n-                        \"typeDescription\": \"Query Azure Data Explorer and stream JSON results to output FlowFiles\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteProcess\",\n+                        \"typeDescription\": \"Runs an operating system command specified by the user and writes the output of that command to a FlowFile. If the command is expected to be long-running, the Processor can output the partial data on a specified interval. When this option is used, the output is expected to be in textual format, as it typically does not make sense to split binary data on arbitrary time-based intervals.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Azure Data Explorer query error message on failures\",\n-                                \"name\": \"query.error.message\"\n+                                \"description\": \"Executed command\",\n+                                \"name\": \"command\"\n                             },\n                             {\n-                                \"description\": \"Azure Data Explorer query executed\",\n-                                \"name\": \"query.executed\"\n+                                \"description\": \"Arguments of the command\",\n+                                \"name\": \"command.arguments\"\n                             },\n                             {\n-                                \"description\": \"Content Type set to application/json\",\n+                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Batch Duration' is not set\",\n                                 \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60825,430 +62723,692 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.type\",\n+                                \"value\": \"SQL type argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.value\",\n+                                \"value\": \"Argument to be supplied\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.format\",\n+                                \"value\": \"SQL format argument to be supplied\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Service Bus Endpoint\": {\n-                                \"allowableValues\": [\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SQL select query\": {\n+                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n+                                \"displayName\": \"SQL select query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"name\": \"dbf-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"checkpoint-strategy\": {\n+                            \"dbf-user-logical-types\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use Azure Blob Storage to store partition ownership and checkpoint information\",\n-                                        \"displayName\": \"Azure Blob Storage\",\n-                                        \"value\": \"AZURE_BLOB_STORAGE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Use component state to store partition ownership and checkpoint information\",\n-                                        \"displayName\": \"Component State\",\n-                                        \"value\": \"COMPONENT_STATE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AZURE_BLOB_STORAGE\",\n-                                \"description\": \"Specifies which strategy to use for storing and retrieving partition ownership and checkpoint information for each partition.\",\n-                                \"displayName\": \"Checkpoint Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"checkpoint-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-batch-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The number of messages to process within a NiFi session. This parameter affects throughput and consistency. NiFi commits its session and Event Hubs checkpoints after processing this number of messages. If NiFi session is committed, but fails to create an Event Hubs checkpoint, then it is possible that the same messages will be received again. The higher number, the higher throughput, but possibly less consistent.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"event-hub-consumer-group\": {\n-                                \"defaultValue\": \"$Default\",\n-                                \"description\": \"The name of the consumer group to use.\",\n-                                \"displayName\": \"Consumer Group\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-consumer-group\",\n+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-initial-offset\": {\n+                            \"esql-auto-commit\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Read from the oldest message retained in the stream.\",\n-                                        \"displayName\": \"Start of stream\",\n-                                        \"value\": \"start-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore old retained messages even if exist, start reading new ones from now.\",\n-                                        \"displayName\": \"End of stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"end-of-stream\",\n-                                \"description\": \"Specify where to start receiving messages if offset is not yet stored in the checkpoint store.\",\n-                                \"displayName\": \"Initial Offset\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"event-hub-initial-offset\",\n+                                \"name\": \"esql-auto-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-message-receive-timeout\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"The amount of time this consumer should wait to receive the Batch Size before returning.\",\n-                                \"displayName\": \"Message Receive Timeout\",\n+                            \"esql-fetch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-message-receive-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-fetch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-name\": {\n-                                \"description\": \"The name of the event hub to pull messages from.\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"esql-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-namespace\": {\n-                                \"description\": \"The namespace that the Azure Event Hubs is assigned to. This is generally equal to <Event Hub Names>-ns.\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"esql-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-namespace\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-prefetch-count\": {\n-                                \"defaultValue\": \"300\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Prefetch Count\",\n+                            \"sql-post-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Post-Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-prefetch-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sql-post-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-shared-access-policy-name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n+                            \"sql-pre-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Pre-Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-shared-access-policy-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"name\": \"sql.args.N.type\"\n                             },\n-                            \"event-hub-shared-access-policy-primary-key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n-                                \"dynamic\": false,\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to Avro format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Contains the number of rows returned by the query. If 'Max Rows Per Flow File' is set, then this number will reflect the number of rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.row.count\"\n+                            },\n+                            {\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.duration\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the query execution time in milliseconds. This number will reflect the query execution time regardless of the 'Max Rows Per Flow File' setting.\",\n+                                \"name\": \"executesql.query.executiontime\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the result set fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.fetchtime\"\n+                            },\n+                            {\n+                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n+                                \"name\": \"executesql.resultset.index\"\n+                            },\n+                            {\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"event-hub-shared-access-policy-primary-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"sql.args.N.type\",\n+                                \"value\": \"SQL type argument to be supplied\"\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"sql.args.N.value\",\n+                                \"value\": \"Argument to be supplied\"\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading received messages. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"sql.args.N.format\",\n+                                \"value\": \"SQL format argument to be supplied\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": false,\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query  , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Azure Storage account key to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Key\",\n+                            \"SQL select query\": {\n+                                \"description\": \"The SQL select query to execute. The query can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming flowfiles. If this property is empty, the content of the incoming flow file is expected to contain a valid SQL select query, to be issued by the processor to the database. Note that Expression Language is not evaluated for flow file contents.\",\n+                                \"displayName\": \"SQL select query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-account-key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Name of the Azure Storage account to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Name\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-account-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-container-name\": {\n-                                \"dependencies\": [\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-user-logical-types\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Name of the Azure Storage container to store the event hub consumer group state. If not specified, event hub name is used.\",\n-                                \"displayName\": \"Storage Container Name\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-container-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbf-user-logical-types\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"dependencies\": [\n+                            \"esql-auto-commit\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Azure Storage SAS token to store Event Hub consumer group state. Always starts with a ? character.\",\n-                                \"displayName\": \"Storage SAS Token\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"esql-auto-commit\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"use-managed-identity\": {\n+                            \"esql-fetch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-fetch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"esql-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"esql-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The fragment.count attribute will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"esqlrecord-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"description\": \"Whether to change characters in column names. For example, colons and periods will be changed to underscores.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n+                                \"name\": \"esqlrecord-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"esqlrecord-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"esqlrecord-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"sql-post-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed after the main SQL query is executed. Example like setting session properties after main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Post-Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sql-post-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sql-pre-query\": {\n+                                \"description\": \"A semicolon-delimited list of queries executed before the main SQL query is executed. For example, set session properties before main query. It's possible to include semicolons in the statements themselves by escaping them with a backslash ('\\\\;'). Results/outputs from these queries will be suppressed if there are no errors.\",\n+                                \"displayName\": \"SQL Pre-Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n+                                \"name\": \"sql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Local state is used to store the client id. Cluster state is used to store partition ownership and checkpoint information when component state is configured as the checkpointing strategy.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Event Hub.\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"record\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\",\n-                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs with checkpointing to ensure consistent event processing. Checkpoint tracking avoids consuming a message multiple times and enables reliable resumption of processing in the event of intermittent network failures. Checkpoint tracking requires external storage and provides the preferred approach to consuming messages from Azure Event Hubs. In clustered environment, ConsumeAzureEventHub processor instances form a consumer group and the messages are distributed among the cluster nodes (each message is processed on one cluster node only).\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\",\n+                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to the format specified by a Record Writer. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n-                                \"name\": \"eventhub.enqueued.timestamp\"\n+                                \"description\": \"Contains the number of rows returned in the select query\",\n+                                \"name\": \"executesql.row.count\"\n                             },\n                             {\n-                                \"description\": \"The offset into the partition at which the message was stored\",\n-                                \"name\": \"eventhub.offset\"\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.duration\"\n                             },\n                             {\n-                                \"description\": \"The sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n+                                \"description\": \"Duration of the query execution time in milliseconds\",\n+                                \"name\": \"executesql.query.executiontime\"\n                             },\n                             {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n+                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.fetchtime\"\n                             },\n                             {\n-                                \"description\": \"The name of the partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\n+                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n+                                \"name\": \"executesql.resultset.index\"\n                             },\n                             {\n-                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records output by the Record Writer.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61256,269 +63416,239 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"An environment variable name\",\n+                                \"value\": \"An environment variable value\"\n+                            },\n+                            {\n+                                \"description\": \"These arguments are supplied to the process spawned by this Processor when using the Command Arguments Strategy : Dynamic Property Arguments. <commandIndex> is a number and it will determine the order.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"command.argument.<commandIndex>\",\n+                                \"value\": \"Argument to be supplied to the command\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Event Hub Consumer Group\": {\n-                                \"defaultValue\": \"$Default\",\n-                                \"description\": \"The name of the consumer group to use when pulling events\",\n-                                \"displayName\": \"Consumer Group\",\n+                            \"Argument Delimiter\": {\n+                                \"defaultValue\": \";\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Command Arguments Property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n+                                        \"propertyName\": \"argumentsStrategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Delimiter to use to separate arguments for a command [default: ;]. Must be a single character\",\n+                                \"displayName\": \"Argument Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Consumer Group\",\n+                                \"name\": \"Argument Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Message Enqueue Time\": {\n-                                \"description\": \"A timestamp (ISO-8601 Instant) formatted as YYYY-MM-DDThhmmss.sssZ (2016-01-01T01:01:01.000Z) from which messages should have been enqueued in the Event Hub to start reading from\",\n-                                \"displayName\": \"Message Enqueue Time\",\n+                            \"Command Arguments\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Command Arguments Property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n+                                        \"propertyName\": \"argumentsStrategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The arguments to supply to the executable delimited by the ';' character.\",\n+                                \"displayName\": \"Command Arguments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Message Enqueue Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Command Arguments\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Name of Azure Event Hubs source\",\n-                                \"displayName\": \"Event Hub Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"Command Path\": {\n+                                \"description\": \"Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.\",\n+                                \"displayName\": \"Command Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Command Path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Partition Receiver Timeout (millseconds)\": {\n-                                \"description\": \"The amount of time in milliseconds a Partition Receiver should wait to receive the Fetch Size before returning. The default is 60000\",\n-                                \"displayName\": \"Partition Receiver Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Partition Recivier Fetch Size\": {\n-                                \"description\": \"The number of events that a receiver should fetch from an Event Hubs partition before returning. The default is 100\",\n-                                \"displayName\": \"Partition Receiver Fetch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Recivier Fetch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Service Bus Endpoint\": {\n+                            \"Ignore STDIN\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the contents of the incoming flowfile will not be passed to the executing command\",\n+                                \"displayName\": \"Ignore STDIN\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n-                                \"required\": true,\n+                                \"name\": \"Ignore STDIN\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n+                            \"Max Attribute Length\": {\n+                                \"defaultValue\": \"256\",\n+                                \"description\": \"If routing the output of the stream command to an attribute, the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will truncated to fit. Consider making this smaller if able.\",\n+                                \"displayName\": \"Max Attribute Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Name\",\n+                                \"name\": \"Max Attribute Length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Primary Key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n+                            \"Output Destination Attribute\": {\n+                                \"description\": \"If set, the output of the stream command will be put into an attribute of the original FlowFile instead of a separate FlowFile. There will no longer be a relationship for 'output stream' or 'nonzero status'. The value of this property will be the key for the output attribute.\",\n+                                \"displayName\": \"Output Destination Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"Output Destination Attribute\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                            \"Output MIME Type\": {\n+                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Output Destination Attribute' is set.\",\n+                                \"displayName\": \"Output MIME Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"name\": \"Output MIME Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Working Directory\": {\n+                                \"description\": \"The directory to use as the current working directory when executing the command\",\n+                                \"displayName\": \"Working Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Working Directory\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"use-managed-identity\": {\n+                            \"argumentsStrategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Arguments to be supplied to the executable are taken from the Command Arguments property\",\n+                                        \"displayName\": \"Command Arguments Property\",\n+                                        \"value\": \"Command Arguments Property\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Arguments to be supplied to the executable are taken from dynamic properties with pattern of 'command.argument.<commandIndex>'\",\n+                                        \"displayName\": \"Dynamic Property Arguments\",\n+                                        \"value\": \"Dynamic Property Arguments\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"defaultValue\": \"Command Arguments Property\",\n+                                \"description\": \"Strategy for configuring arguments to be supplied to the command.\",\n+                                \"displayName\": \"Command Arguments Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n-                                \"required\": true,\n+                                \"name\": \"argumentsStrategy\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n-                        ],\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully received from the event hub will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is zero.\",\n+                                \"name\": \"output stream\"\n+                            },\n+                            {\n+                                \"description\": \"The destination path for the flow file created from the command's output, if the returned status code is non-zero. All flow files routed to this relationship will be penalized.\",\n+                                \"name\": \"nonzero status\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile will be routed. It will have new attributes detailing the result of the script execution.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"command\",\n+                            \"command execution\",\n+                            \"execute\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.GetAzureEventHub\",\n-                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs without reliable checkpoint tracking. In clustered environment, GetAzureEventHub processor instances work independently and all cluster nodes process all messages (unless running the processor in Primary Only mode). ConsumeAzureEventHub offers the recommended approach to receiving messages from Azure Event Hubs. This processor creates a thread pool for connections to Azure Event Hubs.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteStreamCommand\",\n+                        \"typeDescription\": \"The ExecuteStreamCommand processor provides a flexible way to integrate external commands and scripts into NiFi data flows. ExecuteStreamCommand can pass the incoming FlowFile's content to the command that it executes similarly how piping works.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n-                                \"name\": \"eventhub.enqueued.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The offset into the partition at which the message was stored\",\n-                                \"name\": \"eventhub.offset\"\n+                                \"description\": \"The name of the command executed\",\n+                                \"name\": \"execution.command\"\n                             },\n                             {\n-                                \"description\": \"The Azure sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n+                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n+                                \"name\": \"execution.command.args\"\n                             },\n                             {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n+                                \"description\": \"The exit status code returned from executing the command\",\n+                                \"name\": \"execution.status\"\n                             },\n                             {\n-                                \"description\": \"The name of the event hub partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\n+                                \"description\": \"Any error messages returned from executing the command\",\n+                                \"name\": \"execution.error\"\n                             },\n                             {\n-                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\n+                                \"description\": \"Sets the MIME type of the output if the 'Output MIME Type' property is set and 'Output Destination Attribute' is not set\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61526,230 +63656,190 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Patterns can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Name of Azure Event Hubs destination\",\n-                                \"displayName\": \"Event Hub Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n-                                \"displayName\": \"Event Hub Namespace\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \".servicebus.windows.net\",\n-                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n-                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"defaultValue\": \"flowfile-attribute\",\n+                                \"description\": \"Control if Grok output value is written as a new flowfile attributes, in this case each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" or written in the flowfile content. Writing to flowfile content will overwrite any existing flowfile content.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Send claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n+                            \"Grok Expression\": {\n+                                \"description\": \"Grok expression. If other Grok expressions are referenced in this expression, they must be provided in the Grok Pattern File if set or exist in the default Grok patterns\",\n+                                \"displayName\": \"Grok Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Name\",\n-                                \"required\": false,\n+                                \"name\": \"Grok Expression\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Primary Key\": {\n-                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n-                                \"displayName\": \"Shared Access Policy Key\",\n+                            \"Grok Pattern file\": {\n+                                \"description\": \"Custom Grok pattern definitions. These definitions will be loaded after the default Grok patterns. The Grok Parser will use the default Grok patterns when this property is not configured.\",\n+                                \"displayName\": \"Grok Patterns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"Grok Pattern file\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n+                            \"Keep Empty Captures\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then empty capture values will be included in the returned capture map.\",\n+                                \"displayName\": \"Keep Empty Captures\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"name\": \"Keep Empty Captures\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n-                                \"displayName\": \"Maximum Batch Size\",\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the Grok expressions. Files larger than the specified maximum will not be fully evaluated.\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-batch-size\",\n+                                \"name\": \"Maximum Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioning-key-attribute-name\": {\n-                                \"description\": \"If specified, the value from argument named by this field will be used as a partitioning key to be used by event hub.\",\n-                                \"displayName\": \"Partitioning Key Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioning-key-attribute-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"use-managed-identity\": {\n+                            \"Named captures only\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"description\": \"Only store named captures from grok\",\n+                                \"displayName\": \"Named captures only\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\n+                                \"name\": \"Named captures only\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that could not be sent to the event hub will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this relationship when no provided Grok Expression matches the content of the FlowFile\",\n+                                \"name\": \"unmatched\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that is successfully sent to the event hubs will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the Grok Expression is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Processor buffers FlowFile contents in memory before sending\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"delimit\",\n+                            \"extract\",\n+                            \"grok\",\n+                            \"log\",\n+                            \"parse\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.eventhub.PutAzureEventHub\",\n-                        \"typeDescription\": \"Send FlowFile contents to Azure Event Hubs\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractGrok\",\n+                        \"typeDescription\": \"Evaluates one or more Grok Expressions against the content of a FlowFile, adding the results as attributes or replacing the content of the FlowFile with a JSON notation of the matched content\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n+                                \"name\": \"grok.XXX\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61762,243 +63852,93 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Source Blob Name\": {\n-                                \"description\": \"The full name of the source blob\",\n-                                \"displayName\": \"Source Blob Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Source Blob Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Source Container Name\": {\n-                                \"description\": \"Name of the Azure storage container that will be copied\",\n-                                \"displayName\": \"Source Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Source Container Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Source Storage Credentials\": {\n-                                \"description\": \"Credentials Service used to obtain Azure Blob Storage Credentials to read Source Blob information\",\n-                                \"displayName\": \"Source Storage Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Source Storage Credentials\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"blob-name\": {\n-                                \"description\": \"The full name of the destination blob defaults to the Source Blob Name when not specified\",\n-                                \"displayName\": \"Destination Blob Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"conflict-resolution-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"IGNORE_RESOLUTION\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FAIL_RESOLUTION\",\n-                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specifies the number of schemas to cache. This value should reflect the expected number of different schemas that may be in the incoming FlowFiles. This ensures more efficient retrieval of the schemas and thus the processor performance.\",\n+                                \"displayName\": \"Schema Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container destination defaults to the Source Container Name when not specified\",\n-                                \"displayName\": \"Destination Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"create-container\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n-                                \"displayName\": \"Create Container\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-container\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Destination Storage Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile's record schema cannot be extracted from the configured input format, the FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"xml\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Copies a blob in Azure Blob Storage from one account/container to another. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractRecordSchema\",\n+                        \"typeDescription\": \"Extracts the record schema from the FlowFile using the supplied Record Reader and writes it to the `avro.schema` attribute.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n-                            },\n-                            {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n-                            },\n-                            {\n-                                \"description\": \"Error code reported during blob operation\",\n-                                \"name\": \"azure.error.code\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n+                                \"name\": \"record.error.message\"\n                             },\n                             {\n-                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n-                                \"name\": \"azure.ignored\"\n+                                \"description\": \"This attribute provides the schema extracted from the input FlowFile using the provided RecordReader.\",\n+                                \"name\": \"avro.schema\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62006,145 +63946,374 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A FlowFile attribute\",\n+                                \"value\": \"A Regular Expression with one or more capturing group\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"defaultValue\": \"${azure.container}\",\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"Enable Canonical Equivalence\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n+                                \"displayName\": \"Enable Canonical Equivalence\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Canonical Equivalence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-snapshots-option\": {\n+                            \"Enable Case-insensitive Matching\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete the blob only.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete the blob and its snapshots.\",\n-                                        \"displayName\": \"Include Snapshots\",\n-                                        \"value\": \"INCLUDE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n+                                \"displayName\": \"Enable Case-insensitive Matching\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Case-insensitive Matching\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable DOTALL Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete only the blob's snapshots.\",\n-                                        \"displayName\": \"Delete Snapshots Only\",\n-                                        \"value\": \"ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n-                                \"displayName\": \"Delete Snapshots Option\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that the expression '.' should match any character, including a line terminator.  Can also be specified via the embedded flag (?s).\",\n+                                \"displayName\": \"Enable DOTALL Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-snapshots-option\",\n+                                \"name\": \"Enable DOTALL Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Enable Literal Parsing of the Pattern\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n+                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Enable Literal Parsing of the Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Multiline Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that '^' and '$' should match just after and just before a line terminator or end of sequence, instead of only the beginning or end of the entire input.  Can also be specified via the embeded flag (?m).\",\n+                                \"displayName\": \"Enable Multiline Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Multiline Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Unicode Predefined Character Classes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies conformance with the Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.  Can also be specified via the embedded flag (?U).\",\n+                                \"displayName\": \"Enable Unicode Predefined Character Classes\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Unicode Predefined Character Classes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Unicode-aware Case Folding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n+                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Unicode-aware Case Folding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Unix Lines Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that only the '\\n' line terminator is recognized in the behavior of '.', '^', and '$'.  Can also be specified via the embedded flag (?d).\",\n+                                \"displayName\": \"Enable Unix Lines Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Unix Lines Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable named group support\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, when named groups are present in the regular expression, the name of the\\ngroup will be used in the attribute name as opposed to the group index.  All capturing groups\\nmust be named, if the number of groups (not including capture group 0) does not equal the\\nnumber of named groups validation will fail.\",\n+                                \"displayName\": \"Enable named group support\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable named group support\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"Enable repeating capture group\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, every string matching the capture groups will be extracted. Otherwise, if the Regular Expression matches more than once, only the first match will be extracted.\",\n+                                \"displayName\": \"Enable repeating capture group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"Enable repeating capture group\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"Include Capture Group 0\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates that Capture Group 0 should be included as an attribute. Capture Group 0 represents the entirety of the regular expression match, is typically not used, and could have considerable length.\",\n+                                \"displayName\": \"Include Capture Group 0\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Include Capture Group 0\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per FlowFile) in order to apply the regular expressions. FlowFiles larger than the specified maximum will not be fully evaluated.\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Capture Group Length\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Specifies the maximum number of characters a given capture group value can have. Any characters beyond the max will be truncated.\",\n+                                \"displayName\": \"Maximum Capture Group Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Capture Group Length\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Permit Whitespace and Comments in Pattern\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"In this mode, whitespace is ignored, and embedded comments starting with # are ignored until the end of a line.  Can also be specified via the embedded flag (?x).\",\n+                                \"displayName\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n+                                \"name\": \"unmatched\"\n                             },\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship when the Regular Expression is successfully evaluated and the FlowFile is modified as a result\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"Regular Expression\",\n+                            \"Text\",\n+                            \"evaluate\",\n+                            \"extract\",\n+                            \"regex\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Deletes the specified blob from Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ExtractText\",\n+                        \"typeDescription\": \"Evaluates one or more Regular Expressions against the content of a FlowFile.  The results of those Regular Expressions are assigned to FlowFile Attributes.  Regular Expressions are entered by adding user-defined properties; the name of the property maps to the Attribute Name into which the result will be placed.  The attributes are generated differently based on the enabling of named capture groups.  If named capture groups are not enabled:  The first capture group, if any found, will be placed into that attribute name.But all capture groups, including the matching string sequence itself will also be provided at that attribute name with an index value provided, with the exception of a capturing group that is optional and does not match - for example, given the attribute name \\\"regex\\\" and expression \\\"abc(def)?(g)\\\" we would add an attribute \\\"regex.1\\\" with a value of \\\"def\\\" if the \\\"def\\\" matched. If the \\\"def\\\" did not match, no attribute named \\\"regex.1\\\" would be added but an attribute named \\\"regex.2\\\" with a value of \\\"g\\\" will be added regardless.If named capture groups are enabled:  Each named capture group, if found will be placed into the attributes name with the name provided.  If enabled the matching string sequence itself will be placed into the attribute name.  If multiple matches are enabled, and index will be applied after the first set of matches. The exception is a capturing group that is optional and does not match  For example, given the attribute name \\\"regex\\\" and expression \\\"abc(?<NAMED>def)?(?<NAMED-TWO>g)\\\"  we would add an attribute \\\"regex.NAMED\\\" with the value of \\\"def\\\" if the \\\"def\\\" matched.  We would   add an attribute \\\"regex.NAMED-TWO\\\" with the value of \\\"g\\\" if the \\\"g\\\" matched regardless.  The value of the property must be a valid Regular Expressions with one or more capturing groups. If named capture groups are enabled, all capture groups must be named.  If they are not, then the  processor configuration will fail validation.  If the Regular Expression matches more than once, only the first match will be used unless the property enabling repeating capture group is set to true. If any provided Regular Expression matches, the FlowFile(s) will be routed to 'matched'. If no provided Regular Expression matches, the FlowFile will be routed to 'unmatched' and no attributes will be applied to the FlowFile.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62157,153 +64326,125 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"file\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Filesystem Object Type\",\n-                                        \"propertyName\": \"filesystem-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A comma-delimited list of FlowFile attributes, or the results of Attribute Expression Language statements, which will be evaluated against a FlowFile in order to determine the value(s) used to identify duplicates; it is these values that are cached. NOTE: Only a single Cache Entry Identifier is allowed unless Put Cache Value In Attribute is specified. Multiple cache lookups are only supported when the destination is a set of attributes (see the documentation for 'Put Cache Value In Attribute' for more details including naming convention.\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-object-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The object to be deleted is a file.\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"file\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The object to be deleted is a directory.\",\n-                                        \"displayName\": \"Directory\",\n-                                        \"value\": \"directory\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"file\",\n-                                \"description\": \"They type of the file system object to be deleted. It can be either folder or file.\",\n-                                \"displayName\": \"Filesystem Object Type\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the cached value is encoded. This will only be used when routing to an attribute.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filesystem-object-type\",\n-                                \"required\": true,\n+                                \"name\": \"Character Set\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"Max Length To Put In Attribute\": {\n+                                \"defaultValue\": \"256\",\n+                                \"description\": \"If routing the cache value to an attribute of the FlowFile (by setting the \\\"Put Cache Value in attribute\\\" property), the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will be truncated to fit. Consider making this smaller if able.\",\n+                                \"displayName\": \"Max Length To Put In Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Length To Put In Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Put Cache Value In Attribute\": {\n+                                \"description\": \"If set, the cache value received will be put into an attribute of the FlowFile instead of a the content of theFlowFile. The attribute key to put to is determined by evaluating value of this property. If multiple Cache Entry Identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier.\",\n+                                \"displayName\": \"Put Cache Value In Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Put Cache Value In Attribute\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.PutDistributedMapCache\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n+                                \"description\": \"If the cache was successfully communicated with it will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If unable to communicate with the cache or if the cache entry is evaluated to be blank, the FlowFile will be penalized and routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile's Cache Entry Identifier was not found in the cache, it will be routed to this relationship\",\n+                                \"name\": \"not-found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"fetch\",\n+                            \"map\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Deletes the provided file from Azure Data Lake Storage\",\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchDistributedMapCache\",\n+                        \"typeDescription\": \"Computes cache key(s) from FlowFile attributes, for each incoming FlowFile, and fetches the value(s) from the Distributed Map Cache associated with each key. If configured without a destination attribute, the incoming FlowFile's content is replaced with the binary data received by the Distributed Map Cache. If there is no value stored under that key then the flow file will be routed to 'not-found'. Note that the processor will always attempt to read the entire cached value into memory before placing it in it's destination. This could be potentially problematic if the cached value is very large.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the 'Put Cache Value In Attribute' property is set then whatever it is set to will become the attribute key and the value would be whatever the response was from the Distributed Map Cache. If multiple cache entry identifiers are selected, multiple attributes will be written, using the evaluated value of this property, appended by a period (.) and the name of the cache entry identifier. For example, if the Cache Entry Identifier property is set to 'id,name', and the user-defined property is named 'fetched', then two attributes will be written, fetched.id and fetched.name, containing their respective values.\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62317,254 +64458,489 @@\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [\n                             {\n                                 \"configurations\": [\n                                     {\n-                                        \"configuration\": \"The \\\"Container Name\\\" property should be set to the name of the Blob Storage Container that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_CONTAINER}`.\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureBlobStorage_v12.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{FTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{FTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchFTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFTP\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Container Name\\\" = \\\"${azure.container}\\\"\\n\\\"Blob Name\\\" = \\\"${azure.blobname}\\\"\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${ftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${ftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{FTP_PASSWORD}\\\"\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFTP\"\n                                     }\n                                 ],\n-                                \"description\": \"Retrieve all files in an Azure Blob Storage container\",\n+                                \"description\": \"Retrieve all files in a directory of an FTP Server\",\n                                 \"keywords\": [\n-                                    \"azure\",\n-                                    \"blob\",\n-                                    \"storage\",\n+                                    \"ftp\",\n+                                    \"file\",\n+                                    \"transform\",\n                                     \"state\",\n                                     \"retrieve\",\n                                     \"fetch\",\n                                     \"all\",\n                                     \"stream\"\n                                 ],\n                                 \"notes\": \"\"\n                             }\n                         ],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Client-Side Encryption Key ID\": {\n-                                \"dependencies\": [\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the original file from the remote system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n-                                \"dependencies\": [\n+                            \"Create Directory\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"name\": \"Create Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"defaultValue\": \"${azure.container}\",\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"Move Destination Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"Remote File\": {\n+                                \"description\": \"The fully qualified filename on the remote system\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n+                                \"name\": \"Remote File\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transfer Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n-                                \"required\": false,\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"fetchfiletransfer-notfound-loglevel\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ftp-use-utf8\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"ftp\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Retrieves the specified blob from Azure Blob Storage and writes its content to the content of the FlowFile. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchFTP\",\n+                        \"typeDescription\": \"Fetches the content of a file from a remote FTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"ftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n+                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n+                                \"name\": \"ftp.remote.port\"\n                             },\n                             {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"ftp.remote.filename\"\n                             },\n                             {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n+                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n+                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n+                                \"name\": \"fetch.failure.reason\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62572,865 +64948,883 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [\n                             {\n                                 \"configurations\": [\n                                     {\n-                                        \"configuration\": \"The \\\"Filesystem Name\\\" property should be set to the name of the Azure Filesystem (also known as a Container) that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_FILESYSTEM}`.\\nConfigure the \\\"Directory Name\\\" property to specify the name of the directory in the file system.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_DIRECTORY}`.\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureDataLakeStorage.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n+                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Filesystem Name\\\" = \\\"${azure.filesystem}\\\"\\n\\\"Directory Name\\\" = \\\"${azure.directory}\\\"\\n\\\"File Name\\\" = \\\"${azure.filename}\\\"\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n                                     }\n                                 ],\n-                                \"description\": \"Retrieve all files in an Azure DataLake Storage directory\",\n+                                \"description\": \"Ingest all files from a directory into NiFi\",\n                                 \"keywords\": [\n-                                    \"azure\",\n-                                    \"datalake\",\n-                                    \"adls\",\n-                                    \"state\",\n-                                    \"retrieve\",\n+                                    \"local\",\n+                                    \"files\",\n+                                    \"filesystem\",\n+                                    \"ingest\",\n+                                    \"ingress\",\n+                                    \"get\",\n+                                    \"source\",\n+                                    \"input\",\n+                                    \"fetch\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nSet the \\\"File Filter\\\" property to a Regular Expression that matches the filename (without path) of the files that you want to ingest. For example, to ingest all .jpg files, set the value to `.*\\\\.jpg`\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n+                                    }\n+                                ],\n+                                \"description\": \"Ingest specific files from a directory into NiFi, filtering on filename\",\n+                                \"keywords\": [\n+                                    \"local\",\n+                                    \"files\",\n+                                    \"filesystem\",\n+                                    \"ingest\",\n+                                    \"ingress\",\n+                                    \"get\",\n+                                    \"source\",\n+                                    \"input\",\n                                     \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n+                                    \"filter\"\n                                 ],\n                                 \"notes\": \"\"\n                             }\n                         ],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Moves the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the original file from the file system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the file system once it has been pulled into NiFi\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"File to Fetch\": {\n+                                \"defaultValue\": \"${absolute.path}/${filename}\",\n+                                \"description\": \"The fully-qualified filename of the file to fetch from the file system\",\n+                                \"displayName\": \"File to Fetch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"File to Fetch\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"Log level when file not found\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log level when file not found\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"number-of-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"Log level when permission denied\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case user aman does not have sufficient permissions to read the file\",\n+                                \"displayName\": \"Log level when permission denied\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"number-of-retries\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log level when permission denied\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Move Conflict Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The existing destination file should remain intact. The newly ingested file should be moved to the destination directory but be renamed to a random filename\",\n+                                        \"displayName\": \"Rename\",\n+                                        \"value\": \"Rename\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The newly ingested file should replace the existing file in the Destination Directory\",\n+                                        \"displayName\": \"Replace File\",\n+                                        \"value\": \"Replace File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The existing file should in the Destination Directory should stay intact and the newly ingested file should be deleted\",\n+                                        \"displayName\": \"Keep Existing\",\n+                                        \"value\": \"Keep Existing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The existing destination file should remain intact and the incoming FlowFile should be routed to failure\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Rename\",\n+                                \"description\": \"If Completion Strategy is set to Move File and a file already exists in the destination directory with the same name, this property specifies how that naming conflict should be resolved\",\n+                                \"displayName\": \"Move Conflict Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n-                                \"displayName\": \"Range Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n-                                \"required\": false,\n+                                \"name\": \"Move Conflict Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory to the move the original file to once it has been fetched from the file system. This property is ignored unless the Completion Strategy is set to \\\"Move File\\\". If the directory does not exist, it will be created.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n+                                \"name\": \"Move Destination Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n+                            \"org.apache.nifi.processors.standard.GetFile\",\n+                            \"org.apache.nifi.processors.standard.ListFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Any FlowFile that is successfully fetched from the file system will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system because the file could not be found will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"ingress\",\n+                            \"input\",\n+                            \"local\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Fetch the specified file from Azure Data Lake Storage\",\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchFile\",\n+                        \"typeDescription\": \"Reads the contents of a file from disk and streams it into the contents of an incoming FlowFile. Once this is done, the file is optionally moved elsewhere or deleted to help keep the file system organized.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"azure.datalake.storage.statusCode\"\n-                            },\n-                            {\n-                                \"description\": \"The Azure Data Lake Storage moniker of the failed operation\",\n-                                \"name\": \"azure.datalake.storage.errorCode\"\n-                            },\n-                            {\n-                                \"description\": \"The Azure Data Lake Storage error message from the failed operation\",\n-                                \"name\": \"azure.datalake.storage.errorMessage\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{SFTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{SFTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchSFTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListSFTP\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${sftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${sftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{SFTP_PASSWORD}\\\"\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchSFTP\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in a directory of an SFTP Server\",\n+                                \"keywords\": [\n+                                    \"sftp\",\n+                                    \"secure\",\n+                                    \"file\",\n+                                    \"transform\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the original file from the remote system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"blob-name-prefix\": {\n-                                \"description\": \"Search prefix for listing\",\n-                                \"displayName\": \"Blob Name Prefix\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"blob-name-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Create Directory\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Used when 'Completion Strategy' is 'Move File'. Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"Create Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Disable Directory Listing\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Control how 'Move Destination Directory' is created when 'Completion Strategy' is 'Move File' and 'Create Directory' is enabled. If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n+                                \"displayName\": \"Disable Directory Listing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Disable Directory Listing\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Host Key File\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored if 'Tracking Timestamps' Listing Strategy is in use (by default). This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n-                            },\n-                            {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"Maximum File Age\": {\n-                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Age\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Algorithms Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Move Destination Directory\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-filter\": {\n-                                \"description\": \"Only files whose names match the given regular expression will be listed\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"file-filter\",\n+                                \"name\": \"Proxy Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote File\": {\n+                                \"description\": \"The fully qualified filename on the remote system\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"Remote File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-temporary-files\": {\n+                            \"Send Keep Alive On Timeout\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to include temporary files when listing the contents of configured directory paths.\",\n-                                \"displayName\": \"Include Temporary Files\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-temporary-files\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Strict Host Key Checking\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"Strict Host Key Checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"path-filter\": {\n-                                \"description\": \"When 'Recurse Subdirectories' is true, then only subdirectories whose paths match the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"path-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"recurse-subdirectories\": {\n+                            \"fetchfiletransfer-notfound-loglevel\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INFO\",\n+                                        \"value\": \"INFO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WARN\",\n+                                        \"value\": \"WARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ERROR\",\n+                                        \"value\": \"ERROR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FATAL\",\n+                                        \"value\": \"FATAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"ERROR\",\n+                                \"description\": \"Log level to use in case the file does not exist when the processor is triggered\",\n+                                \"displayName\": \"Log level when file not found\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recurse-subdirectories\",\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n+                        \"type\": \"org.apache.nifi.processors.standard.FetchSFTP\",\n+                        \"typeDescription\": \"Fetches the content of a file from a remote SFTP server and overwrites the contents of an incoming FlowFile with the content of the remote file.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The full path of the Azure File\",\n-                                \"name\": \"azure.filePath\"\n+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n+                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n+                                \"name\": \"sftp.remote.port\"\n                             },\n                             {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"sftp.remote.filename\"\n                             },\n                             {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The last modification time of the Azure File\",\n-                                \"name\": \"azure.lastModified\"\n+                                \"description\": \"If the Remote File contains a directory name, that directory name will be added to the FlowFile using the 'path' attribute\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The ETag of the Azure File\",\n-                                \"name\": \"azure.etag\"\n+                                \"description\": \"The name of the failure relationship applied when routing to any failure relationship\",\n+                                \"name\": \"fetch.failure.reason\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63443,201 +65837,149 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Attribute Matching Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provides a set of attribute keys to filter for, separated by a comma delimiter ','.\",\n+                                        \"displayName\": \"Enumerate attributes\",\n+                                        \"value\": \"Enumerate attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides a regular expression to match keys of attributes to filter for.\",\n+                                        \"displayName\": \"Use regular expression\",\n+                                        \"value\": \"Use regular expression\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Enumerate attributes\",\n+                                \"description\": \"Specifies the strategy to filter attributes by.\",\n+                                \"displayName\": \"Attribute Matching Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"Attribute Matching Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"Filter Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n+                                        \"displayName\": \"Retain\",\n+                                        \"value\": \"Retain\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"Remove\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"Retain\",\n+                                \"description\": \"Specifies the strategy to apply on filtered attributes. Either 'Remove' or 'Retain' only the matching attributes.\",\n+                                \"displayName\": \"Filter Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory where the files will be moved. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created. If the original directory structure should be kept, the full directory path needs to be provided after the destination directory. e.g.: destdir/${azure.directory}\",\n-                                \"displayName\": \"Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System where the files will be moved.\",\n-                                \"displayName\": \"Destination Filesystem\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"Filter Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"source-directory-name\": {\n-                                \"defaultValue\": \"${azure.directory}\",\n-                                \"description\": \"Name of the Azure Storage Directory from where the move should happen. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value.\",\n-                                \"displayName\": \"Source Directory\",\n+                            \"Filtered Attributes\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Enumerate attributes\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n+                                        \"propertyName\": \"Attribute Matching Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A set of attribute names to filter from FlowFiles. Each attribute name is separated by the comma delimiter ','.\",\n+                                \"displayName\": \"Filtered Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"source-directory-name\",\n+                                \"name\": \"Filtered Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"source-filesystem-name\": {\n-                                \"defaultValue\": \"${azure.filesystem}\",\n-                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n-                                \"displayName\": \"Source Filesystem\",\n+                            \"Filtered Attributes Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use regular expression\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n+                                        \"propertyName\": \"Attribute Matching Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A regular expression to match names of attributes to filter from FlowFiles.\",\n+                                \"displayName\": \"Filtered Attributes Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"source-filesystem-name\",\n+                                \"name\": \"Filtered Attributes Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"delete\",\n+                            \"filter\",\n+                            \"modification\",\n+                            \"regex\",\n+                            \"regular expression\",\n+                            \"remove\",\n+                            \"retain\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.MoveAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Moves content within an Azure Data Lake Storage Gen 2. After the move, files will be no longer available on source location.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the source Azure File System\",\n-                                \"name\": \"azure.source.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the source Azure Directory\",\n-                                \"name\": \"azure.source.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n-                            },\n+                        \"type\": \"org.apache.nifi.processors.standard.FilterAttribute\",\n+                        \"typeDescription\": \"Filters the attributes of a FlowFile by retaining specified attributes and removing the rest or by removing specified attributes and retaining the rest.\",\n+                        \"useCases\": [\n                             {\n-                                \"description\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\n+                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Retain\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Use regular expression\\\".\\nSpecify the \\\"Filtered Attributes Pattern\\\", e.g. \\\"my-property|a-prefix[.].*\\\".\\n\",\n+                                \"description\": \"Retain all FlowFile attributes matching a regular expression\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n+                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Remove\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Enumerate attributes\\\".\\nSpecify the set of \\\"Filtered Attributes\\\" using the delimiter comma ',', e.g. \\\"my-property,other,filename\\\".\\n\",\n+                                \"description\": \"Remove only a specified set of FlowFile attributes\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n                             }\n-                        ]\n+                        ],\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63650,316 +65992,242 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Client-Side Encryption Key ID\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                            \"flatten-json-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"flatten-json-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"flatten-json-pretty-print-json\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n+                                \"displayName\": \"Pretty Print JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"flatten-json-pretty-print-json\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Local Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"File Resource Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Resource Transfer Source\": {\n+                            \"flatten-json-return-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"FLOWFILE_CONTENT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flatten\",\n+                                        \"value\": \"flatten\"\n                                     },\n                                     {\n-                                        \"description\": \"The File Resource Service provides the source for transfer\",\n-                                        \"displayName\": \"File Resource Service\",\n-                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"unflatten\",\n+                                        \"value\": \"unflatten\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\n+                                \"defaultValue\": \"flatten\",\n+                                \"description\": \"Specifies the desired return type of json such as flatten/unflatten\",\n+                                \"displayName\": \"Return Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resource Transfer Source\",\n+                                \"name\": \"flatten-json-return-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"blob-name\": {\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"flatten-json-separator\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n+                                \"displayName\": \"Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"name\": \"flatten-json-separator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"flatten-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\n+                                        \"description\": \"Flattens every objects into a single level json\",\n+                                        \"displayName\": \"normal\",\n+                                        \"value\": \"normal\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"IGNORE_RESOLUTION\"\n+                                        \"description\": \"Flattens every objects and keep arrays format\",\n+                                        \"displayName\": \"keep arrays\",\n+                                        \"value\": \"keep arrays\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\n+                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n+                                        \"displayName\": \"dot notation\",\n+                                        \"value\": \"dot notation\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flattens every objects except arrays which contain only primitive types (strings, numbers, booleans and null)\",\n+                                        \"displayName\": \"keep primitive arrays\",\n+                                        \"value\": \"keep primitive arrays\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FAIL_RESOLUTION\",\n-                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"keep arrays\",\n+                                \"description\": \"Specifies how json should be flattened/unflattened\",\n+                                \"displayName\": \"Flatten Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"flatten-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-container\": {\n+                            \"ignore-reserved-characters\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n-                                \"displayName\": \"Create Container\",\n+                                \"description\": \"If true, reserved characters in keys will be ignored\",\n+                                \"displayName\": \"Ignore Reserved Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-container\",\n+                                \"name\": \"ignore-reserved-characters\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Files that cannot be flattened/unflattened go to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"flatten\",\n+                            \"json\",\n+                            \"unflatten\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Puts content into a blob on Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.FlattenJson\",\n+                        \"typeDescription\": \"Provides the user with the ability to take a nested JSON document and flatten it into a simple key/value pair document. The keys are combined at each level with a user-defined separator that defaults to '.'. This Processor also allows to unflatten back the flattened json. It supports four kinds of flatten mode such as normal, keep-arrays, dot notation for MongoDB query and keep-primitive-arrays. Default flatten mode is 'keep-arrays'.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n+                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"name\": \"enrichment\"\n                             },\n                             {\n-                                \"description\": \"The name of the blob on Azure Blob Storage\",\n-                                \"name\": \"azure.blobname\"\n-                            },\n-                            {\n-                                \"description\": \"Primary location of the blob\",\n-                                \"name\": \"azure.primaryUri\"\n-                            },\n-                            {\n-                                \"description\": \"ETag of the blob\",\n-                                \"name\": \"azure.etag\"\n-                            },\n-                            {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n-                            },\n-                            {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n-                            },\n+                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"enrich\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"record\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ForkEnrichment\",\n+                        \"typeDescription\": \"Used in conjunction with the JoinEnrichment processor, this processor is responsible for adding the attributes that are necessary for the JoinEnrichment processor to perform its function. Each incoming FlowFile will be cloned. The original FlowFile will have appropriate attributes added and then be transferred to the 'original' relationship. The clone will have appropriate attributes added and then be routed to the 'enrichment' relationship. See the documentation for the JoinEnrichment processor (and especially its Additional Details) for more information on how these Processors work together and how to perform enrichment tasks in NiFi by using these Processors.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"Error code reported during blob operation\",\n-                                \"name\": \"azure.error.code\"\n+                                \"description\": \"The Group ID to use in order to correlate the 'original' FlowFile with the 'enrichment' FlowFile.\",\n+                                \"name\": \"enrichment.group.id\"\n                             },\n                             {\n-                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n-                                \"name\": \"azure.ignored\"\n+                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n+                                \"name\": \"enrichment.role\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63967,456 +66235,328 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A Record Path value, pointing to a field of type ARRAY containing RECORD objects\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Record Path property\",\n+                                \"value\": \"The Record Path value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Resource Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Resource Transfer Source\": {\n+                            \"fork-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"FLOWFILE_CONTENT\"\n+                                        \"description\": \"Generated records will be the elements of the array\",\n+                                        \"displayName\": \"Extract\",\n+                                        \"value\": \"extract\"\n                                     },\n                                     {\n-                                        \"description\": \"The File Resource Service provides the source for transfer\",\n-                                        \"displayName\": \"File Resource Service\",\n-                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n+                                        \"description\": \"Generated records will preserve the input schema and will contain a one-element array\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"split\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resource Transfer Source\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                                \"defaultValue\": \"split\",\n+                                \"description\": \"Specifies the forking mode of the processor\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"fork-mode\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"base-temporary-path\": {\n-                                \"defaultValue\": \"\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"WRITE_AND_RENAME\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Writing Strategy\",\n-                                        \"propertyName\": \"writing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n-                                \"displayName\": \"Base Temporary Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"base-temporary-path\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"include-parent-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"This parameter is only valid with the 'extract' mode. If set to true, all the fields from the root level to the given array will be added as fields of each element of the array to fork.\",\n+                                \"displayName\": \"Include Parent Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"directory-name\": {\n-                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n-                                \"displayName\": \"Directory Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"filesystem-name\": {\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"include-parent-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"writing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The processor writes the Azure file into a temporary directory and then renames/moves it to the final destination. This prevents other processes from reading partially written files.\",\n-                                        \"displayName\": \"Write and Rename\",\n-                                        \"value\": \"WRITE_AND_RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The processor writes the Azure file directly to the destination. This might result in the reading of partially written files.\",\n-                                        \"displayName\": \"Simple Write\",\n-                                        \"value\": \"SIMPLE_WRITE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"WRITE_AND_RENAME\",\n-                                \"description\": \"Defines the approach for writing the Azure file.\",\n-                                \"displayName\": \"Writing Strategy\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"writing-strategy\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n+                                \"description\": \"In case a FlowFile generates an error during the fork operation, it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n+                                \"name\": \"fork\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"array\",\n+                            \"content\",\n+                            \"event\",\n+                            \"fork\",\n+                            \"record\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as a file on Azure Data Lake Storage Gen 2\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ForkRecord\",\n+                        \"typeDescription\": \"This processor allows the user to fork a record into multiple records. The user must specify at least one Record Path, as a dynamic property, pointing to a field of type ARRAY containing RECORD objects. The processor accepts two modes: 'split' and 'extract'. In both modes, there is one record generated per element contained in the designated array. In the 'split' mode, each generated record will preserve the same schema as given in the input but the array will contain only one element. In the 'extract' mode, the element of the array must be of record type and will be the generated record. Additionally, in the 'extract' mode, it is possible to specify if each generated record should contain all the fields of the parent records from the root level to the extracted record. This assumes that the fields to add in the record are defined in the schema of the Record Writer controller service. See examples in the additional details documentation of this processor.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the Azure File System\",\n-                                \"name\": \"azure.filesystem\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the Azure File\",\n-                                \"name\": \"azure.filename\"\n+                                \"description\": \"The generated FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\n+                                \"description\": \"The MIME Type indicated by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n+                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n+                                \"name\": \"<Attributes from Record Writer>\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies an attribute on generated FlowFiles defined by the Dynamic Property's key and value. If Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"Generated FlowFile attribute name\",\n+                                \"value\": \"Generated FlowFile attribute value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Auto Delete Messages\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of FlowFiles to be transferred in each invocation\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Format\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n-                                \"displayName\": \"Auto Delete Messages\",\n+                                \"defaultValue\": \"Text\",\n+                                \"description\": \"Specifies whether the data should be Text or Binary\",\n+                                \"displayName\": \"Data Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Auto Delete Messages\",\n+                                \"name\": \"Data Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Credentials Service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n-                                \"displayName\": \"Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Message Batch Size\": {\n-                                \"defaultValue\": \"32\",\n-                                \"description\": \"The number of messages to be retrieved from the queue.\",\n-                                \"displayName\": \"Message Batch Size\",\n+                            \"File Size\": {\n+                                \"defaultValue\": \"0B\",\n+                                \"description\": \"The size of the file that will be used\",\n+                                \"displayName\": \"File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n+                                \"name\": \"File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n-                                \"displayName\": \"Request Timeout\",\n+                            \"Unique FlowFiles\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, each FlowFile that is generated will be unique. If false, a random value will be generated and all FlowFiles will get the same content but this offers much higher throughput\",\n+                                \"displayName\": \"Unique FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Timeout\",\n+                                \"name\": \"Unique FlowFiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set to use when writing the bytes of Custom Text to a flow file.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n+                                \"name\": \"character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"generate-ff-custom-text\": {\n+                                \"description\": \"If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored. Finally, if Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles\",\n+                                \"displayName\": \"Custom Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"generate-ff-custom-text\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"queue.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"mime-type\": {\n+                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute.\",\n+                                \"displayName\": \"Mime Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\n+                                \"name\": \"mime-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"dequeue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"generate\",\n+                            \"load\",\n+                            \"random\",\n+                            \"test\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\",\n-                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateFlowFile\",\n+                        \"typeDescription\": \"This processor creates FlowFiles with random data or custom content. GenerateFlowFile is useful for load testing, configuration, and simulation. Also see DuplicateFlowFile for additional load testing.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n-                                \"name\": \"azure.queue.uri\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message was inserted into the queue storage\",\n-                                \"name\": \"azure.queue.insertionTime\"\n-                            },\n-                            {\n-                                \"description\": \"The time when the message will expire from the queue storage\",\n-                                \"name\": \"azure.queue.expirationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the retrieved message\",\n-                                \"name\": \"azure.queue.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"The pop receipt of the retrieved message\",\n-                                \"name\": \"azure.queue.popReceipt\"\n+                                \"description\": \"Sets the MIME type of the output if the 'Mime Type' property is set\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -64424,1110 +66564,856 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Custom properties define the generated record schema using configured field names and value data types in absence of the Schema Text property\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Field name in generated record\",\n+                                \"value\": \"Faker category for generated record values\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Credentials Service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n-                                \"displayName\": \"Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Message Time To Live\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"Maximum time to allow the message to be in the queue\",\n-                                \"displayName\": \"Message Time To Live\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Time To Live\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"null-percentage\": {\n+                                \"defaultValue\": \"0\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Nullable Fields\",\n+                                        \"propertyName\": \"nullable-fields\"\n+                                    }\n+                                ],\n+                                \"description\": \"The percent probability (0-100%) that a generated value for any nullable field will be null. Set this property to zero to have no null values, or 100 to have all null values.\",\n+                                \"displayName\": \"Null Value Percentage\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"null-percentage\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n-                                \"displayName\": \"Request Timeout\",\n+                            \"nullable-fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether the generated fields will be nullable. Note that this property is ignored if Schema Text is set. Also it only affects the schema of the generated data, not whether any values will be null. If this property is true, see 'Null Value Percentage' to set the probability that any generated field will be null.\",\n+                                \"displayName\": \"Nullable Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Timeout\",\n+                                \"name\": \"nullable-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The length of time during which the message will be invisible after it is read. If the processing unit fails to delete the message after it is read, then the message will reappear in the queue.\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                            \"number-of-records\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many records will be generated for each outgoing FlowFile.\",\n+                                \"displayName\": \"Number of Records\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"number-of-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"storage-endpoint-suffix\": {\n-                                \"defaultValue\": \"queue.core.windows.net\",\n-                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n-                                \"displayName\": \"Endpoint Suffix\",\n+                            \"schema-text\": {\n+                                \"description\": \"The text of an Avro-formatted Schema used to generate record data. If this property is set, any user-defined properties are ignored.\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"enqueue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"fake\",\n+                            \"generate\",\n+                            \"random\",\n+                            \"test\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\",\n-                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateRecord\",\n+                        \"typeDescription\": \"This processor creates FlowFiles with records having random value for the specified fields. GenerateRecord is useful for testing, configuration, and simulation. It uses either user-defined properties to define a record schema or a provided schema and generates the specified number of records using random data for the fields in the schema.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": [\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies an initial max value for max value columns. Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified). In the case of incoming connections, the value is only used the first time for each table specified in the FlowFiles.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Application ID\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Instance ID\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Instance ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance ID\",\n+                                \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Instance URL\": {\n-                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n-                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n-                                \"displayName\": \"Instance URL\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Job Name\": {\n-                                \"defaultValue\": \"nifi_reporting_job\",\n-                                \"description\": \"The name of the exporting job\",\n-                                \"displayName\": \"Job Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Job Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Log Analytics Custom Log Name\": {\n-                                \"defaultValue\": \"nifiprovenance\",\n-                                \"description\": \"Log Analytics Custom Log Name\",\n-                                \"displayName\": \"Log Analytics Custom Log Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Log Analytics URL Endpoint Format\": {\n-                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n-                                \"description\": \"Log Analytics URL Endpoint Format\",\n-                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Maximum-value Columns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Id\": {\n-                                \"description\": \"Log Analytics Workspace Id\",\n-                                \"displayName\": \"Log Analytics Workspace Id\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Workspace Id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Workspace Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Platform\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The value to use for the platform field in each event.\",\n-                                \"displayName\": \"Platform\",\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-null-values\": {\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-null-values\",\n+                                \"name\": \"db-fetch-db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-event-filter\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Event Type to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-event-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-event-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Event Type to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-id-filter\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component ID to Include\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-id-filter-exclude\": {\n-                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component ID to Exclude\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-prov-task-name-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Name to Include\",\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-name-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Name to Exclude\",\n+                            \"gen-table-column-for-val-partitioning\": {\n+                                \"description\": \"The name of a column whose values will be used for partitioning. The default behavior is to use row numbers on the result set for partitioning into 'pages' to be fetched from the database, using an offset/limit strategy. However for certain databases, it can be more efficient under the right circumstances to use the column values themselves to define the 'pages'. This property should only be used when the default queries are not performing well, when there is no maximum-value column or a single maximum-value column whose type can be coerced to a long integer (i.e. not date or timestamp), and the column values are evenly distributed and not sparse, for best performance.\",\n+                                \"displayName\": \"Column for Value Partitioning\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gen-table-column-for-val-partitioning\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-type-filter\": {\n-                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n-                                \"displayName\": \"Component Type to Include\",\n+                            \"gen-table-custom-orderby-column\": {\n+                                \"description\": \"The name of a column to be used for ordering the results if Max-Value Columns are not provided and partitioning is enabled. This property is ignored if either Max-Value Columns is set or Partition Size = 0. NOTE: If neither Max-Value Columns nor Custom ORDER BY Column is set, then depending on the the database/driver, the processor may report an error and/or the generated SQL may result in missing and/or duplicate rows. This is because without an explicit ordering, fetching each partition is done using an arbitrary ordering.\",\n+                                \"displayName\": \"Custom ORDER BY Column\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gen-table-custom-orderby-column\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-prov-task-type-filter-exclude\": {\n-                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n-                                \"displayName\": \"Component Type to Exclude\",\n+                            \"gen-table-fetch-partition-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The number of result rows to be fetched by each generated SQL statement. The total number of rows in the table divided by the partition size gives the number of SQL statements (i.e. FlowFiles) generated. A value of zero indicates that a single FlowFile is to be generated whose SQL statement will fetch all rows in the table.\",\n+                                \"displayName\": \"Partition Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gen-table-fetch-partition-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"start-position\": {\n+                            \"gen-table-output-flowfile-on-zero-results\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n-                                        \"displayName\": \"Beginning of Stream\",\n-                                        \"value\": \"beginning-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n-                                        \"displayName\": \"End of Stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"beginning-of-stream\",\n-                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n-                                \"displayName\": \"Start Position\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Depending on the specified properties, an execution of this processor may not result in any SQL statements generated. When this property is true, an empty FlowFile will be generated (having the parent of the incoming FlowFile if present) and transferred to the 'success' relationship. When this property is false, no output FlowFiles will be generated.\",\n+                                \"displayName\": \"Output Empty FlowFile on Zero Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"start-position\",\n+                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n+                            \"org.apache.nifi.processors.standard.QueryDatabaseTable\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"This relationship is only used when SQL query execution (using an incoming FlowFile) failed. The incoming FlowFile will be penalized and routed to this relationship. If no incoming connection(s) are specified, this relationship is unused.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n-                            \"provenace\",\n-                            \"reporting\"\n+                            \"database\",\n+                            \"fetch\",\n+                            \"generate\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsProvenanceReportingTask\",\n-                        \"typeDescription\": \"Publishes Provenance events to to a Azure Log Analytics workspace.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n+                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the Environment/System properties.\\n  - If incoming connection(s) are specified and no FlowFile is available to a processor task, no work will be performed.\\n  - If incoming connection(s) are specified and a FlowFile is available to a processor task, the FlowFile's attributes may be used in Expression Language for such fields as Table Name and others. However, the Max-Value Columns and Columns to Return fields must be empty or refer to columns that are available in each specified table.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the processor has incoming connections, and processing an incoming FlowFile causes a SQL Exception, the FlowFile is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"generatetablefetch.sql.error\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"name\": \"generatetablefetch.tableName\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used in the query.\",\n+                                \"name\": \"generatetablefetch.columnNames\"\n+                            },\n+                            {\n+                                \"description\": \"Where clause used in the query to get the expected rows.\",\n+                                \"name\": \"generatetablefetch.whereClause\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used to keep track of data that has been returned since the processor started running.\",\n+                                \"name\": \"generatetablefetch.maxColumnNames\"\n+                            },\n+                            {\n+                                \"description\": \"The number of result rows to be fetched by the SQL statement.\",\n+                                \"name\": \"generatetablefetch.limit\"\n+                            },\n+                            {\n+                                \"description\": \"Offset to be used to retrieve the corresponding partition.\",\n+                                \"name\": \"generatetablefetch.offset\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles generated from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"This is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"This is the position of this FlowFile in the list of outgoing FlowFiles that were all generated from the same execution. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same execution and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Application ID\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Instance ID\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Job Name\": {\n-                                \"defaultValue\": \"nifi_reporting_job\",\n-                                \"description\": \"The name of the exporting job\",\n-                                \"displayName\": \"Job Name\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Job Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Custom Log Name\": {\n-                                \"defaultValue\": \"nifimetrics\",\n-                                \"description\": \"Log Analytics Custom Log Name\",\n-                                \"displayName\": \"Log Analytics Custom Log Name\",\n+                            \"Delete Original\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n+                                \"displayName\": \"Delete Original\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Delete Original\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics URL Endpoint Format\": {\n-                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n-                                \"description\": \"Log Analytics URL Endpoint Format\",\n-                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Id\": {\n-                                \"description\": \"Log Analytics Workspace Id\",\n-                                \"displayName\": \"Log Analytics Workspace Id\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Workspace Key\",\n-                                \"required\": true,\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Process group ID(s)\": {\n-                                \"description\": \"If specified, the reporting task will send metrics the configured ProcessGroup(s) only. Multiple IDs should be separated by a comma. If none of the group-IDs could be found or no IDs are defined, the Root Process Group is used and global metrics are sent.\",\n-                                \"displayName\": \"Process group ID(s)\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Process group ID(s)\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send JVM Metrics\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n-                            \"metrics\",\n-                            \"reporting\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsReportingTask\",\n-                        \"typeDescription\": \"Sends JVM-metrics as well as Apache NiFi-metrics to a Azure Log Analytics workspace.Apache NiFi-metrics can be either configured global or on process-group level.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"key-password\": {\n-                                \"description\": \"Password used for decrypting Private Keys\",\n-                                \"displayName\": \"Key Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n                             },\n-                            \"keyring\": {\n-                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n-                                \"displayName\": \"Keyring\",\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"keyring\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"keyring-file\": {\n-                                \"description\": \"File path to PGP Keyring or Secret Key encoded in binary or ASCII Armor\",\n-                                \"displayName\": \"Keyring File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"keyring-file\",\n+                                \"name\": \"Internal Buffer Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"Key\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"Private\",\n-                            \"RFC 4880\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPrivateKeyService\",\n-                        \"typeDescription\": \"PGP Private Key Service provides Private Keys loaded from files or properties\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"keyring\": {\n-                                \"description\": \"PGP Keyring or Public Key encoded in ASCII Armor\",\n-                                \"displayName\": \"Keyring\",\n+                            },\n+                            \"Max Selects\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in a single connection\",\n+                                \"displayName\": \"Max Selects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"keyring\",\n-                                \"required\": false,\n+                                \"name\": \"Max Selects\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"keyring-file\": {\n-                                \"description\": \"File path to PGP Keyring or Public Key encoded in binary or ASCII Armor\",\n-                                \"displayName\": \"Keyring File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"keyring-file\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"Key\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"Private\",\n-                            \"RFC 4880\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPublicKeyService\",\n-                        \"typeDescription\": \"PGP Public Key Service providing Public Keys loaded from files\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Request Header to add\",\n-                                \"value\": \"The value of the Header\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"api-key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"API_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"Encoded API key.\",\n-                                \"displayName\": \"API Key\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"api-key-id\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"API_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"Unique identifier of the API key.\",\n-                                \"displayName\": \"API Key ID\",\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key-id\",\n+                                \"name\": \"Path Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-scheme\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No authorization scheme.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Mutual TLS with PKI certificate authorization scheme.\",\n-                                        \"displayName\": \"PKI\",\n-                                        \"value\": \"PKI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Basic authorization scheme.\",\n-                                        \"displayName\": \"Basic\",\n-                                        \"value\": \"BASIC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"API key authorization scheme.\",\n-                                        \"displayName\": \"API Key\",\n-                                        \"value\": \"API_KEY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"BASIC\",\n-                                \"description\": \"Authorization Scheme used for optional authentication to Elasticsearch.\",\n-                                \"displayName\": \"Authorization Scheme\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-scheme\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The charset to use for interpreting the response from Elasticsearch.\",\n-                                \"displayName\": \"Charset\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-charset\",\n+                                \"name\": \"Polling Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-connect-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when trying to connect.\",\n-                                \"displayName\": \"Connect timeout\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-connect-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-enable-compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether the REST client should compress requests using gzip content encoding and add the \\\"Accept-Encoding: gzip\\\" header to receive compressed responses\",\n-                                \"displayName\": \"Enable Compression\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-enable-compression\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-http-hosts\": {\n-                                \"description\": \"A comma-separated list of HTTP hosts that host Elasticsearch query nodes. Note that the Host is included in requests as a header (typically including domain and port, e.g. elasticsearch:9200).\",\n-                                \"displayName\": \"HTTP Hosts\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-cs-http-hosts\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-node-selector\": {\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n-                                        \"displayName\": \"Any\",\n-                                        \"value\": \"ANY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n-                                        \"displayName\": \"Skip Dedicated Masters\",\n-                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ANY\",\n-                                \"description\": \"Selects Elasticsearch nodes that can receive requests. Used to keep requests away from dedicated Elasticsearch master nodes\",\n-                                \"displayName\": \"Node Selector\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-node-selector\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"The password to use with XPack security.\",\n-                                \"displayName\": \"Password\",\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-cs-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"el-cs-path-prefix\": {\n-                                \"description\": \"Sets the path's prefix for every request used by the http client. For example, if this is set to \\\"/my/path\\\", then any client request will become \\\"/my/path/\\\" + endpoint. In essence, every request's endpoint is prefixed by this pathPrefix. The path prefix is useful for when Elasticsearch is behind a proxy that provides a base path or a proxy that requires all paths to start with '/'; it is not intended for other purposes and it should not be supplied in other scenarios\",\n-                                \"displayName\": \"Path Prefix\",\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-path-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Remote Poll Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-send-meta-header\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to send a \\\"X-Elastic-Client-Meta\\\" header that describes the runtime environment. It contains information that is similar to what could be found in User-Agent. Using a separate header allows applications to use User-Agent for their own needs, e.g. to identify application version or other environment information\",\n-                                \"displayName\": \"Send Meta Header\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-send-meta-header\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-cluster-nodes\": {\n+                            \"Transfer Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Periodically sniff for nodes within the Elasticsearch cluster via the Elasticsearch Node Info API. If Elasticsearch security features are enabled (default to \\\"true\\\" for 8.x+), the Elasticsearch user must have the \\\"monitor\\\" or \\\"manage\\\" cluster privilege to use this API.Note that all HTTP Hosts (and those that may be discovered within the cluster using the Sniffer) must use the same protocol, e.g. http or https, and be contactable using the same client settings. Finally the Elasticsearch \\\"network.publish_host\\\" must match one of the \\\"network.bind_host\\\" list entries see https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html for more information\",\n-                                \"displayName\": \"Sniff Cluster Nodes\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-cluster-nodes\",\n-                                \"required\": true,\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-failure\": {\n+                            \"Use Natural Ordering\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sniffing on failure, meaning that after each failure the Elasticsearch nodes list gets updated straightaway rather than at the following ordinary sniffing round\",\n-                                \"displayName\": \"Sniff on Failure\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-failure\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-sniffer-failure-delay\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff on Failure\",\n-                                        \"propertyName\": \"el-cs-sniff-failure\"\n-                                    }\n-                                ],\n-                                \"description\": \"Delay between an Elasticsearch request failure and updating available Cluster nodes using the Sniffer\",\n-                                \"displayName\": \"Sniffer Failure Delay\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-failure-delay\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-sniffer-interval\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n-                                    }\n-                                ],\n-                                \"description\": \"Interval between Cluster sniffer operations\",\n-                                \"displayName\": \"Sniffer Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-sniffer-request-timeout\": {\n-                                \"defaultValue\": \"1 sec\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n-                                    }\n-                                ],\n-                                \"description\": \"Cluster sniffer timeout for node info requests\",\n-                                \"displayName\": \"Sniffer Request Timeout\",\n+                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n+                                \"displayName\": \"Use Natural Ordering\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-request-timeout\",\n+                                \"name\": \"Use Natural Ordering\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-socket-timeout\": {\n-                                \"defaultValue\": \"60000\",\n-                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when waiting for a response.\",\n-                                \"displayName\": \"Read timeout\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-socket-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"el-cs-strict-deprecation\": {\n+                            \"follow-symlink\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether the REST client should return any response containing at least one warning header as a failure\",\n-                                \"displayName\": \"Strict Deprecation\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-strict-deprecation\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-suppress-nulls\": {\n+                            \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will be written out as a null/empty value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will not be written out\",\n-                                        \"displayName\": \"Always Suppress\",\n-                                        \"value\": \"always-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"always-suppress\",\n-                                \"description\": \"Specifies how the writer should handle null and empty fields (including objects and arrays)\",\n-                                \"displayName\": \"Suppress Null/Empty Values\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-suppress-nulls\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"The username to use with XPack security.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-cs-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -65535,1055 +67421,929 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\"\n+                            \"FTP\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientServiceImpl\",\n-                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client, using the Elasticsearch (low-level) REST Client.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetFTP\",\n+                        \"typeDescription\": \"Fetches files from an FTP Server and creates FlowFiles from them\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"dynamicProperties\": [\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Retrieves an object using JSONPath from the result document and places it in the return Record at the specified Record Path.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A JSONPath expression\",\n-                                \"value\": \"A Record Path expression\"\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-lookup-index\": {\n-                                \"description\": \"The name of the index to read from\",\n-                                \"displayName\": \"Index\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of files to pull in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-lookup-index\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-lookup-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-lookup-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which to pull files\",\n+                                \"displayName\": \"Input Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Directory\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"Keep Source File\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n+                                \"displayName\": \"Keep Source File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"name\": \"Keep Source File\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"lookup\",\n-                            \"record\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchLookupService\",\n-                        \"typeDescription\": \"Lookup a record from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"el-lookup-index\": {\n-                                \"description\": \"The name of the index to read from\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-lookup-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"el-lookup-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n-                                \"displayName\": \"Type\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-lookup-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchStringLookupService\",\n-                        \"typeDescription\": \"Lookup a string value from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-distributed-cache-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Path Filter\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Hostname\",\n+                                \"name\": \"Polling Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Server Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Port\",\n+                            \"Recurse Subdirectories\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n-                            },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All files are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"state\"\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"ingress\",\n+                            \"input\",\n+                            \"local\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a DistributedMapCacheServer. This can be used in order to share a Map between nodes in a NiFi cluster\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetFile\",\n+                        \"typeDescription\": \"Creates FlowFiles from files in a directory.  NiFi will ignore files it doesn't have at least read permissions for.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on disk\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the relative path of the file's directory on disk. For example, if the <Input Directory> property is set to /tmp, files picked up from /tmp will have the path attribute set to ./. If the <Recurse Subdirectories> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n+                                \"name\": \"file.creationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the file. May not work on all file systems\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Hostname\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Server Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedSetCacheServer service\",\n-                                \"displayName\": \"Server Port\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"set\",\n-                            \"state\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.client.DistributedSetCacheClientService\",\n-                        \"typeDescription\": \"Provides the ability to communicate with a DistributedSetCacheServer. This can be used in order to share a Set between nodes in a NiFi cluster\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Delete Original\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n+                                \"displayName\": \"Delete Original\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Eviction Strategy\",\n+                                \"name\": \"Delete Original\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Cache Entries\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n-                                \"displayName\": \"Maximum Cache Entries\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Cache Entries\",\n-                                \"required\": true,\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Persistence Directory\": {\n-                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n-                                \"displayName\": \"Persistence Directory\",\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Persistence Directory\",\n+                                \"name\": \"Host Key File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port to listen on for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"maximum-read-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n-                                \"displayName\": \"Maximum Read Size\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-read-size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distinct\",\n-                            \"distributed\",\n-                            \"server\",\n-                            \"set\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.server.DistributedSetCacheServer\",\n-                        \"typeDescription\": \"Provides a set (collection of unique values) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedSetCacheClient service.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Eviction Strategy\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Cache Entries\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of cache entries that the cache can hold\",\n-                                \"displayName\": \"Maximum Cache Entries\",\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Selects\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to pull in a single connection\",\n+                                \"displayName\": \"Max Selects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Cache Entries\",\n+                                \"name\": \"Max Selects\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Persistence Directory\": {\n-                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n-                                \"displayName\": \"Persistence Directory\",\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Persistence Directory\",\n+                                \"name\": \"Path Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port to listen on for incoming connections\",\n-                                \"displayName\": \"Port\",\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"60 sec\",\n+                                \"description\": \"Determines how long to wait between fetching the listing for new files\",\n+                                \"displayName\": \"Polling Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"maximum-read-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum number of network bytes to read for a single cache item\",\n-                                \"displayName\": \"Maximum Read Size\",\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-read-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"key/value\",\n-                            \"map\",\n-                            \"server\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                        \"typeDescription\": \"Provides a map (key/value) cache that can be accessed over a socket. Interaction with this service is typically accomplished via a DistributedMapCacheClient service.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-oauth2-provider-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-oauth2-provider-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"HTTP Protocols\": {\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n-                                        \"displayName\": \"h2 http/1.1\",\n-                                        \"value\": \"H2_HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"H2_HTTP_1_1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"audience\": {\n-                                \"description\": \"Audience for the access token request defined in RFC 8693 Section 2.1\",\n-                                \"displayName\": \"Audience\",\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"audience\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-server-url\": {\n-                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n-                                \"displayName\": \"Authorization Server URL\",\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"authorization-server-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication-strategy\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send client authentication in request body. RFC 6749 Section 2.3.1 recommends Basic Authentication instead of request body.\",\n-                                        \"displayName\": \"REQUEST_BODY\",\n-                                        \"value\": \"REQUEST_BODY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n-                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n-                                        \"value\": \"BASIC_AUTHENTICATION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"REQUEST_BODY\",\n-                                \"description\": \"Strategy for authenticating the client against the OAuth2 token provider service.\",\n-                                \"displayName\": \"Client Authentication Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication-strategy\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-id\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-secret\": {\n-                                \"dependencies\": [\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Client ID\",\n-                                        \"propertyName\": \"client-id\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"\",\n-                                \"displayName\": \"Client secret\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-secret\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"grant-type\": {\n+                            \"Strict Host Key Checking\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Resource Owner Password Credentials Grant. Used to access resources available to users. Requires username and password and usually Client ID and Client Secret.\",\n-                                        \"displayName\": \"User Password\",\n-                                        \"value\": \"password\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Client Credentials Grant. Used to access resources available to clients. Requires Client ID and Client Secret.\",\n-                                        \"displayName\": \"Client Credentials\",\n-                                        \"value\": \"client_credentials\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Refresh Token Grant. Used to get fresh access tokens based on a previously acquired refresh token. Requires Client ID and Client Secret (apart from Refresh Token).\",\n-                                        \"displayName\": \"Refresh Token\",\n-                                        \"value\": \"refresh_token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"password\",\n-                                \"description\": \"The OAuth2 Grant Type to be used when acquiring an access token.\",\n-                                \"displayName\": \"Grant Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"grant-type\",\n+                                \"name\": \"Strict Host Key Checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"refresh-token\": {\n-                                \"dependencies\": [\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"refresh_token\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Refresh Token.\",\n-                                \"displayName\": \"Refresh Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"refresh-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"refresh-window\": {\n-                                \"defaultValue\": \"0 s\",\n-                                \"description\": \"The service will attempt to refresh tokens expiring within the refresh window, subtracting the configured duration from the token expiration.\",\n-                                \"displayName\": \"Refresh Window\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"refresh-window\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"resource\": {\n-                                \"description\": \"Resource URI for the access token request defined in RFC 8707 Section 2\",\n-                                \"displayName\": \"Resource\",\n+                            \"Use Natural Ordering\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n+                                \"displayName\": \"Use Natural Ordering\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"resource\",\n-                                \"required\": false,\n+                                \"name\": \"Use Natural Ordering\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"scope\": {\n-                                \"description\": \"Space-delimited, case-sensitive list of scopes of the access request (as per the OAuth 2.0 specification)\",\n-                                \"displayName\": \"Scope\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scope\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"service-password\": {\n-                                \"dependencies\": [\n+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"password\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for the username on the service that is being accessed.\",\n-                                \"displayName\": \"Password\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"service-user-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"password\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username on the service that is being accessed.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"service-user-name\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"access token\",\n-                            \"authorization\",\n-                            \"http\",\n-                            \"oauth2\",\n-                            \"provider\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n-                        \"type\": \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\",\n-                        \"typeDescription\": \"Provides OAuth 2.0 access tokens that can be used as Bearer authorization header in HTTP requests. Can use either Resource Owner Password Credentials Grant or Client Credentials Grant. Client authentication can be done with either HTTP Basic authentication or in the request body.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jolt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n+                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jolt-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -66592,607 +68352,512 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Custom Module Directory\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n-                                \"displayName\": \"Custom Module Directory\",\n+                            \"Additional HTTP Methods\": {\n+                                \"description\": \"A comma-separated list of non-standard HTTP Methods that should be allowed\",\n+                                \"displayName\": \"Additional HTTP Methods\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Custom Module Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional HTTP Methods\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Custom Transformation Class Name\": {\n-                                \"dependencies\": [\n+                            \"Allow DELETE\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Custom Transformation Class Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Jolt Specification\": {\n-                                \"description\": \"Jolt Specification for transformation of JSON data. The value for this property may be the text of a Jolt specification or the path to a file containing a Jolt specification. 'Jolt Specification' must be set, or the value is ignored if the Jolt Sort Transformation is selected.\",\n-                                \"displayName\": \"Jolt Specification\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP DELETE Method\",\n+                                \"displayName\": \"Allow DELETE\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Jolt Specification\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow DELETE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Transform\": {\n+                            \"Allow GET\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Execute list of Jolt transformations.\",\n-                                        \"displayName\": \"Chain\",\n-                                        \"value\": \"jolt-transform-chain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Apply default values to the output JSON.\",\n-                                        \"displayName\": \"Default\",\n-                                        \"value\": \"jolt-transform-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Remove values from input data to create the output JSON.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n-                                        \"displayName\": \"Cardinality\",\n-                                        \"value\": \"jolt-transform-card\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n-                                        \"displayName\": \"Sort\",\n-                                        \"value\": \"jolt-transform-sort\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n-                                        \"displayName\": \"Custom\",\n-                                        \"value\": \"jolt-transform-custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transform\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP GET Method\",\n+                                \"displayName\": \"Allow GET\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Jolt Transform\",\n+                                \"name\": \"Allow GET\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n-                                \"displayName\": \"Max String Length\",\n+                            \"Allow HEAD\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Allow HTTP HEAD Method\",\n+                                \"displayName\": \"Allow HEAD\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n+                                \"name\": \"Allow HEAD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pretty Print\": {\n+                            \"Allow OPTIONS\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Apply pretty print formatting to the output of the Jolt transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                                \"description\": \"Allow HTTP OPTIONS Method\",\n+                                \"displayName\": \"Allow OPTIONS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print\",\n+                                \"name\": \"Allow OPTIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transform Cache Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"Allow POST\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP POST Method\",\n+                                \"displayName\": \"Allow POST\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transform Cache Size\",\n+                                \"name\": \"Allow POST\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n                             },\n-                            {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"json\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.jolt.JoltTransformJSON\",\n-                        \"typeDescription\": \"Applies a list of Jolt specifications to the flowfile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSON transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jolt-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Custom Module Directory\": {\n-                                \"dependencies\": [\n+                            \"Allow PUT\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules containing custom transformations (that are not included on NiFi's classpath).\",\n-                                \"displayName\": \"Custom Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Custom Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Custom Transformation Class Name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP PUT Method\",\n+                                \"displayName\": \"Allow PUT\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Custom Transformation Class Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow PUT\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Specification\": {\n-                                \"description\": \"Jolt Specification for transformation of JSON data. The value for this property may be the text of a Jolt specification or the path to a file containing a Jolt specification. 'Jolt Specification' must be set, or the value is ignored if the Jolt Sort Transformation is selected.\",\n-                                \"displayName\": \"Jolt Specification\",\n+                            \"Allowed Paths\": {\n+                                \"description\": \"A Regular Expression that specifies the valid HTTP Paths that are allowed in the incoming URL Requests. If this value is specified and the path of the HTTP Requests does not match this Regular Expression, the Processor will respond with a 404: NotFound\",\n+                                \"displayName\": \"Allowed Paths\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Jolt Specification\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allowed Paths\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Transform\": {\n+                            \"Client Authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Execute list of Jolt transformations.\",\n-                                        \"displayName\": \"Chain\",\n-                                        \"value\": \"jolt-transform-chain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Apply default values to the output JSON.\",\n-                                        \"displayName\": \"Default\",\n-                                        \"value\": \"jolt-transform-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Remove values from input data to create the output JSON.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Change the cardinality of input elements to create the output JSON.\",\n-                                        \"displayName\": \"Cardinality\",\n-                                        \"value\": \"jolt-transform-card\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Sort input json key values alphabetically. Any specification set is ignored.\",\n-                                        \"displayName\": \"Sort\",\n-                                        \"value\": \"jolt-transform-sort\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Custom Transformation. Requires Custom Transformation Class Name\",\n-                                        \"displayName\": \"Custom\",\n-                                        \"value\": \"jolt-transform-custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n+                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n                                     },\n                                     {\n-                                        \"description\": \"Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n                                     },\n                                     {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n+                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transform\",\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Processor should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Jolt Transform\",\n+                                \"name\": \"Client Authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transform Cache Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Compiling a Jolt Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n-                                \"displayName\": \"Transform Cache Size\",\n+                            \"Default URL Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The character set to use for decoding URL parameters if the HTTP Request does not supply one\",\n+                                \"displayName\": \"Default URL Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transform Cache Size\",\n+                                \"name\": \"Default URL Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jolt-record-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"HTTP Context Map\": {\n+                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n+                                \"displayName\": \"HTTP Context Map\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-record-reader\",\n+                                \"name\": \"HTTP Context Map\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"jolt-record-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HTTP_1_1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-record-writer\",\n+                                \"name\": \"HTTP Protocols\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Listening Port\": {\n+                                \"defaultValue\": \"80\",\n+                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n+                                \"displayName\": \"Listening Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Listening Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Threads\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The maximum number of threads that the embedded HTTP server will use for handling requests.\",\n+                                \"displayName\": \"Maximum Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Threads\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"container-queue-size\": {\n+                                \"defaultValue\": \"50\",\n+                                \"description\": \"The size of the queue for Http Request Containers\",\n+                                \"displayName\": \"Container Queue Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"container-queue-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"multipart-read-buffer-size\": {\n+                                \"defaultValue\": \"512 KB\",\n+                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n+                                \"displayName\": \"Multipart Read Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-read-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"multipart-request-max-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n+                                \"displayName\": \"Multipart Request Max Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-request-max-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"parameters-to-attributes\": {\n+                                \"description\": \"A comma-separated list of HTTP parameters or form data to output as attributes\",\n+                                \"displayName\": \"Parameters to Attributes List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameters-to-attributes\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"record\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\n+                            \"http\",\n+                            \"https\",\n+                            \"ingress\",\n+                            \"listen\",\n+                            \"request\",\n+                            \"web service\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.jolt.JoltTransformRecord\",\n-                        \"typeDescription\": \"Applies a JOLT specification to each record in the FlowFile payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                        \"typeDescription\": \"Starts an HTTP Server and listens for HTTP Requests. For each request, creates a FlowFile and transfers to 'success'. This Processor is designed to be used in conjunction with the HandleHttpResponse Processor in order to create a Web Service. In case  of a multipart request, one FlowFile is generated for each part.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"An identifier that allows the HandleHttpRequest and HandleHttpResponse to coordinate which FlowFile belongs to which HTTP Request/Response.\",\n+                                \"name\": \"http.context.identifier\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n                                 \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-db-schema-registry-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-db-schema-registry-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Catalog Name\": {\n-                                \"description\": \"The name of the catalog used to locate the desired table. This may not apply for the database that you are querying. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n-                                \"displayName\": \"Catalog Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Catalog Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for retrieving table information.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                            {\n+                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n+                                \"name\": \"http.servlet.path\"\n                             },\n-                            \"Schema Name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly. Also notice that if the same table name exists in multiple schemas and Schema Name is not specified, the service will find those tables and give an error if the different tables have the same column name(s).\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Schema Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"The part of the request URL that is considered to be the Context Path\",\n+                                \"name\": \"http.context.path\"\n+                            },\n+                            {\n+                                \"description\": \"The HTTP Method that was used for the request, such as GET or POST\",\n+                                \"name\": \"http.method\"\n+                            },\n+                            {\n+                                \"description\": \"IP address/hostname of the server\",\n+                                \"name\": \"http.local.name\"\n+                            },\n+                            {\n+                                \"description\": \"Listening port of the server\",\n+                                \"name\": \"http.server.port\"\n+                            },\n+                            {\n+                                \"description\": \"The query string portion of the Request URL\",\n+                                \"name\": \"http.query.string\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the requestor\",\n+                                \"name\": \"http.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname:port combination of the requestor\",\n+                                \"name\": \"http.remote.addr\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the requestor\",\n+                                \"name\": \"http.remote.user\"\n+                            },\n+                            {\n+                                \"description\": \"The protocol used to communicate\",\n+                                \"name\": \"http.protocol\"\n+                            },\n+                            {\n+                                \"description\": \"The full Request URL\",\n+                                \"name\": \"http.request.uri\"\n+                            },\n+                            {\n+                                \"description\": \"The type of HTTP Authorization used\",\n+                                \"name\": \"http.auth.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the authenticated user making the request\",\n+                                \"name\": \"http.principal.name\"\n+                            },\n+                            {\n+                                \"description\": \"Each of query parameters in the request will be added as an attribute, prefixed with \\\"http.query.param.\\\"\",\n+                                \"name\": \"http.query.param.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"Form parameters in the request that are configured by \\\"Parameters to Attributes List\\\" will be added as an attribute, prefixed with \\\"http.param.\\\". Putting form parameters of large size is not recommended.\",\n+                                \"name\": \"http.param.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"The Distinguished Name of the requestor. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n+                                \"name\": \"http.subject.dn\"\n+                            },\n+                            {\n+                                \"description\": \"The Distinguished Name of the entity that issued the Subject's certificate. This value will not be populated unless the Processor is configured to use an SSLContext Service\",\n+                                \"name\": \"http.issuer.dn\"\n+                            },\n+                            {\n+                                \"description\": \"X.509 Client Certificate Subject Alternative Name value from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate\",\n+                                \"name\": \"http.certificate.sans.N.name\"\n+                            },\n+                            {\n+                                \"description\": \"X.509 Client Certificate Subject Alternative Name type from mutual TLS authentication. The attribute name has a zero-based index ordered according to the content of Client Certificate. The attribute value is one of the General Names from RFC 3280 Section 4.1.2.7\",\n+                                \"name\": \"http.certificate.sans.N.nameType\"\n+                            },\n+                            {\n+                                \"description\": \"Each of the HTTP Headers that is received in the request will be added as an attribute, prefixed with \\\"http.headers.\\\" For example, if the request contains an HTTP Header named \\\"x-my-header\\\", then the value will be added to an attribute named \\\"http.headers.x-my-header\\\"\",\n+                                \"name\": \"http.headers.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"Each of the HTTP Headers that is received in the multipart request will be added as an attribute, prefixed with \\\"http.headers.multipart.\\\" For example, if the multipart request contains an HTTP Header named \\\"content-disposition\\\", then the value will be added to an attribute named \\\"http.headers.multipart.content-disposition\\\"\",\n+                                \"name\": \"http.headers.multipart.XXX\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content size is recorded into this attribute\",\n+                                \"name\": \"http.multipart.size\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's content type is recorded into this attribute\",\n+                                \"name\": \"http.multipart.content.type\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's name is recorded into this attribute\",\n+                                \"name\": \"http.multipart.name\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", when the part contains an uploaded file, the name of the file is recorded into this attribute. Files are stored temporarily at the default temporary-file directory specified in \\\"java.io.File\\\" Java Docs)\",\n+                                \"name\": \"http.multipart.filename\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the part's index is recorded into this attribute. The index starts with 1.\",\n+                                \"name\": \"http.multipart.fragments.sequence.number\"\n+                            },\n+                            {\n+                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the count of all parts is recorded into this attribute.\",\n+                                \"name\": \"http.multipart.fragments.total.number\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"registry\",\n-                            \"schema\",\n-                            \"table\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.db.schemaregistry.DatabaseTableSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a service for generating a record schema from a database table definition. The service is configured to use a table name and a database connection fetches the table metadata (i.e. table definition) such as column names, data types, nullability, etc.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-server-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67200,129 +68865,131 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These HTTPHeaders are set in the HTTP Response\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"An HTTP header name\",\n+                                \"value\": \"An HTTP header value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"decryption-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n-                                        \"displayName\": \"DECRYPTED\",\n-                                        \"value\": \"DECRYPTED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n-                                        \"displayName\": \"PACKAGED\",\n-                                        \"value\": \"PACKAGED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DECRYPTED\",\n-                                \"description\": \"Strategy for writing files to success after decryption\",\n-                                \"displayName\": \"Decryption Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"decryption-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for decrypting data encrypted with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\n+                            \"Attributes to add to the HTTP Response (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be added to the HTTP response\",\n+                                \"displayName\": \"Attributes to add to the HTTP Response (Regex)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"passphrase\",\n+                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for decrypting data encrypted with Public Key Encryption\",\n-                                \"displayName\": \"Private Key Service\",\n+                            \"HTTP Context Map\": {\n+                                \"description\": \"The HTTP Context Map Controller Service to use for caching the HTTP Request Information\",\n+                                \"displayName\": \"HTTP Context Map\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n-                                \"required\": false,\n+                                \"name\": \"HTTP Context Map\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"HTTP Status Code\": {\n+                                \"description\": \"The HTTP Status Code to use when responding to the HTTP Request. See Section 10 of RFC 2616 for more information.\",\n+                                \"displayName\": \"HTTP Status Code\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP Status Code\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The value of this attribute is used to lookup the HTTP Response so that the proper message can be sent back to the requestor. If this attribute is missing, the FlowFile will be routed to 'failure.'\",\n+                                \"name\": \"http.context.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n+                                \"name\": \"http.request.uri\"\n+                            },\n+                            {\n+                                \"description\": \"IP address of the client. Used for provenance event.\",\n+                                \"name\": \"http.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"IP address/hostname of the server. Used for provenance event.\",\n+                                \"name\": \"http.local.name\"\n+                            },\n+                            {\n+                                \"description\": \"Listening port of the server. Used for provenance event.\",\n+                                \"name\": \"http.server.port\"\n+                            },\n+                            {\n+                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n+                                \"name\": \"http.subject.dn\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                            \"org.apache.nifi.http.StandardHttpContextMap\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Succeeded\",\n+                                \"description\": \"FlowFiles will be routed to this Relationship after the response has been successfully sent to the requestor\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Decryption Failed\",\n+                                \"description\": \"FlowFiles will be routed to this Relationship if the Processor is unable to respond to the requestor. This may happen, for instance, if the connection times out or if NiFi is restarted before responding to the HTTP Request.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n+                            \"egress\",\n+                            \"http\",\n+                            \"https\",\n+                            \"response\",\n+                            \"web service\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                        \"typeDescription\": \"Decrypt contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves OpenPGP encoding to support subsequent signature verification.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.HandleHttpResponse\",\n+                        \"typeDescription\": \"Sends an HTTP Response to the Requestor that generated a FlowFile. This Processor is designed to be used in conjunction with the HandleHttpRequest in order to create a web service.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Filename from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Modified Date from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.modified\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67335,382 +69002,156 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"file-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    },\n+                            \"config-body\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"dependentValues\": [\n+                                            \"Replace\",\n+                                            \"Merge\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Config Strategy\",\n+                                        \"propertyName\": \"config-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"File Encoding for encryption\",\n-                                \"displayName\": \"File Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\n+                                \"description\": \"Body of MIME type config file. Only one of Config File or Config Body may be used.\",\n+                                \"displayName\": \"Config Body\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"passphrase\",\n+                                \"name\": \"config-body\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"public-key-search\": {\n+                            \"config-file\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Public Key Service\",\n-                                        \"propertyName\": \"public-key-service\"\n+                                        \"dependentValues\": [\n+                                            \"Replace\",\n+                                            \"Merge\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Config Strategy\",\n+                                        \"propertyName\": \"config-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"PGP Public Key Search will be used to match against the User ID or Key ID when formatted as uppercase hexadecimal string of 16 characters\",\n-                                \"displayName\": \"Public Key Search\",\n+                                \"description\": \"Path to MIME type config file. Only one of Config File or Config Body may be used.\",\n+                                \"displayName\": \"Config File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"public-key-search\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"config-file\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"public-key-service\": {\n-                                \"description\": \"PGP Public Key Service for encrypting data with Public Key Encryption\",\n-                                \"displayName\": \"Public Key Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"symmetric-key-algorithm\": {\n+                            \"config-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_128\",\n-                                        \"value\": \"AES_128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_192\",\n-                                        \"value\": \"AES_192\"\n+                                        \"description\": \"Use default NiFi MIME Types.\",\n+                                        \"displayName\": \"Preset\",\n+                                        \"value\": \"Preset\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_256\",\n-                                        \"value\": \"AES_256\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"AES_256\",\n-                                \"description\": \"Symmetric-Key Algorithm for encryption\",\n-                                \"displayName\": \"Symmetric-Key Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"symmetric-key-algorithm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Encryption Succeeded\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Encryption Failed\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                        \"typeDescription\": \"Encrypt contents using OpenPGP. The processor reads input and detects OpenPGP messages to avoid unnecessary additional wrapping in Literal Data packets.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm\",\n-                                \"name\": \"pgp.symmetric.key.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Key Size\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.key.size\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"File Encoding\",\n-                                \"name\": \"pgp.file.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"Compression Algorithm\",\n-                                \"name\": \"pgp.compression.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Compression Algorithm Identifier\",\n-                                \"name\": \"pgp.compression.algorithm.id\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"file-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"description\": \"Use config MIME Types only.\",\n+                                        \"displayName\": \"Replace\",\n+                                        \"value\": \"Replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"description\": \"Use config together with default NiFi MIME Types.\",\n+                                        \"displayName\": \"Merge\",\n+                                        \"value\": \"Merge\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"File Encoding for signing\",\n-                                \"displayName\": \"File Encoding\",\n+                                \"defaultValue\": \"Preset\",\n+                                \"description\": \"Select the loading strategy for MIME Type configuration to be used.\",\n+                                \"displayName\": \"Config Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n+                                \"name\": \"config-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash-algorithm\": {\n+                            \"use-filename-in-detection\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"SHA384\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"SHA512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA512\",\n-                                \"description\": \"Hash Algorithm for signing\",\n-                                \"displayName\": \"Hash Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-algorithm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"private-key-id\": {\n-                                \"description\": \"PGP Private Key Identifier formatted as uppercase hexadecimal string of 16 characters used for signing\",\n-                                \"displayName\": \"Private Key ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"private-key-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for generating content signatures\",\n-                                \"displayName\": \"Private Key Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"signing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n-                                        \"displayName\": \"SIGNED\",\n-                                        \"value\": \"SIGNED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n-                                        \"displayName\": \"DETACHED\",\n-                                        \"value\": \"DETACHED\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SIGNED\",\n-                                \"description\": \"Strategy for writing files to success after signing\",\n-                                \"displayName\": \"Signing Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true will pass the filename to Tika to aid in detection.\",\n+                                \"displayName\": \"Use Filename In Detection\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"signing-strategy\",\n+                                \"name\": \"use-filename-in-detection\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Content signing succeeded\",\n+                                \"description\": \"All FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Content signing failed\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n+                            \"MIME\",\n+                            \"bzip2\",\n+                            \"compression\",\n+                            \"file\",\n+                            \"gzip\",\n+                            \"identify\",\n+                            \"mime.type\",\n+                            \"zip\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\n+                        \"type\": \"org.apache.nifi.processors.standard.IdentifyMimeType\",\n+                        \"typeDescription\": \"Attempts to identify the MIME Type used for a FlowFile. If the MIME Type can be identified, an attribute with the name 'mime.type' is added with the value being the MIME Type. If the MIME Type cannot be determined, the value will be set to 'application/octet-stream'. In addition, the attribute 'mime.extension' will be set if a common file extension for the MIME Type is known. If the MIME Type detected is of type text/*, attempts to identify the charset used and an attribute with the name 'mime.charset' is added with the value being the charset.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Compression Algorithm\",\n-                                \"name\": \"pgp.compression.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Compression Algorithm Identifier\",\n-                                \"name\": \"pgp.compression.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"File Encoding\",\n-                                \"name\": \"pgp.file.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n-                                \"name\": \"pgp.signature.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Hash Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.hash.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Key Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.key.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Public Key Identifier\",\n-                                \"name\": \"pgp.signature.key.id\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.type attribute to the detected MIME Type. If unable to detect the MIME Type, the attribute's value will be set to application/octet-stream\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Signature Type Identifier\",\n-                                \"name\": \"pgp.signature.type.id\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.extension attribute to the file extension associated with the detected MIME Type. If there is no correlated extension, the attribute's value will be empty\",\n+                                \"name\": \"mime.extension\"\n                             },\n                             {\n-                                \"description\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\n+                                \"description\": \"This Processor sets the FlowFile's mime.charset attribute to the detected charset. If unable to detect the charset or the detected MIME type is not of type text/*, the attribute will not be set\",\n+                                \"name\": \"mime.charset\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67718,2545 +69159,1855 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"public-key-service\": {\n-                                \"description\": \"PGP Public Key Service for verifying signatures with Public Key Encryption\",\n-                                \"displayName\": \"Public Key Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Send request header with a key matching the Dynamic Property Key and a value created by evaluating the Attribute Expression Language set in the value of the Dynamic Property.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Header Name\",\n+                                \"value\": \"Attribute Expression Language\"\n                             },\n                             {\n-                                \"description\": \"Signature Verification Failed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"When the HTTP Method is POST, dynamic properties with the property name in the form of post:form:<NAME>, where the <NAME> will be the form data name, will be used to fill out the multipart form parts.  If send message body is false, the flowfile will not be sent, but any other form data will be.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"post:form:<NAME>\",\n+                                \"value\": \"Attribute Expression Language\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.pgp.VerifyContentPGP\",\n-                        \"typeDescription\": \"Verify signatures using OpenPGP Public Keys\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Filename from Literal Data\",\n-                                \"name\": \"pgp.literal.data.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Modified Date Time from Literal Data in milliseconds\",\n-                                \"name\": \"pgp.literal.data.modified\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Creation Time in milliseconds\",\n-                                \"name\": \"pgp.signature.created\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n-                                \"name\": \"pgp.signature.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Hash Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.hash.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Key Algorithm Identifier\",\n-                                \"name\": \"pgp.signature.key.algorithm.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Public Key Identifier\",\n-                                \"name\": \"pgp.signature.key.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Type Identifier\",\n-                                \"name\": \"pgp.signature.type.id\"\n-                            },\n-                            {\n-                                \"description\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-asana-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"asana-controller-service\": {\n-                                \"description\": \"Specify which controller service to use for accessing Asana.\",\n-                                \"displayName\": \"Asana Client Service\",\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-controller-service\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-asana-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"asana-object-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"asana-collect-tasks\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Task Attachments\",\n-                                        \"value\": \"asana-collect-task-attachments\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect projects of the workspace.\",\n-                                        \"displayName\": \"Projects\",\n-                                        \"value\": \"asana-collect-projects\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect tags of the workspace.\",\n-                                        \"displayName\": \"Tags\",\n-                                        \"value\": \"asana-collect-tags\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the workspace.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"asana-collect-users\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the specified project.\",\n-                                        \"displayName\": \"Members of a Project\",\n-                                        \"value\": \"asana-collect-project-members\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect teams of the workspace.\",\n-                                        \"displayName\": \"Teams\",\n-                                        \"value\": \"asana-collect-teams\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the specified team.\",\n-                                        \"displayName\": \"Team Members\",\n-                                        \"value\": \"asana-collect-team-members\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Stories of Tasks\",\n-                                        \"value\": \"asana-collect-stories\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect status updates of the specified project.\",\n-                                        \"displayName\": \"Status Updates of a Project\",\n-                                        \"value\": \"asana-collect-project-status-updates\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect attached files of project status updates.\",\n-                                        \"displayName\": \"Attachments of Status Updates\",\n-                                        \"value\": \"asana-collect-project-status-attachments\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n-                                        \"displayName\": \"Events of a Project\",\n-                                        \"value\": \"asana-collect-project-events\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"asana-collect-tasks\",\n-                                \"description\": \"Specify what kind of objects to be collected from Asana\",\n-                                \"displayName\": \"Object Type\",\n+                            \"HTTP Method\": {\n+                                \"defaultValue\": \"GET\",\n+                                \"description\": \"HTTP request method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS). Arbitrary methods are also supported. Methods other than POST, PUT and PATCH will be sent without a message body.\",\n+                                \"displayName\": \"HTTP Method\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-object-type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP Method\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-output-batch-size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of items batched together in a single Flow File. If set to 1 (default), then each item is transferred in a separate Flow File and each will have an asana.gid attribute, to help identifying the fetched item on the server side, if needed. If the batch size is greater than 1, then the specified amount of items are batched together in a single Flow File as a Json array, and the Flow Files won't have the asana.gid attribute.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"HTTP URL\": {\n+                                \"description\": \"HTTP remote URL including a scheme of http or https, as well as a hostname or IP address with optional port and path elements. Any encoding of the URL must be done by the user.\",\n+                                \"displayName\": \"HTTP URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-output-batch-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-project-name\": {\n-                                \"dependencies\": [\n+                            \"HTTP/2 Disabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-project-members\",\n-                                            \"asana-collect-project-status-attachments\",\n-                                            \"asana-collect-project-status-updates\",\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\",\n-                                            \"asana-collect-project-events\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"Fetch only objects in this project. Case sensitive.\",\n-                                \"displayName\": \"Project Name\",\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"Disable negotiation of HTTP/2 protocol. HTTP/2 requires TLS. HTTP/1.1 protocol supported is required when HTTP/2 is disabled.\",\n+                                \"displayName\": \"HTTP/2 Disabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-project-name\",\n+                                \"name\": \"HTTP/2 Disabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-section-name\": {\n-                                \"dependencies\": [\n+                            \"Request Body Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fetch only objects in this section. Case sensitive.\",\n-                                \"displayName\": \"Section Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-section-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"asana-tag-name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Fetch only objects having this tag. Case sensitive.\",\n-                                \"displayName\": \"Tag\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-tag-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"asana-team-name\": {\n+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"asana-collect-team-members\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n                                     }\n                                 ],\n-                                \"description\": \"Team name. Case sensitive.\",\n-                                \"displayName\": \"Team\",\n+                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n+                                \"displayName\": \"Request Body Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-team-name\",\n+                                \"name\": \"Request Body Enabled\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"Cache service to store fetched item fingerprints. These, from the last successful query are stored, in order to enable incremental loading and change detection.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Newly collected objects are routed to this relationship.\",\n-                                \"name\": \"new\"\n-                            },\n-                            {\n-                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n-                                \"name\": \"updated\"\n-                            },\n-                            {\n-                                \"description\": \"Notification about deleted objects are routed to this relationship. Flow files will not have any payload. IDs of the resources no longer exist are carried by the asana.gid attribute of the generated FlowFiles.\",\n-                                \"name\": \"removed\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"asana\",\n-                            \"ingest\",\n-                            \"source\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n-                        \"typeDescription\": \"This processor collects data from Asana\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Global ID of the object in Asana.\",\n-                                \"name\": \"asana.gid\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-evtx-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-evtx-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"granularity\": {\n+                            \"Request Chunked Transfer-Encoding Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Chunk\",\n-                                        \"value\": \"Chunk\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"File\"\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Chunk\",\n-                                \"description\": \"Output flow file for each Record, Chunk, or File encountered in the event log\",\n-                                \"displayName\": \"Granularity\",\n+                                \"description\": \"Enable sending HTTP requests with the Transfer-Encoding Header set to chunked, and disable sending the Content-Length Header. Transfer-Encoding applies to the body in HTTP/1.1 requests as described in RFC 7230 Section 3.3.1\",\n+                                \"displayName\": \"Request Chunked Transfer-Encoding Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"granularity\",\n+                                \"name\": \"Request Chunked Transfer-Encoding Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename of the evtx file\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that was successfully converted from evtx to XML\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that encountered an exception during conversion will be transferred to this relationship with as much parsing as possible done\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The unmodified input FlowFile will be transferred to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Any bad chunks of records will be transferred to this relationship in their original binary form\",\n-                                \"name\": \"bad chunk\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"event\",\n-                            \"evtx\",\n-                            \"file\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"windows\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.evtx.ParseEvtx\",\n-                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The output filename\",\n-                                \"name\": \"filename\"\n                             },\n-                            {\n-                                \"description\": \"The output filetype (application/xml for success and failure relationships, original value for bad chunk and original relationships)\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-lookup-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"Request Content-Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n-                                        \"displayName\": \"Default Format\",\n-                                        \"value\": \"default\"\n+                                        \"description\": \"Content encoding not applied during transmission\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n                                     },\n                                     {\n-                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n+                                \"defaultValue\": \"DISABLED\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                                \"description\": \"HTTP Content-Encoding applied to request body during transmission. The receiving server must support the selected encoding to avoid request failures.\",\n+                                \"displayName\": \"Request Content-Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Content-Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"Request Content-Type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                                \"description\": \"HTTP Content-Type Header applied to when sending an HTTP request body for PATCH, POST, or PUT methods. The Content-Type defaults to application/octet-stream when not configured.\",\n+                                \"displayName\": \"Request Content-Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"name\": \"Request Content-Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n+                            \"Request Date Header Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable sending HTTP Date Header on HTTP requests as described in RFC 7231 Section 7.1.1.2.\",\n+                                \"displayName\": \"Request Date Header Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n+                                \"name\": \"Request Date Header Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"Request Digest Authentication Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Request Username\",\n+                                        \"propertyName\": \"Request Username\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n+                                \"displayName\": \"Request Digest Authentication Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"csv-file\": {\n-                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n-                                \"displayName\": \"CSV File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"csv-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Request Digest Authentication Enabled\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\n+                            \"Request Failure Penalization Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable penalization of request FlowFiles when receiving HTTP response with a status code between 400 and 499.\",\n+                                \"displayName\": \"Request Failure Penalization Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-duplicates\",\n-                                \"required\": true,\n+                                \"name\": \"Request Failure Penalization Enabled\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-key-column\": {\n-                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"Request Header Attributes Pattern\": {\n+                                \"description\": \"Regular expression that defines which FlowFile attributes to send as HTTP headers in the request. If not defined, no attributes are sent as headers. Dynamic properties will be always be sent as headers. The dynamic property name will be the header key and the dynamic property value, interpreted as Expression Language, will be the header value. Attributes and their values are limited to ASCII characters due to the requirement of the HTTP protocol.\",\n+                                \"displayName\": \"Request Header Attributes Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Header Attributes Pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"csv\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.CSVRecordLookupService\",\n-                        \"typeDescription\": \"A reloadable CSV file-based lookup service. When the lookup key is found in the CSV file, the columns are returned as a Record. All returned fields will be strings. The first line of the csv file is considered as header.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"character-encoding\": {\n+                            \"Request Multipart Form-Data Filename Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n+                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n+                                        \"propertyName\": \"Request Multipart Form-Data Name\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\n+                                \"description\": \"Enable sending the FlowFile filename attribute as the filename parameter in the Content-Disposition Header for multipart/form-data HTTP requests.\",\n+                                \"displayName\": \"Request Multipart Form-Data Filename Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-encoding\",\n-                                \"required\": true,\n+                                \"name\": \"Request Multipart Form-Data Filename Enabled\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-map-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Request Multipart Form-Data Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Request Body Enabled\",\n+                                        \"propertyName\": \"Request Body Enabled\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sending HTTP request body formatted using multipart/form-data and using the form name configured.\",\n+                                \"displayName\": \"Request Multipart Form-Data Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Request Multipart Form-Data Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Request OAuth2 Access Token Provider\": {\n+                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n+                                \"displayName\": \"Request OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-map-cache-service\",\n-                                \"required\": true,\n+                                \"name\": \"Request OAuth2 Access Token Provider\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"map\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.DistributedMapCacheLookupService\",\n-                        \"typeDescription\": \"Allows to choose a distributed map cache client to retrieve the value associated to a key. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"configuration-file\": {\n-                                \"description\": \"A configuration file\",\n-                                \"displayName\": \"Configuration File\",\n+                            \"Request Password\": {\n+                                \"description\": \"The password provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Request Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"configuration-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Request User-Agent\": {\n+                                \"description\": \"HTTP User-Agent Header applied to requests. RFC 7231 Section 5.5.3 describes recommend formatting.\",\n+                                \"displayName\": \"Request User-Agent\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Request User-Agent\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"properties\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.PropertiesFileLookupService\",\n-                        \"typeDescription\": \"A reloadable properties file-based lookup service\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"All dynamic properties are added as HTTP headers with the name as the header name and the value as the header value.\",\n+                            \"Request Username\": {\n+                                \"description\": \"The username provided for authentication of HTTP requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Request Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Body Attribute Name\": {\n+                                \"description\": \"FlowFile attribute name used to write an HTTP response body for FlowFiles transferred to the Original relationship.\",\n+                                \"displayName\": \"Response Body Attribute Name\",\n+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"*\",\n-                                \"value\": \"*\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Response Body Attribute Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Body Attribute Size\": {\n+                                \"defaultValue\": \"256\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n+                                        \"propertyName\": \"Response Body Attribute Name\"\n+                                    }\n+                                ],\n+                                \"description\": \"Maximum size in bytes applied when writing an HTTP response body to a FlowFile attribute. Attributes exceeding the maximum will be truncated.\",\n+                                \"displayName\": \"Response Body Attribute Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"Response Body Attribute Size\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-authentication-strategy\": {\n+                            \"Response Body Ignored\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Authentication\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Basic Authentication\",\n-                                        \"displayName\": \"Basic\",\n-                                        \"value\": \"BASIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n+                                \"displayName\": \"Response Body Ignored\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Body Ignored\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Cache Enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"OAuth2 Authentication\",\n-                                        \"displayName\": \"OAuth2\",\n-                                        \"value\": \"OAUTH2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Authentication strategy to use with REST service.\",\n-                                \"displayName\": \"Authentication Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n+                                \"displayName\": \"Response Cache Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-authentication-strategy\",\n+                                \"name\": \"Response Cache Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-basic-auth-password\": {\n+                            \"Response Cache Size\": {\n+                                \"defaultValue\": \"10MB\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n+                                        \"propertyName\": \"Response Cache Enabled\"\n                                     }\n                                 ],\n-                                \"description\": \"The password to be used by the client to authenticate against the Remote URL.\",\n-                                \"displayName\": \"Basic Authentication Password\",\n+                                \"description\": \"Maximum size of HTTP response cache in bytes. Caching responses considers ETag and other headers.\",\n+                                \"displayName\": \"Response Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-basic-auth-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Cache Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-basic-auth-username\": {\n-                                \"dependencies\": [\n+                            \"Response Cookie Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACCEPT_ALL\",\n+                                        \"value\": \"ACCEPT_ALL\"\n                                     }\n                                 ],\n-                                \"description\": \"The username to be used by the client to authenticate against the Remote URL.  Cannot include control characters (0-31), ':', or DEL (127).\",\n-                                \"displayName\": \"Basic Authentication Username\",\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"description\": \"Strategy for accepting and persisting HTTP cookies. Accepting cookies enables persistence across multiple requests.\",\n+                                \"displayName\": \"Response Cookie Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-basic-auth-username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Cookie Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-connection-timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for connection to remote service.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"Response FlowFile Naming Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"FlowFile filename attribute will be a random value.\",\n+                                        \"displayName\": \"RANDOM\",\n+                                        \"value\": \"RANDOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"FlowFile filename attribute will be extracted from the remote URL path. The attribute may contain URL encoded characters. If the path doesn't exist, the attribute will be a random value.\",\n+                                        \"displayName\": \"URL_PATH\",\n+                                        \"value\": \"URL_PATH\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"RANDOM\",\n+                                \"description\": \"Determines the strategy used for setting the filename attribute of FlowFiles transferred to the Response relationship.\",\n+                                \"displayName\": \"Response FlowFile Naming Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-connection-timeout\",\n+                                \"name\": \"Response FlowFile Naming Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-digest-auth\": {\n+                            \"Response Generation Required\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                \"description\": \"Enable generation and transfer of a FlowFile to the Response relationship regardless of HTTP response received.\",\n+                                \"displayName\": \"Response Generation Required\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Generation Required\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Header Request Attributes Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether to communicate with the website using Digest Authentication. 'Basic Authentication Username' and 'Basic Authentication Password' are used for authentication.\",\n-                                \"displayName\": \"Use Digest Authentication\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable adding HTTP response headers as attributes to FlowFiles transferred to the Original relationship.\",\n+                                \"displayName\": \"Response Header Request Attributes Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-digest-auth\",\n+                                \"name\": \"Response Header Request Attributes Enabled\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n+                            \"Response Redirects Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"OAUTH2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable following HTTP redirects sent with HTTP 300 series responses as described in RFC 7231 Section 6.4.\",\n+                                \"displayName\": \"Response Redirects Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-oauth2-access-token-provider\",\n+                                \"name\": \"Response Redirects Enabled\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"rest-lookup-read-timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for response from remote service.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Socket Idle Connections\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"Maximum number of idle connections to the HTTP URL.\",\n+                                \"displayName\": \"Socket Idle Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-read-timeout\",\n+                                \"name\": \"Socket Idle Connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-record-path\": {\n-                                \"description\": \"An optional record path that can be used to define where in a record to get the real data to merge into the record set to be enriched. See documentation for examples of when this might be useful.\",\n-                                \"displayName\": \"Record Path\",\n+                            \"Socket Idle Timeout\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"Maximum time to wait before closing idle connections to the HTTP URL.\",\n+                                \"displayName\": \"Socket Idle Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Socket Idle Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-record-reader\": {\n-                                \"description\": \"The record reader to use for loading the payload and handling it as a record set.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Socket Read Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Maximum time to wait for receiving responses from a socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Socket Read Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-record-reader\",\n+                                \"name\": \"Socket Read Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-response-handling-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Successful and unsuccessful HTTP responses are returned.\",\n-                                        \"displayName\": \"Returned\",\n-                                        \"value\": \"RETURNED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Successful HTTP responses are returned and unsuccessful HTTP responses generate an exception.\",\n-                                        \"displayName\": \"Evaluated\",\n-                                        \"value\": \"EVALUATED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RETURNED\",\n-                                \"description\": \"Whether to return all responses or throw errors for unsuccessful HTTP status codes.\",\n-                                \"displayName\": \"Response Handling Strategy\",\n+                            \"Socket Write Timeout\": {\n+                                \"defaultValue\": \"15 secs\",\n+                                \"description\": \"Maximum time to wait for write operations while sending requests from a socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Socket Write Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-response-handling-strategy\",\n+                                \"name\": \"Socket Write Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: SOCKS, HTTP + AuthN In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-ssl-context-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"rest-lookup-url\": {\n-                                \"description\": \"The URL for the REST endpoint. Expression language is evaluated against the lookup key/value pairs, not flowfile attributes.\",\n-                                \"displayName\": \"URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"rest-lookup-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Original\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"name\": \"Failure\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n+                                \"name\": \"Retry\"\n+                            },\n+                            {\n+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Response\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 400 an 499.\",\n+                                \"name\": \"No Retry\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n+                            \"client\",\n                             \"http\",\n-                            \"json\",\n-                            \"lookup\",\n-                            \"rest\",\n-                            \"xml\"\n+                            \"https\",\n+                            \"rest\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n-                        \"typeDescription\": \"Use a REST service to look up values.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.InvokeHTTP\",\n+                        \"typeDescription\": \"An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. When the HTTP Method is PUT, POST or PATCH, the FlowFile contents are included as the body of the request and FlowFile attributes are converted to HTTP headers, optionally, based on configuration properties.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The status code that is returned\",\n+                                \"name\": \"invokehttp.status.code\"\n+                            },\n+                            {\n+                                \"description\": \"The status message that is returned\",\n+                                \"name\": \"invokehttp.status.message\"\n+                            },\n+                            {\n+                                \"description\": \"In the instance where the status code received is not a success (2xx) then the response body will be put to the 'invokehttp.response.body' attribute of the request FlowFile.\",\n+                                \"name\": \"invokehttp.response.body\"\n+                            },\n+                            {\n+                                \"description\": \"The original request URL\",\n+                                \"name\": \"invokehttp.request.url\"\n+                            },\n+                            {\n+                                \"description\": \"Duration (in milliseconds) of the HTTP call to the external endpoint\",\n+                                \"name\": \"invokehttp.request.duration\"\n+                            },\n+                            {\n+                                \"description\": \"The URL that was ultimately requested after any redirects were followed\",\n+                                \"name\": \"invokehttp.response.url\"\n+                            },\n+                            {\n+                                \"description\": \"The transaction ID that is returned after reading the response\",\n+                                \"name\": \"invokehttp.tx.id\"\n+                            },\n+                            {\n+                                \"description\": \"The DN of the remote server\",\n+                                \"name\": \"invokehttp.remote.dn\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"invokehttp.java.exception.class\"\n+                            },\n+                            {\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"invokehttp.java.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"If the 'Put Response Body In Attribute' property is set then whatever it is set to will become the attribute key and the value would be the body of the HTTP response.\",\n+                                \"name\": \"user-defined\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The format of the CSV is configured by using the properties of this Controller Service, such as Value Separator\",\n-                                        \"displayName\": \"Custom Format\",\n-                                        \"value\": \"custom\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n-                                        \"displayName\": \"RFC 4180\",\n-                                        \"value\": \"rfc-4180\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"excel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n-                                        \"displayName\": \"Tab-Delimited\",\n-                                        \"value\": \"tdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"CSV data follows the format used by MySQL\",\n-                                        \"displayName\": \"MySQL Format\",\n-                                        \"value\": \"mysql\"\n-                                    },\n+                            \"Enrichment Record Reader\": {\n+                                \"description\": \"The Record Reader for reading the 'enrichment' FlowFile\",\n+                                \"displayName\": \"Enrichment Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enrichment Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Insertion Record Path\": {\n+                                \"defaultValue\": \"/\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n-                                        \"displayName\": \"Informix Unload\",\n-                                        \"value\": \"informix-unload\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"Insert Enrichment Fields\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies where in the 'original' Record the 'enrichment' Record's fields should be inserted. Note that if the RecordPath does not point to any existing field in the original Record, the enrichment will not be inserted.\",\n+                                \"displayName\": \"Insertion Record Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Insertion Record Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Join Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n+                                        \"description\": \"The output is a Record that contains two fields: (1) 'original', containing the Record from the original FlowFile and (2) 'enrichment' containing the corresponding Record from the enrichment FlowFile. Records will be correlated based on their index in the FlowFile. If one FlowFile has more Records than the other, a null value will be used.\",\n+                                        \"displayName\": \"Wrapper\",\n+                                        \"value\": \"Wrapper\"\n                                     },\n                                     {\n-                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n-                                        \"displayName\": \"Default Format\",\n-                                        \"value\": \"default\"\n+                                        \"description\": \"The output is derived by evaluating a SQL SELECT statement that allows for two tables: 'original' and 'enrichment'. This allows for SQL JOIN statements to be used in order to correlate the Records of the two FlowFiles, so the index in which the Record is encountered in the FlowFile does not matter.\",\n+                                        \"displayName\": \"SQL\",\n+                                        \"value\": \"SQL\"\n                                     },\n                                     {\n-                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\n+                                        \"description\": \"The enrichment is joined together with the original FlowFile by placing all fields of the enrichment Record into the corresponding Record from the original FlowFile. Records will be correlated based on their index in the FlowFile.\",\n+                                        \"displayName\": \"Insert Enrichment Fields\",\n+                                        \"value\": \"Insert Enrichment Fields\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n+                                \"defaultValue\": \"Wrapper\",\n+                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n+                                \"displayName\": \"Join Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n+                                \"name\": \"Join Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Encoding that is used to decode the CSV file.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Maximum number of Bins\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n+                                \"displayName\": \"Maximum number of Bins\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum number of Bins\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n+                            \"Original Record Reader\": {\n+                                \"description\": \"The Record Reader for reading the 'original' FlowFile\",\n+                                \"displayName\": \"Original Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Original Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Record Writer\": {\n+                                \"description\": \"The Record Writer to use for writing the results. If the Record Writer is configured to inherit the schema from the Record, the schema that it will inherit will be the result of merging both the 'original' record schema and the 'enrichment' record schema.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"SQL\": {\n+                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to denote the start of a comment. Any line that begins with this comment will be ignored.\",\n-                                \"displayName\": \"Comment Marker\",\n+                                \"description\": \"The SQL SELECT statement to evaluate. Expression Language may be provided, but doing so may result in poorer performance. Because this Processor is dealing with two FlowFiles at a time, it's also important to understand how attributes will be referenced. If both FlowFiles have an attribute with the same name but different values, the Expression Language will resolve to the value provided by the 'enrichment' FlowFile.\",\n+                                \"displayName\": \"SQL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"name\": \"SQL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Specifies the maximum amount of time to wait for the second FlowFile once the first arrives at the processor, after which point the first FlowFile will be routed to the 'timeout' relationship.\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to escape characters that would otherwise have a specific meaning to the CSV Parser. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Escape Character at runtime, then it will be skipped and the default Escape Character will be used. Setting it to an empty string means no escape character should be used.\",\n-                                \"displayName\": \"Escape Character\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The character that is used to quote values so that escape characters do not have to be used. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Quote Character at runtime, then it will be skipped and the default Quote Character will be used.\",\n-                                \"displayName\": \"Quote Character\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n+                                \"name\": \"timeout\"\n                             },\n-                            \"Quote Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n+                            {\n+                                \"description\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n+                                \"name\": \"joined\"\n+                            },\n+                            {\n+                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Both of the incoming FlowFiles ('original' and 'enrichment') will be routed to this Relationship. I.e., this is the 'original' version of both of these FlowFiles.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"This Processor will load into heap all FlowFiles that are on its incoming queues. While it loads the FlowFiles themselves, and not their content, the FlowFile attributes can be very memory intensive. Additionally, if the Join Strategy is set to SQL, the SQL engine may require buffering the entire contents of the enrichment FlowFile for each concurrent task. See Processor's Additional Details for more details and for steps on how to mitigate these concerns.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"combine\",\n+                            \"enrichment\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"sql\",\n+                            \"streams\",\n+                            \"wrap\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.JoinEnrichment\",\n+                        \"typeDescription\": \"Joins together Records from two different FlowFiles where one FlowFile, the 'original' contains arbitrary records and the second FlowFile, the 'enrichment' contains additional data that should be used to enrich the first. See Additional Details for more information on how to configure this processor and the different use cases that it aims to accomplish.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\nLeave the RecordWriter property unset.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog; leave it empty to include all catalogs.\\nSet the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; leave it empty to include all Schemas.\\nSet the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included; leave it empty to include all Tables.\\n\\nConnect the \\\"success\\\" relationship to GenerateTableFetch.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to match the appropriate value for your RDBMS vendor.\\nSet \\\"Table Name\\\" to `${db.table.fullname}`\\nLeave the RecordWriter property unset.\\n\\nConnect the \\\"success\\\" relationship to ExecuteSQLRecord.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nConfigure the \\\"Record Writer\\\" property to specify a Record Writer that is appropriate for the desired output data type.\\nLeave the \\\"SQL select query\\\" unset.\\n\\nConnect the \\\"success\\\" relationship to the next Processor in the flow.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n+                                \"description\": \"Perform a full load of a database, retrieving all rows from all tables, or a specific set of tables.\",\n+                                \"keywords\": [\n+                                    \"full load\",\n+                                    \"rdbms\",\n+                                    \"jdbc\",\n+                                    \"database\"\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Trim Fields\": {\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"list-db-include-count\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n+                                \"displayName\": \"Include Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"list-db-include-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The character that is used to separate values/fields in a CSV Record. If the property has been specified via Expression Language but the expression gets evaluated to an invalid Value Separator at runtime, then it will be skipped and the default Value Separator will be used.\",\n-                                \"displayName\": \"Value Separator\",\n+                            \"list-db-refresh-interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The amount of time to elapse before resetting the processor state, thereby causing all current tables to be listed. During this interval, the processor may continue to run, but tables that have already been listed will not be re-listed. However new/added tables will be listed as the processor runs. A value of zero means the state will never be automatically reset, the user must Clear State manually.\",\n+                                \"displayName\": \"Refresh Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-refresh-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"csv-file\": {\n-                                \"description\": \"Path to a CSV File in which the key value pairs can be looked up.\",\n-                                \"displayName\": \"CSV File\",\n+                            \"list-db-tables-catalog\": {\n+                                \"description\": \"The name of a catalog from which to list database tables. The name must match the catalog name as it is stored in the database. If the property is not set, the catalog name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a catalog will be listed.\",\n+                                \"displayName\": \"Catalog\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"csv-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-catalog\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\n+                            \"list-db-tables-db-connection\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-duplicates\",\n+                                \"name\": \"list-db-tables-db-connection\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"list-db-tables-name-pattern\": {\n+                                \"description\": \"A pattern for matching tables in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the table name as it is stored in the database. If the property is not set, all tables will be retrieved.\",\n+                                \"displayName\": \"Table Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-name-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-key-column\": {\n-                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"list-db-tables-schema-pattern\": {\n+                                \"description\": \"A pattern for matching schemas in the database. Within a pattern, \\\"%\\\" means match any substring of 0 or more characters, and \\\"_\\\" means match any one character. The pattern must match the schema name as it is stored in the database. If the property is not set, the schema name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a schema will be listed.\",\n+                                \"displayName\": \"Schema Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-schema-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"Lookup value column.\",\n-                                \"displayName\": \"Lookup Value Column\",\n+                            \"list-db-tables-types\": {\n+                                \"defaultValue\": \"TABLE\",\n+                                \"description\": \"A comma-separated list of table types to include. For example, some databases support TABLE and VIEW types. If the property is not set, tables of all types will be returned.\",\n+                                \"displayName\": \"Table Types\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-value-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-types\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of tables, the timestamp of the query is stored. This allows the Processor to not re-list tables the next time that the Processor is run. Specifying the refresh interval in the processor properties will indicate that when the processor detects the interval has elapsed, the state will be reset and tables will be re-listed as a result. This processor is meant to be run on the primary node only.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"csv\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"reloadable\",\n-                            \"value\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"list\",\n+                            \"sql\",\n+                            \"table\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.SimpleCsvFileLookupService\",\n-                        \"typeDescription\": \"A reloadable CSV file-based lookup service. The first line of the csv file is considered as header.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n+                        \"typeDescription\": \"Generates a set of flow files, each containing attributes corresponding to metadata about a table from a database connection. Once metadata about a table has been fetched, it will not be fetched again until the Refresh Interval (if set) has elapsed, or until state has been manually cleared.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"A key that can be looked up\",\n-                                \"value\": \"The value for the key\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"Contains the name of a database table from the connection\",\n+                                \"name\": \"db.table.name\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Contains the name of the catalog to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.catalog\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n-                        \"typeDescription\": \"Allows users to add key/value pairs as User-defined Properties. Each property that is added can be looked up by Property Name. The coordinates that are passed to the lookup must contain the key 'key'.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n+                                \"description\": \"Contains the name of the schema to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.schema\"\n+                            },\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"configuration-file\": {\n-                                \"description\": \"A configuration file\",\n-                                \"displayName\": \"Configuration File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"configuration-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"Contains the fully-qualifed table name (possibly including catalog, schema, etc.)\",\n+                                \"name\": \"db.table.fullname\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Contains the type of the database table from the connection. Typical types are \\\"TABLE\\\", \\\"VIEW\\\", \\\"SYSTEM TABLE\\\", \\\"GLOBAL TEMPORARY\\\", \\\"LOCAL TEMPORARY\\\", \\\"ALIAS\\\", \\\"SYNONYM\\\"\",\n+                                \"name\": \"db.table.type\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Contains the name of a database table from the connection\",\n+                                \"name\": \"db.table.remarks\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the number of rows in the table\",\n+                                \"name\": \"db.table.count\"\n                             }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"reloadable\",\n-                            \"value\",\n-                            \"xml\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.XMLFileLookupService\",\n-                        \"typeDescription\": \"A reloadable XML file-based lookup service. This service uses Apache Commons Configuration. Example XML configuration file and how to access specific configuration can be found at http://commons.apache.org/proper/commons-configuration/userguide/howto_hierarchical.html. External entity processing is disabled.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Cache Expiration\": {\n-                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Cache Expiration\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-precision\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n-                                \"displayName\": \"Default Decimal Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbf-default-scale\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n-                                \"displayName\": \"Default Decimal Scale\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbrecord-lookup-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n-                                \"displayName\": \"Clear Cache on Enabled\",\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"dbrecord-lookup-key-column\": {\n-                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-table-name\": {\n-                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-value-columns\": {\n-                                \"description\": \"A comma-delimited list of columns in the table that will be returned when the lookup key matches. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Value Columns\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-value-columns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"database\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"rdbms\",\n-                            \"record\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n-                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified columns (or all if Lookup Value Columns are not specified) are returned as a Record. Only one row will be returned for each lookup, duplicate database entries are ignored.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Cache Expiration\": {\n-                                \"description\": \"Time interval to clear all cache entries. If the Cache Size is zero then this property is ignored.\",\n-                                \"displayName\": \"Cache Expiration\",\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Cache Expiration\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"dbrecord-lookup-cache-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies how many lookup values/records should be cached. The cache is shared for all tables and keeps a map of lookup values to records. Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n-                                \"displayName\": \"Cache Size\",\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-cache-size\",\n-                                \"required\": true,\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to clear the cache when this service is enabled. If the Cache Size is zero then this property is ignored. Clearing the cache when the service is enabled ensures that the service will first go to the database to get the most recent data.\",\n-                                \"displayName\": \"Clear Cache on Enabled\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-key-column\": {\n-                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-table-name\": {\n-                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"The column whose value will be returned when the Lookup value is matched\",\n-                                \"displayName\": \"Lookup Value Column\",\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-value-column\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"database\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"rdbms\",\n-                            \"reloadable\",\n-                            \"value\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.db.SimpleDatabaseLookupService\",\n-                        \"typeDescription\": \"A relational-database-based lookup service. When the lookup key is found in the database, the specified lookup value column is returned. Only one value will be returned for each lookup, duplicate database entries are ignored.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"database-file\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"database-file\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-anonymous-ip\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about whether or not the IP address belongs to an anonymous network should be returned.\",\n-                                \"displayName\": \"Lookup Anonymous IP Information\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-anonymous-ip\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-city\": {\n+                            \"Transfer Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not information about the geographic information, such as cities, corresponding to the IP address should be returned\",\n-                                \"displayName\": \"Lookup Geo Enrichment\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-city\",\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-connection-type\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Connection Type corresponding to the IP address should be returned. If true, the lookup will contain a 'connectionType' field that (if populated) will contain a value of 'Dialup', 'Cable/DSL', 'Corporate', or 'Cellular'\",\n-                                \"displayName\": \"Lookup Connection Type\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-connection-type\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-domain\": {\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"follow-symlink\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Domain Name corresponding to the IP address should be returned. If true, the lookup will contain second-level domain information, such as foo.com but will not contain bar.foo.com\",\n-                                \"displayName\": \"Lookup Domain Name\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-domain\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-isp\": {\n+                            \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n-                                \"displayName\": \"Lookup ISP\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-isp\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"anonymous\",\n-                            \"cellular\",\n-                            \"domain\",\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"ipgeo\",\n-                            \"isp\",\n-                            \"lookup\",\n-                            \"maxmind\",\n-                            \"tor\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n-                        \"typeDescription\": \"A lookup service that provides several types of enrichment information for IP addresses. The service is configured by providing a MaxMind Database file and specifying which types of enrichment should be provided for an IP Address or Hostname. Each type of enrichment is a separate lookup, so configuring the service to provide all of the available enrichment data may be slower than returning only a portion of the available enrichments. In order to use this service, a lookup must be performed using key of 'ip' and a value that is a valid IP address or hostname. View the Usage of this component and choose to view Additional Details for more information, such as the Schema that pertains to the information that is returned.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-compress-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-compress-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Input Compression Strategy\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use the [mime.type] attribute from the input FlowFile to determine the format\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no compression\",\n-                                \"description\": \"The strategy to use for decompressing input FlowFiles\",\n-                                \"displayName\": \"Input Compression Strategy\",\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Compression Strategy\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Compression Level\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Compression Strategy\",\n-                                        \"propertyName\": \"Output Compression Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The compression level for output FlowFiles for supported formats. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n-                                \"displayName\": \"Output Compression Level\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Output Compression Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Hadoop\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n-                                    },\n-                                    {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no compression\",\n-                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n-                                \"displayName\": \"Output Compression Strategy\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Output Filename Strategy\": {\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n-                                        \"displayName\": \"Original\",\n-                                        \"value\": \"ORIGINAL\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"Remove the filename extension when decompressing and add a new extension for compressed output FlowFiles\",\n-                                        \"displayName\": \"Updated\",\n-                                        \"value\": \"UPDATED\"\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UPDATED\",\n-                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n-                                \"displayName\": \"Output Filename Strategy\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Filename Strategy\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Decompression Format is set to 'use mime.type attribute', this attribute is used to determine the decompression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchFTP\",\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"brotli\",\n-                            \"bzip2\",\n-                            \"compress\",\n-                            \"content\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"recompress\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n+                            \"files\",\n+                            \"ftp\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.compress.ModifyCompression\",\n-                        \"typeDescription\": \"Changes the compression algorithm used to compress the contents of a FlowFile by decompressing the contents of FlowFiles using a user-specified compression algorithm and recompressing the contents using the specified compression format properties. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListFTP\",\n+                        \"typeDescription\": \"Performs a listing of the files residing on an FTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchFTP in order to fetch those files.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The appropriate MIME Type is set based on the value of the Compression Format property. If the Compression Format is 'no compression' this attribute is removed as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The hostname of the FTP Server\",\n+                                \"name\": \"ftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was connected to on the FTP Server\",\n+                                \"name\": \"ftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the user that performed the FTP Listing\",\n+                                \"name\": \"ftp.listing.user\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the source file\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file on the FTP Server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70264,666 +71015,1179 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \"[^\\\\.].*\",\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n+                            \"Include File Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to include information such as the file's Last Modified Time and Owner as FlowFile Attributes. Depending on the File System being used, gathering this information can be expensive and as a result should be disabled. This is especially true of remote file shares.\",\n+                                \"displayName\": \"Include File Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"Include File Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which files to pull files\",\n+                                \"displayName\": \"Input Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Input Directory Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Input Directory is located on a local disk. State will be stored locally on each node in the cluster.\",\n+                                        \"displayName\": \"Local\",\n+                                        \"value\": \"Local\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Input Directory is located on a remote system. State will be stored across the cluster so that the listing can be performed on Primary Node Only and another node can pick up where the last node left off, if the Primary Node changes\",\n+                                        \"displayName\": \"Remote\",\n+                                        \"value\": \"Remote\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                                \"defaultValue\": \"Local\",\n+                                \"description\": \"Specifies where the Input Directory is located. This is used to determine whether state should be stored locally or across the cluster.\",\n+                                \"displayName\": \"Input Directory Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n+                                \"name\": \"Input Directory Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"et-node-identifier\": {\n+                                \"defaultValue\": \"${hostname()}\",\n+                                \"description\": \"The configured value will be appended to the cache key so that listing state can be tracked per NiFi node rather than cluster wide when tracking state is scoped to LOCAL. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Node Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-node-identifier\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-additional-filters\": {\n-                                \"description\": \"One or more query filters in JSON syntax, not Lucene syntax. Ex: [{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}, {\\\"match\\\":{\\\"anotherfield\\\":\\\"anothervalue\\\"}}]. These filters wil be used as part of a Bool query's filter.\",\n-                                \"displayName\": \"Additional Filters\",\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-additional-filters\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"es-rest-query-aggs\": {\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-script-fields\": {\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n+                            \"max-listing-time\": {\n+                                \"defaultValue\": \"3 mins\",\n+                                \"description\": \"The maximum amount of time that listing any single directory is expected to take. If the listing for the directory specified by the 'Input Directory' property, or the listing of any subdirectory (if 'Recurse' is set to true) takes longer than this amount of time, a warning bulletin will be generated for each directory listing that exceeds this amount of time.\",\n+                                \"displayName\": \"Max Directory Listing Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-listing-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-sort\": {\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n+                            \"max-operation-time\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum amount of time that any single disk operation is expected to take. If any disk operation takes longer than this amount of time, a warning bulletin will be generated for each operation that exceeds this amount of time.\",\n+                                \"displayName\": \"Max Disk Operation Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-operation-time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-range-field\": {\n-                                \"description\": \"Field to be tracked as part of an Elasticsearch Range query using a \\\"gt\\\" bound match. This field must exist within the Elasticsearch document for it to be retrieved.\",\n-                                \"displayName\": \"Range Query Field\",\n+                            \"max-performance-metrics\": {\n+                                \"defaultValue\": \"100000\",\n+                                \"description\": \"If the 'Track Performance' property is set to 'true', this property indicates the maximum number of files whose performance metrics should be held onto. A smaller value for this property will result in less heap utilization, while a larger value may provide more accurate insights into how the disk access operations are performing\",\n+                                \"displayName\": \"Maximum Number of Files to Track\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-field\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-performance-metrics\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-range-format\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Initial Value\",\n-                                        \"propertyName\": \"es-rest-range-initial-value\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to a date with this format. If not specified, Elasticsearch will use the date format provided by the \\\"Range Query Field\\\"'s mapping. For valid syntax, see https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html\",\n-                                \"displayName\": \"Initial Value Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-range-initial-value\": {\n-                                \"description\": \"The initial value to use for the query if the processor has not run previously. If the processor has run previously and stored a value in its state, this property will be ignored. If no value is provided, and the processor has not previously run, no Range query bounds will be used, i.e. all documents will be retrieved in the specified \\\"Sort Order\\\".\",\n-                                \"displayName\": \"Initial Value\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-initial-value\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"es-rest-range-time-zone\": {\n-                                \"dependencies\": [\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Initial Value\",\n-                                        \"propertyName\": \"es-rest-range-initial-value\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to UTC with this time zone. Valid values are ISO 8601 UTC offsets, such as \\\"+01:00\\\" or \\\"-08:00\\\", and IANA time zone IDs, such as \\\"Europe/London\\\".\",\n-                                \"displayName\": \"Initial Value Date Time Zone\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-time-zone\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-size\": {\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n-                                \"required\": false,\n+                                \"name\": \"target-system-timestamp-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-sort-order\": {\n+                            \"track-performance\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"asc\",\n-                                        \"value\": \"asc\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"desc\",\n-                                        \"value\": \"desc\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"asc\",\n-                                \"description\": \"The order in which to sort the \\\"Range Query Field\\\". A \\\"sort\\\" clause for the \\\"Range Query Field\\\" field will be prepended to any provided \\\"Sort\\\" clauses. If a \\\"sort\\\" clause already exists for the \\\"Range Query Field\\\" field, it will not be updated.\",\n-                                \"displayName\": \"Sort Order\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not the Processor should track the performance of disk access operations. If true, all accesses to disk will be recorded, including the file being accessed, the information being obtained, and how long it takes. This is then logged periodically at a DEBUG level. While the amount of data will be capped, this option may still consume a significant amount of heap (controlled by the 'Maximum Number of Files to Track' property), but it can be very useful for troubleshooting purposes if performance is poor is degraded.\",\n+                                \"displayName\": \"Track Performance\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-sort-order\",\n+                                \"name\": \"track-performance\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp, trackingRangeValue) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. Whether the state is stored with a Local or Cluster scope depends on the value of the <Input Directory Location> property.\",\n                             \"scopes\": [\n-                                \"CLUSTER\"\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"scroll\",\n-                            \"search\"\n+                            \"file\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n-                        \"typeDescription\": \"A processor that repeatedly runs a paginated query against a field using a Range query to consume new Documents from an Elasticsearch index/query. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the Range query will automatically update the field constraint based on the last retrieved Document value.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListFile\",\n+                        \"typeDescription\": \"Retrieves a listing of files from the input directory. For each file listed, creates a FlowFile that represents the file so that it can be fetched in conjunction with FetchFile. This Processor is designed to run on Primary Node only in a cluster when 'Input Directory Location' is set to 'Remote'. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all the data. When 'Input Directory Location' is 'Local', the 'Execution' mode can be anything, and synchronization won't happen. Unlike GetFile, this Processor does not delete any data from the local filesystem.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on filesystem compared to the Input Directory property. For example, if Input Directory is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"abc/1/2/3/\\\".\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The absolute.path is set to the absolute path of the file's directory on filesystem. For example, if the Input Directory property is set to /tmp, then files picked up from /tmp will have the path attribute set to \\\"/tmp/\\\". If the Recurse Subdirectories property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to \\\"/tmp/abc/1/2/3/\\\".\",\n+                                \"name\": \"absolute.path\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"The user that owns the file in filesystem\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group that owns the file in filesystem\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the file in filesystem\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The permissions for the file in filesystem. This is formatted as 3 characters for the owner, 3 for the group, and 3 for other users. For example rw-rw-r--\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in filesystem was last modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in filesystem was last accessed as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in filesystem was created as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.creationTime\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Ciphers Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"NOTE: This property is used merely for migration from old NiFi version before state management was introduced at version 0.5.0. The stored value in the cache service will be migrated into the state when this processor is started at the first time. The specified Controller Service was used to maintain state about what had been pulled from the remote server so that if a new node begins pulling data, it won't duplicate all of the work that has been done. If not specified, the information was not shared across the cluster. This property did not need to be set for standalone instances of NiFi but was supposed to be configured if NiFi had been running within a cluster.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"File Filter Regex\": {\n+                                \"description\": \"Provides a Java Regular Expression for filtering Filenames; if a filter is supplied, only files whose names match that Regular Expression will be fetched\",\n+                                \"displayName\": \"File Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n+                                \"displayName\": \"Ignore Dotted Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Dotted Files\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter Regex\": {\n+                                \"description\": \"When Search Recursively is true, then only subdirectories whose path matches the given Regular Expression will be scanned\",\n+                                \"displayName\": \"Path Filter Regex\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"Remote Path\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Poll Batch Size\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n+                                \"displayName\": \"Remote Poll Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"follow-symlink\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"target-system-timestamp-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchSFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\"\n+                            \"files\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.DeleteByQueryElasticsearch\",\n-                        \"typeDescription\": \"Delete from an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListSFTP\",\n+                        \"typeDescription\": \"Performs a listing of the files residing on an SFTP server. For each file that is found on the remote server, a new FlowFile will be created with the filename attribute set to the name of the file on the remote server. This can then be used in conjunction with FetchSFTP in order to fetch those files.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The amount of time that it took to complete the delete operation in ms.\",\n-                                \"name\": \"elasticsearch.delete.took\"\n+                                \"description\": \"The hostname of the SFTP Server\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error running the delete.\",\n-                                \"name\": \"elasticsearch.delete.error\"\n+                                \"description\": \"The port that was connected to on the SFTP Server\",\n+                                \"name\": \"sftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the user that performed the SFTP Listing\",\n+                                \"name\": \"sftp.listing.user\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the source file\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file on the SFTP Server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The fully qualified name of the directory on the SFTP Server from which the file was pulled\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70931,187 +72195,119 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"bind-address\": {\n+                                \"description\": \"The address the FTP server should be bound to. If not set (or set to 0.0.0.0), the server binds to all available addresses (i.e. all network interfaces of the host machine).\",\n+                                \"displayName\": \"Bind Address\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bind-address\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"listening-port\": {\n+                                \"defaultValue\": \"2221\",\n+                                \"description\": \"The Port to listen on for incoming connections. On Linux, root privileges are required to use port numbers below 1024.\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"listening-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"password\": {\n+                                \"description\": \"If the Username is set, then a password must also be specified. The password provided by the client trying to log in to the FTP server will be checked against this password.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"get-es-attribute-name\": {\n-                                \"defaultValue\": \"elasticsearch.doc\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"get-es-destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the FlowFile attribute to use for the retrieved document output.\",\n-                                \"displayName\": \"Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"get-es-attribute-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"get-es-destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Output the retrieved document as a FlowFile attribute specified by the Attribute Name.\",\n-                                        \"displayName\": \"FlowFile Attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-content\",\n-                                \"description\": \"Indicates whether the retrieved document is written to the FlowFile content or a FlowFile attribute.\",\n-                                \"displayName\": \"Destination\",\n+                            \"ssl-context-service\": {\n+                                \"description\": \"Specifies the SSL Context Service that can be used to create secure connections. If an SSL Context Service is selected, then a keystore file must also be specified in the SSL Context Service. Without a keystore file, the processor cannot be started successfully.Specifying a truststore file is optional. If a truststore file is specified, client authentication is required (the client needs to send a certificate to the server).Regardless of the selected TLS protocol, the highest available protocol is used for the connection. For example if NiFi is running on Java 11 and TLSv1.2 is selected in the controller service as the preferred TLS Protocol, TLSv1.3 will be used (regardless of TLSv1.2 being selected) because Java 11 supports TLSv1.3.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"get-es-destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"get-es-id\": {\n-                                \"description\": \"The _id of the document to retrieve.\",\n-                                \"displayName\": \"Document Id\",\n+                            \"username\": {\n+                                \"description\": \"The name of the user that is allowed to log in to the FTP server. If a username is provided, a password must also be provided. If no username is specified, anonymous connections will be permitted.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"get-es-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Fetched documents are routed to this relationship.\",\n-                                \"name\": \"document\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n-                                \"name\": \"not_found\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Relationship for successfully received files.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\",\n-                            \"record\"\n+                            \"FTP\",\n+                            \"FTPS\",\n+                            \"ingest\",\n+                            \"listen\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\",\n-                        \"typeDescription\": \"Elasticsearch get processor that uses the official Elastic REST client libraries to fetch a single document from Elasticsearch by _id. Note that the full body of the document will be read into memory before being written to a FlowFile for transfer.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenFTP\",\n+                        \"typeDescription\": \"Starts an FTP server that listens on the specified port and transforms incoming files into FlowFiles. The URI of the service will be ftp://{hostname}:{port}. The default port is 2221.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"elasticsearch.index\"\n-                            },\n-                            {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"elasticsearch.type\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error fetching the document.\",\n-                                \"name\": \"elasticsearch.get.error\"\n+                                \"description\": \"The path pointing to the file's target directory. E.g.: file.txt is uploaded to /Folder1/SubFolder, then the value of the path attribute will be \\\"/Folder1/SubFolder/\\\" (note that it ends with a separator character).\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71119,440 +72315,527 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n+                            \"Authorized DN Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression to apply against the Subject's Distinguished Name of incoming connections. If the Pattern does not match the Subject DN, the the processor will respond with a status of HTTP 403 Forbidden.\",\n+                                \"displayName\": \"Authorized Subject DN Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n+                                \"name\": \"Authorized DN Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Base Path\": {\n+                                \"defaultValue\": \"contentListener\",\n+                                \"description\": \"Base path for incoming connections\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Base Path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"HTTP Headers to receive as Attributes (Regex)\": {\n+                                \"description\": \"Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes\",\n+                                \"displayName\": \"HTTP Headers to receive as Attributes (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTTP Headers to receive as Attributes (Regex)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HTTP_1_1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"HTTP Protocols\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Listening Port\": {\n+                                \"description\": \"The Port to listen on for incoming connections\",\n+                                \"displayName\": \"Listening Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Listening Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Data to Receive per Second\": {\n+                                \"description\": \"The maximum amount of data to receive per second; this allows the bandwidth to be throttled to a specified data rate; if not specified, the data rate is not throttled\",\n+                                \"displayName\": \"Max Data to Receive per Second\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Data to Receive per Second\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Unconfirmed Flowfile Time\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"The maximum amount of time to wait for a FlowFile to be confirmed before it is removed from the cache\",\n+                                \"displayName\": \"Max Unconfirmed Flowfile Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Unconfirmed Flowfile Time\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Return Code\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The HTTP return code returned after every HTTP call\",\n+                                \"displayName\": \"Return Code\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Return Code\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service enables support for HTTPS\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"authorized-issuer-dn-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression to apply against the Issuer's Distinguished Name of incoming connections. If the Pattern does not match the Issuer DN, the processor will respond with a status of HTTP 403 Forbidden.\",\n+                                \"displayName\": \"Authorized Issuer DN Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"authorized-issuer-dn-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"Inferred based on SSL Context Service properties. The presence of Trust Store properties implies REQUIRED, otherwise NONE is configured.\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"Requests the client certificate on handshake and validates if present but does not require it\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"Requests the client certificate on handshake and rejects the connection if it is not present and valid\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Does not request the client certificate on handshake\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client Authentication policy for TLS connections. Required when SSL Context Service configured.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"client-authentication\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"health-check-port\": {\n+                                \"description\": \"The port to listen on for incoming health check requests. If set, it must be different from the Listening Port. Configure this port if the processor is set to use two-way SSL and a load balancer that does not support client authentication for health check requests is used. Only /<base_path>/healthcheck service is available via this port and only GET and HEAD requests are supported. If the processor is set not to use SSL, SSL will not be used on this port, either. If the processor is set to use one-way SSL, one-way SSL will be used on this port. If the processor is set to use two-way SSL, one-way SSL will be used on this port (client authentication not required).\",\n+                                \"displayName\": \"Listening Port for Health Check Requests\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"health-check-port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-thread-pool-size\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The maximum number of threads to be used by the embedded Jetty server. The value can be set between 8 and 1000. The value of this property affects the performance of the flows and the operating system, therefore the default value should only be changed in justified cases. A value that is less than the default value may be suitable if only a small number of HTTP clients connect to the server. A greater value may be suitable if a large number of HTTP clients are expected to make requests to the server simultaneously.\",\n+                                \"displayName\": \"Maximum Thread Pool Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-thread-pool-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                            \"multipart-read-buffer-size\": {\n+                                \"defaultValue\": \"512 KB\",\n+                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n+                                \"displayName\": \"Multipart Read Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"multipart-read-buffer-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                            \"multipart-request-max-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n+                                \"displayName\": \"Multipart Request Max Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n+                                \"name\": \"multipart-request-max-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"el-rest-query-clause\": {\n+                            \"record-writer\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Relationship for successfully received FlowFiles\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"http\",\n+                            \"https\",\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"rest\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenHTTP\",\n+                        \"typeDescription\": \"Starts an HTTP Server and listens on a given base path to transform incoming requests into FlowFiles. The default URI of the Service will be http://{hostname}:{port}/contentListener. Only HEAD and POST requests are supported. GET, PUT, DELETE, OPTIONS and TRACE will result in an error and the HTTP response status code 405; CONNECT will also result in an error and the HTTP response status code 400. GET is supported on <service_URI>/healthcheck. If the service is available, it returns \\\"200 OK\\\" with the content \\\"OK\\\". The health check functionality can be configured to be accessible via a different port. For details see the documentation of the \\\"Listening Port for health check requests\\\" property.A Record Reader and Record Writer property can be enabled on the processor to process incoming requests as records. Record processing is not allowed for multipart requests and request in FlowFileV3 format (minifi).\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit.\",\n-                                \"displayName\": \"Search Results Split\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n+                                \"displayName\": \"Max Number of Worker Threads\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Max Number of TCP Connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-script-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-sort\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-size\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n-                            },\n-                            {\n-                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"get\",\n-                            \"json\",\n-                            \"query\",\n-                            \"read\"\n+                            \"listen\",\n+                            \"logs\",\n+                            \"relp\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to run a query (with aggregations) written with the Elasticsearch JSON DSL. It does not automatically paginate queries for the user. If an incoming relationship is added to this processor, it will use the flowfile's content for the query. Care should be taken on the size of the query because the entire response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenRELP\",\n+                        \"typeDescription\": \"Listens for RELP messages being sent to a given port over TCP. Each message will be acknowledged after successfully writing the message to a FlowFile. Each FlowFile will contain data portion of one or more RELP frames. In the case where the RELP frames contain syslog messages, the output of this processor can be sent to a ParseSyslog processor for further processing.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The command of the RELP frames.\",\n+                                \"name\": \"relp.command\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"relp.sender\"\n                             },\n                             {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"The sending port the messages were received over.\",\n+                                \"name\": \"relp.port\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n+                                \"name\": \"relp.txnr\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"The mime.type of the content which is text/plain\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71560,497 +72843,363 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n-                                    },\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of Syslog events to add to a single FlowFile. If multiple events are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n+                                \"description\": \"The maximum number of concurrent connections to accept Syslog messages in TCP mode.\",\n+                                \"displayName\": \"Max Number of TCP Connections\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"name\": \"Max Number of TCP Connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-clause\": {\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"TCP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between Syslog messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Message Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Message Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n+                            \"Parse Messages\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates if the processor should parse the Syslog messages. If set to false, each outgoing FlowFile will only contain the sender, protocol, and port, and no additional attributes.\",\n+                                \"displayName\": \"Parse Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"name\": \"Parse Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n+                            \"Port\": {\n+                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n                                     },\n                                     {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                                \"defaultValue\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive Syslog messages. Adjust this value appropriately based on the expected size of the incoming Syslog messages. When UDP is selected each buffer will hold one Syslog message. When TCP is selected messages are read from an incoming connection until the buffer is full, or the connection is closed. \",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n+                            \"SSL Context Service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"TCP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"es-rest-query-script-fields\": {\n-                                \"dependencies\": [\n+                            \"socket-keep-alive\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-sort\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-size\": {\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"TCP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n+                                \"description\": \"Whether or not to have TCP socket keep alive turned on. Timing details depend on operating system properties.\",\n+                                \"displayName\": \"Socket Keep Alive\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"socket-keep-alive\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n-                            },\n-                            {\n-                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Syslog messages that match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Syslog messages that do not match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"read\",\n-                            \"scroll\"\n+                            \"listen\",\n+                            \"logs\",\n+                            \"syslog\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. It will use the flowfile's content for the query unless the QUERY attribute is populated. Search After/Point in Time queries must include a valid \\\"sort\\\" field.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                        \"typeDescription\": \"Listens for Syslog messages being sent to a given port over TCP or UDP. Incoming messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The format of each message is: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If an incoming messages matches one of these patterns, the message will be parsed and the individual pieces will be placed in FlowFile attributes, with the original message in the content of the FlowFile. If an incoming message does not match one of these patterns it will not be parsed and the syslog.valid attribute will be set to false with the original message in the content of the FlowFile. Valid messages will be transferred on the success relationship, and invalid messages will be transferred on the invalid relationship.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n                             {\n-                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n+                            },\n+                            {\n+                                \"description\": \"An indicator of whether this message matched the expected formats. If this value is false, the other attributes will be empty and only the original message will be available in the content.\",\n+                                \"name\": \"syslog.valid\"\n+                            },\n+                            {\n+                                \"description\": \"The protocol over which the Syslog message was received.\",\n+                                \"name\": \"syslog.protocol\"\n+                            },\n+                            {\n+                                \"description\": \"The port over which the Syslog message was received.\",\n+                                \"name\": \"syslog.port\"\n+                            },\n+                            {\n+                                \"description\": \"The mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -72058,307 +73207,498 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the value is null or blank, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the Bulk request header\",\n-                                \"value\": \"The value of the Bulk request header\"\n-                            },\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body. If FlowFiles are batched, only the first FlowFile in the batch is used to evaluate property values.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Client Auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of worker threads available for servicing TCP connections.\",\n+                                \"displayName\": \"Max Number of Worker Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-charset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-dynamic_templates\": {\n-                                \"description\": \"The dynamic_templates for the document. Must be parsable as a JSON Object. Requires Elasticsearch 7+\",\n-                                \"displayName\": \"Dynamic Templates\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-dynamic_templates\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-id-attr\": {\n-                                \"description\": \"The name of the FlowFile attribute containing the identifier for the document. If the Index Operation is \\\"index\\\", this property may be left empty or evaluate to an empty value, in which case the document's identifier will be auto-generated by Elasticsearch. For all other Index Operations, the attribute must evaluate to a non-empty value.\",\n-                                \"displayName\": \"Identifier Attribute\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-id-attr\",\n-                                \"required\": false,\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-script\": {\n-                                \"description\": \"The script for the document update/upsert. Only applies to Update/Upsert operations. Must be parsable as JSON Object. If left blank, the FlowFile content will be used for document update/upsert\",\n-                                \"displayName\": \"Script\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-script\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"idle-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The amount of time a client's connection will remain open if no data is received. The default of 0 seconds will leave connections open until they are closed by the client.\",\n+                                \"displayName\": \"Idle Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"idle-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-scripted-upsert\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n-                                \"displayName\": \"Scripted Upsert\",\n+                            \"max-receiving-threads\": {\n+                                \"description\": \"This property is deprecated and no longer used.\",\n+                                \"displayName\": \"Max Number of Receiving Message Handler Threads\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-scripted-upsert\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-receiving-threads\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-not_found-is-error\": {\n+                            \"pool-receive-buffers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship.\",\n-                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n+                                \"displayName\": \"Pool Receive Buffers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-not_found-is-error\",\n+                                \"name\": \"pool-receive-buffers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"listen\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenTCP\",\n+                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a line separator as the message demarcator. The default behavior is for each message to produce a single FlowFile, however this can be controlled by increasing the Batch Size to a larger value for higher throughput. The Receive Buffer Size must be set as large as the largest messages expected to be received, meaning if every 100kb there is a line separator, then the Receive Buffer Size must be greater than 100kb. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"tcp.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"tcp.port\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.issuer.dn\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.subject.dn\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-output-error-responses\": {\n+                            \"client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"successful\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n+                                \"displayName\": \"Client Auth\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-output-error-responses\",\n+                                \"name\": \"client-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The preferred number of FlowFiles to send over in a single batch\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"max-number-tcp-connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The maximum number of concurrent TCP connections to accept. In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection.\",\n+                                \"displayName\": \"Max Number of TCP Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-number-tcp-connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-size-socket-buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-size-socket-buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-batch-size\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n-                                \"displayName\": \"Index Operation\",\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait before timing out when reading from a connection.\",\n+                                \"displayName\": \"Read Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-log-error-responses\": {\n+                            \"reader-error-handling-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Transfers any records already received and closes the connection.\",\n+                                        \"displayName\": \"Transfer\",\n+                                        \"value\": \"Transfer\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Discards any records already received and closes the connection.\",\n+                                        \"displayName\": \"Discard\",\n+                                        \"value\": \"Discard\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n+                                \"defaultValue\": \"Transfer\",\n+                                \"description\": \"Indicates how to deal with an error while reading the next record from a connection, when previous records have already been read from the connection.\",\n+                                \"displayName\": \"Read Error Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"reader-error-handling-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n                             },\n-                            {\n-                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n-                                \"name\": \"original\"\n+                            \"record-batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of records to write to a single FlowFile.\",\n+                                \"displayName\": \"Record Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"successful\"\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Batch of FlowFiles will be stored in memory until the bulk operation is performed.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\"\n+                            \"listen\",\n+                            \"record\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\",\n-                        \"typeDescription\": \"An Elasticsearch put processor that uses the official Elastic REST client libraries. Each FlowFile is treated as a document to be sent to the Elasticsearch _bulk API. Multiple FlowFiles can be batched together into each Request sent to Elasticsearch.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenTCPRecord\",\n+                        \"typeDescription\": \"Listens for incoming TCP connections and reads data from each connection using a configured record reader, and writes the records to a flow file using a configured record writer. The type of record reader selected will determine how clients are expected to send data. For example, when using a Grok reader to read logs, a client can keep an open connection and continuously stream data, but when using an JSON reader, the client cannot send an array of JSON documents and then send another array on the same connection, as the reader would be in a bad state at that point. Records will be read from the connection in blocking mode, and will timeout according to the Read Timeout specified in the processor. If the read times out, or if any other error is encountered when reading, the connection will be closed, and any records read up to that point will be handled according to the configured Read Error Strategy (Discard or Transfer). In cases where clients are keeping a connection open, the concurrent tasks for the processor should be adjusted to match the Max Number of TCP Connections allowed, so that there is a task processing each connection. The processor can be configured to use an SSL Context Service to only allow secure connections. When connected clients present certificates for mutual TLS authentication, the Distinguished Names of the client certificate's issuer and subject are added to the outgoing FlowFiles as attributes. The processor does not perform authorization based on Distinguished Name values, but since these values are attached to the outgoing FlowFiles, authorization can be implemented based on these attributes.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message if there is an issue parsing the FlowFile, sending the parsed document to Elasticsearch or parsing the Elasticsearch response\",\n-                                \"name\": \"elasticsearch.put.error\"\n+                                \"description\": \"The host that sent the data.\",\n+                                \"name\": \"tcp.sender\"\n                             },\n                             {\n-                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n-                                \"name\": \"elasticsearch.bulk.error\"\n+                                \"description\": \"The port that the processor accepted the connection on.\",\n+                                \"name\": \"tcp.port\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records written to the flow file.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.issuer.dn\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.subject.dn\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -72366,986 +73706,794 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the Record Path expression results in a null or blank value, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the Bulk request header\",\n-                                \"value\": \"A Record Path expression to retrieve the Bulk request header value\"\n-                            },\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the _bulk request body\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"Max Batch Size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The maximum number of messages to add to a single FlowFile. If multiple messages are available, they will be concatenated along with the <Message Delimiter> up to this configured maximum number of messages\",\n+                                \"displayName\": \"Max Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-not_found-is-error\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" relationship, otherwise to the \\\"errors\\\" relationship. If Output Error Responses is \\\"true\\\" then \\\"not_found\\\" responses from Elasticsearch will be sent to the error_responses relationship.\",\n-                                \"displayName\": \"Treat \\\"Not Found\\\" as Success\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-not_found-is-error\",\n-                                \"required\": false,\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-output-error-responses\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, response messages from Elasticsearch marked as \\\"error\\\" will be output to the \\\"error_responses\\\" relationship.This does not impact the output of flowfiles to the \\\"successful\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-output-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp\": {\n-                                \"description\": \"The value to use as the @timestamp field (required for Elasticsearch Data Streams)\",\n-                                \"displayName\": \"@timestamp Value\",\n+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Batching Message Delimiter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp-date-format\": {\n-                                \"description\": \"Specifies the format to use when writing Date fields. If not specified, the default format 'yyyy-MM-dd' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/25/2017).\",\n-                                \"displayName\": \"Date Format\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-at-timestamp-date-format\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the @timestamp for the document. If left blank the @timestamp will be determined using the main @timestamp property\",\n-                                \"displayName\": \"@timestamp Record Path\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp-time-format\": {\n-                                \"description\": \"Specifies the format to use when writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"Sending Host\": {\n+                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-at-timestamp-time-format\",\n+                                \"name\": \"Sending Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp-timestamp-format\": {\n-                                \"description\": \"Specifies the format to use when writing Timestamp fields. If not specified, the default format 'yyyy-MM-dd HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/25/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n+                            \"Sending Host Port\": {\n+                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-at-timestamp-timestamp-format\",\n+                                \"name\": \"Sending Host Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"source\",\n+                            \"udp\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenUDP\",\n+                        \"typeDescription\": \"Listens for Datagram Packets on a given port. The default behavior produces a FlowFile per datagram, however for higher throughput the Max Batch Size property may be increased to specify the number of datagrams to batch together in a single FlowFile. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\n                             },\n-                            \"put-es-record-batch-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of records to send over in a single batch.\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-bulk-error-groups\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Result Record Writer\",\n-                                        \"propertyName\": \"put-es-record-error-writer\"\n-                                    }\n-                                ],\n-                                \"description\": \"The errored records written to the \\\"errors\\\" relationship will be grouped by error type and the error related to the first record within the FlowFile added to the FlowFile as \\\"elasticsearch.bulk.error\\\". If \\\"Treat \\\"Not Found\\\" as Success\\\" is \\\"false\\\" then records associated with \\\"not_found\\\" Elasticsearch document responses will also be send to the \\\"errors\\\" relationship.\",\n-                                \"displayName\": \"Group Results by Bulk Error Type\",\n+                            {\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the received data.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-bulk-error-groups\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-dynamic-templates-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the dynamic_templates for the document. Field must be Map-type compatible (e.g. a Map or Record) or a String parsable into a JSON Object. Requires Elasticsearch 7+\",\n-                                \"displayName\": \"Dynamic Templates Record Path\",\n+                            \"Local Network Interface\": {\n+                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n+                                \"displayName\": \"Local Network Interface\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-dynamic-templates-path\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-error-writer\": {\n-                                \"description\": \"The response from Elasticsearch will be examined for failed records and the failed records will be written to a record set with this record writer service and sent to the \\\"errors\\\" relationship. Successful records will be written to a record set with this record writer service and sent to the \\\"successful\\\" relationship.\",\n-                                \"displayName\": \"Result Record Writer\",\n+                            \"Max Size of Message Queue\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor.\",\n+                                \"displayName\": \"Max Size of Message Queue\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-error-writer\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"put-es-record-id-path\": {\n-                                \"description\": \"A record path expression to retrieve the ID field for use with Elasticsearch. If left blank the ID will be automatically generated by Elasticsearch.\",\n-                                \"displayName\": \"ID Record Path\",\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Buffer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-id-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-index-op\": {\n-                                \"defaultValue\": \"index\",\n-                                \"description\": \"The type of the operation used to index (create, delete, index, update, upsert)\",\n-                                \"displayName\": \"Index Operation\",\n+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-index-op-path\": {\n-                                \"description\": \"A record path expression to retrieve the Index Operation field for use with Elasticsearch. If left blank the Index Operation will be determined using the main Index Operation property.\",\n-                                \"displayName\": \"Index Operation Record Path\",\n+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-index-record-path\": {\n-                                \"description\": \"A record path expression to retrieve the index field for use with Elasticsearch. If left blank the index will be determined using the main index property.\",\n-                                \"displayName\": \"Index Record Path\",\n+                            \"batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of datagrams to write as records to a single FlowFile. The Batch Size will only be reached when data is coming in more frequently than the Poll Timeout.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-log-error-responses\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n+                            \"poll-timeout\": {\n+                                \"defaultValue\": \"50 ms\",\n+                                \"description\": \"The amount of time to wait when polling the internal queue for more datagrams. If no datagrams are found after waiting for the configured timeout, then the processor will emit whatever records have been obtained up to that point.\",\n+                                \"displayName\": \"Poll Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"poll-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-reader\": {\n-                                \"description\": \"The record reader to use for reading incoming records from flowfiles.\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for reading the content of incoming datagrams.\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-reader\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"put-es-record-retain-at-timestamp-field\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n-                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n-                                \"displayName\": \"Retain @timestamp (Record Path)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-retain-at-timestamp-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-retain-id-field\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"ID Record Path\",\n-                                        \"propertyName\": \"put-es-record-id-path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the existing field used as the ID Record Path.\",\n-                                \"displayName\": \"Retain ID (Record Path)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-retain-id-field\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-record-script-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the script for the document update/upsert. Only applies to Update/Upsert operations. Field must be Map-type compatible (e.g. a Map or a Record) or a String parsable into a JSON Object\",\n-                                \"displayName\": \"Script Record Path\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before writing to a flow file.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-script-path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"put-es-record-scripted-upsert-path\": {\n-                                \"description\": \"A RecordPath pointing to a field in the record(s) that contains the scripted_upsert boolean flag. Whether to add the scripted_upsert flag to the Upsert Operation. Forces Elasticsearch to execute the Script whether or not the document exists, defaults to false. If the Upsert Document provided (from FlowFile content) will be empty, but sure to set the Client Service controller service's Suppress Null/Empty Values to Never Suppress or no \\\"upsert\\\" doc will be, included in the request to Elasticsearch and the operation will not create a new document for the script to execute against, resulting in a \\\"not_found\\\" error\",\n-                                \"displayName\": \"Scripted Upsert Record Path\",\n+                            \"sending-host\": {\n+                                \"description\": \"IP, or name, of a remote host. Only Datagrams from the specified Sending Host Port and this host will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-scripted-upsert-path\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sending-host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-type-record-path\": {\n-                                \"description\": \"A record path expression to retrieve the type field for use with Elasticsearch. If left blank the type will be determined using the main type property.\",\n-                                \"displayName\": \"Type Record Path\",\n+                            \"sending-host-port\": {\n+                                \"description\": \"Port being used by remote host to send Datagrams. Only Datagrams from the specified Sending Host and this port will be accepted. Improves Performance. May be a system property or an environment variable.\",\n+                                \"displayName\": \"Sending Host Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-type-record-path\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sending-host-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n-                            },\n-                            {\n-                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"successful\"\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"If a datagram cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The Batch of Records will be stored in memory until the bulk operation is performed.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\",\n-                            \"record\"\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"record\",\n+                            \"source\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\",\n-                        \"typeDescription\": \"A record-aware Elasticsearch put processor that uses the official Elastic REST client libraries. Each Record within the FlowFile is converted into a document to be sent to the Elasticsearch _bulk APi. Multiple documents can be batched into each Request sent to Elasticsearch. Each document's Bulk operation can be configured using Record Path expressions.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenUDPRecord\",\n+                        \"typeDescription\": \"Listens for Datagram Packets on a given port and reads the content of each datagram using the configured Record Reader. Each record will then be written to a flow file using the configured Record Writer. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message if there is an issue parsing the FlowFile records, sending the parsed documents to Elasticsearch or parsing the Elasticsearch response.\",\n-                                \"name\": \"elasticsearch.put.error\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\n                             },\n                             {\n-                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.error.count\"\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n                             },\n                             {\n-                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.success.count\"\n+                                \"description\": \"The number of records written to the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The _bulk response if there was an error during processing the record within Elasticsearch.\",\n-                                \"name\": \"elasticsearch.bulk.error\"\n+                                \"description\": \"The mime-type of the writer used to write the records to the flow file.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n+                            \"Attributes to Ignore\": {\n+                                \"description\": \"A comma-separated list of Attributes to ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore by Regular Expression` is modified. There's an OR relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Ignore\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"name\": \"Attributes to Ignore\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Attributes to Log\": {\n+                                \"description\": \"A comma-separated list of Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log by Regular Expression` is modified. There's an AND relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Log\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n+                                \"name\": \"Attributes to Log\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Log FlowFile Properties\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not to log FlowFile \\\"properties\\\", such as Entry Date, Lineage Start Date, and content size\",\n+                                \"displayName\": \"Log FlowFile Properties\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Log FlowFile Properties\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n+                            \"Log Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"trace\",\n+                                        \"value\": \"trace\"\n                                     },\n                                     {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"debug\",\n+                                        \"value\": \"debug\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"info\",\n+                                        \"value\": \"info\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"warn\",\n+                                        \"value\": \"warn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"error\",\n+                                        \"value\": \"error\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"defaultValue\": \"info\",\n+                                \"description\": \"The Log Level to use when logging the Attributes\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"Log Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"Log Payload\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"pagination-scroll\",\n-                                \"description\": \"Pagination method to use. Not all types are available for all Elasticsearch versions, check the Elasticsearch docs to confirm which are applicable and recommended for your service.\",\n-                                \"displayName\": \"Pagination Type\",\n+                                \"description\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n+                                \"displayName\": \"Log Payload\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"name\": \"Log Payload\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                            \"Log prefix\": {\n+                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogAttribute processors.\",\n+                                \"displayName\": \"Log prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n+                                \"name\": \"Log prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"Output Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"Each FlowFile attribute will be logged using a single line for the attribute name and another line for the attribute value. This format is often most advantageous when looking at the attributes of a single FlowFile.\",\n+                                        \"displayName\": \"Line per Attribute\",\n+                                        \"value\": \"Line per Attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"All FlowFile attribute names and values will be logged on a single line. This format is often most advantageous when comparing logs from multiple FlowFiles.\",\n+                                        \"displayName\": \"Single Line\",\n+                                        \"value\": \"Single Line\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                                \"defaultValue\": \"Line per Attribute\",\n+                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n+                                \"displayName\": \"Output Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Output Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                            \"attributes-to-ignore-regex\": {\n+                                \"description\": \"A regular expression indicating the Attributes to Ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore` is modified. There's an OR relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Ignore by Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n+                                \"name\": \"attributes-to-ignore-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Combine results from all query responses (one flowfile per entire paginated result set of hits). Note that aggregations cannot be paged, they are generated across the entire result set and returned as part of the first page. Results are output with one JSON object per line (allowing hits to be combined from multiple pages without loading all results into memory).\",\n-                                        \"displayName\": \"PER_QUERY\",\n-                                        \"value\": \"splitUp-query\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all hits or one flowfile for each individual hit or one flowfile containing all hits from all paged responses.\",\n-                                \"displayName\": \"Search Results Split\",\n+                            \"attributes-to-log-regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A regular expression indicating the Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log` is modified. There's an AND relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Log by Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n-                                \"required\": true,\n+                                \"name\": \"attributes-to-log-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the CharacterSet to use\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"logging\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.LogAttribute\",\n+                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"log-level\": {\n+                                \"defaultValue\": \"info\",\n+                                \"description\": \"The Log Level to use when logging the message: [trace, debug, info, warn, error]\",\n+                                \"displayName\": \"Log Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n+                                \"name\": \"log-level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n+                            \"log-message\": {\n+                                \"description\": \"The log message to emit\",\n+                                \"displayName\": \"Log message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n+                                \"name\": \"log-message\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-script-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n+                            \"log-prefix\": {\n+                                \"description\": \"Log prefix appended to the log lines. It helps to distinguish the output of multiple LogMessage processors.\",\n+                                \"displayName\": \"Log prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n+                                \"name\": \"log-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"es-rest-query-sort\": {\n-                                \"dependencies\": [\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"logging\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n+                        \"typeDescription\": \"Emits a log message at the specified log level\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds a FlowFile attribute specified by the dynamic property's key with the value found in the lookup service using the the dynamic property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the attribute to add to the FlowFile\",\n+                                \"value\": \"The name of the key or property to retrieve from the lookup service\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"include-empty-values\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Sort results by one or more fields, in JSON syntax. Ex: [{\\\"price\\\" : {\\\"order\\\" : \\\"asc\\\", \\\"mode\\\" : \\\"avg\\\"}}, {\\\"post_date\\\" : {\\\"format\\\": \\\"strict_date_optional_time_nanos\\\"}}]\",\n-                                \"displayName\": \"Sort\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Include null or blank values for keys that are null or blank\",\n+                                \"displayName\": \"Include Empty Values\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-empty-values\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-size\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum number of documents to retrieve in the query. If the query is paginated, this \\\"size\\\" applies to each page of the query, not the \\\"size\\\" of the entire result set.\",\n-                                \"displayName\": \"Size\",\n+                            \"lookup-service\": {\n+                                \"description\": \"The lookup service to use for attribute lookups\",\n+                                \"displayName\": \"Lookup Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n+                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles with matching lookups are routed to this relationship\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Care should be taken on the size of each page because each response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"scroll\",\n-                            \"search\"\n+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"lookup\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to repeatedly run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. Search After/Point in Time queries must include a valid \\\"sort\\\" field. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the query will restart with the first page of results being retrieved.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n+                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n-                            },\n-                            {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n-                            },\n-                            {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -73355,1937 +74503,1209 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"description\": \"A RecordPath that points to the field whose value will be looked up in the configured Lookup Service\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n+                                \"name\": \"Value To Lookup\",\n+                                \"value\": \"Valid Record Path\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-query-attribute\": {\n-                                \"description\": \"If set, the executed query will be set on each result flowfile in the specified attribute.\",\n-                                \"displayName\": \"Query Attribute\",\n+                            \"Root Record Path\": {\n+                                \"description\": \"A RecordPath that points to a child Record within each of the top-level Records in the FlowFile. If specified, the additional RecordPath properties will be evaluated against this child Record instead of the top-level Record. This allows for performing enrichment against multiple child Records within a single top-level Record.\",\n+                                \"displayName\": \"Root Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"name\": \"Root Record Path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"lookup-service\": {\n+                                \"description\": \"The Lookup Service to use in order to lookup a value in each Record\",\n+                                \"displayName\": \"Lookup Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"lookup-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"record-path-lookup-miss-result-cache-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Specifies how many lookup values/records should be cached.Setting this property to zero means no caching will be done and the table will be queried for each lookup value in each record. If the lookup table changes often or the most recent data must be retrieved, do not use the cache.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"record-path-lookup-miss-result-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"A query in JSON syntax, not Lucene syntax. Ex: {\\\"query\\\":{\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}}. If this parameter is not set, the query will be read from the flowfile content. If the query (property and flowfile content) is empty, a default empty JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n+                            \"record-update-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"The \\\"Result RecordPath\\\" property will be ignored and the lookup service must be a single simple key lookup service. Every dynamic property value should be a record path. For each dynamic property, the value contained in the field corresponding to the record path will be used as the key in the Lookup Service and the value returned by the Lookup Service will be used to replace the existing value. It is possible to configure multiple dynamic properties to replace multiple values in one execution. This strategy only supports simple types replacements (strings, integers, etc).\",\n+                                        \"displayName\": \"Replace Existing Values\",\n+                                        \"value\": \"replace-existing-values\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The \\\"Result RecordPath\\\" property will be used to determine which part of the record should be updated with the value returned by the Lookup Service\",\n+                                        \"displayName\": \"Use \\\"Result RecordPath\\\" Property\",\n+                                        \"value\": \"use-property\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                                \"defaultValue\": \"use-property\",\n+                                \"description\": \"This property defines the strategy to use when updating the record with the value returned by the Lookup Service.\",\n+                                \"displayName\": \"Record Update Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-update-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"result-contents\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"The entire Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n+                                        \"displayName\": \"Insert Entire Record\",\n+                                        \"value\": \"insert-entire-record\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"All of the fields in the Record that is retrieved from the Lookup Service will be inserted into the destination path.\",\n+                                        \"displayName\": \"Insert Record Fields\",\n+                                        \"value\": \"record-fields\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\n+                                \"defaultValue\": \"insert-entire-record\",\n+                                \"description\": \"When a result is obtained that contains a Record, this property determines whether the Record itself is inserted at the configured path or if the contents of the Record (i.e., the sub-fields) will be inserted at the configured path.\",\n+                                \"displayName\": \"Record Result Contents\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"result-contents\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-script\": {\n+                            \"result-record-path\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"use-property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Record Update Strategy\",\n+                                        \"propertyName\": \"record-update-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"script\\\" to execute during the operation, in JSON syntax. Ex: {\\\"source\\\": \\\"ctx._source.count++\\\", \\\"lang\\\": \\\"painless\\\"}\",\n-                                \"displayName\": \"Script\",\n+                                \"description\": \"A RecordPath that points to the field whose value should be updated with whatever value is returned from the Lookup Service. If not specified, the value that is returned from the Lookup Service will be ignored, except for determining whether the FlowFile should be routed to the 'matched' or 'unmatched' Relationship.\",\n+                                \"displayName\": \"Result RecordPath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-script\",\n+                                \"name\": \"result-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"routing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Records will be routed to a 'success' Relationship regardless of whether or not there is a match in the configured Lookup Service\",\n+                                        \"displayName\": \"Route to 'success'\",\n+                                        \"value\": \"route-to-success\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Records will be routed to either a 'matched' or an 'unmatched' Relationship depending on whether or not there was a match in the configured Lookup Service. A single input FlowFile may result in two different output FlowFiles. If the given Record Paths evaluate such that multiple sub-records are evaluated, the parent Record will be routed to 'unmatched' unless all sub-records match.\",\n+                                        \"displayName\": \"Route to 'matched' or 'unmatched'\",\n+                                        \"value\": \"route-to-matched-unmatched\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"route-to-success\",\n+                                \"description\": \"Specifies how to route records after a Lookup has completed\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"routing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.lookup.SimpleKeyValueLookupService\",\n+                            \"org.apache.nifi.lookup.db.DatabaseRecordLookupService\",\n+                            \"org.apache.nifi.lookup.maxmind.IPLookupService\",\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"All records will be sent to this Relationship if configured to do so, unless a failure occurs\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"If a FlowFile cannot be enriched, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\",\n-                            \"update\"\n+                            \"avro\",\n+                            \"convert\",\n+                            \"csv\",\n+                            \"database\",\n+                            \"db\",\n+                            \"enrichment\",\n+                            \"filter\",\n+                            \"json\",\n+                            \"logs\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"route\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.UpdateByQueryElasticsearch\",\n-                        \"typeDescription\": \"Update documents in an Elasticsearch index using a query. The query can be loaded from a flowfile body or from the Query parameter. The loaded Query can contain any JSON accepted by Elasticsearch's _update_by_query API, for example a \\\"query\\\" object to identify what documents are to be updated, plus a \\\"script\\\" to define the updates to perform.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupRecord\",\n+                        \"typeDescription\": \"Extracts one or more fields from a Record and looks up a value for those fields in a LookupService. If a result is returned by the LookupService, that result is optionally added to the Record. In this case, the processor functions as an Enrichment processor. Regardless, the Record is then routed to either the 'matched' relationship or 'unmatched' relationship (if the 'Routing Strategy' property is configured to do so), indicating whether or not a result was returned by the LookupService, allowing the processor to also function as a Routing processor. The \\\"coordinates\\\" to use for looking up a value in the Lookup Service are defined by adding a user-defined property. Each property that is added will have an entry added to a Map, where the name of the property becomes the Map Key and the value returned by the RecordPath becomes the value for that key. If multiple values are returned by the RecordPath, then the Record will be routed to the 'unmatched' relationship (or 'success', depending on the 'Routing Strategy' property's configuration). If one or more fields match the Result RecordPath, all fields that match will be updated. If there is no match in the configured LookupService, then no fields will be updated. I.e., it will not overwrite an existing value in the Record with a null value. Please note, however, that if the results returned by the LookupService are not accounted for in your schema (specifically, the schema that is configured for your Record Writer) then the fields will not be written out to the FlowFile.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The amount of time that it took to complete the update operation in ms.\",\n-                                \"name\": \"elasticsearch.update.took\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error running the update.\",\n-                                \"name\": \"elasticsearch.update.error\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-aws-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"aws-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"aws-credentials-provider-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"cache-expiration\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"Specifies how long a Schema that is cached should remain in the cache. Once this time period elapses, a cached version of a schema will no longer be used, and the service will have to communicate with the Schema Registry again in order to obtain the schema.\",\n-                                \"displayName\": \"Cache Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"communications-timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to receive data from the Schema Registry before considering the communications a failure\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Attribute Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n+                                        \"displayName\": \"Keep Only Common Attributes\",\n+                                        \"value\": \"Keep Only Common Attributes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n+                                        \"displayName\": \"Keep All Unique Attributes\",\n+                                        \"value\": \"Keep All Unique Attributes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Keep Only Common Attributes\",\n+                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n+                                \"displayName\": \"Attribute Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"communications-timeout\",\n+                                \"name\": \"Attribute Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"region\": {\n+                            \"Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"ZIP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The region of the cloud resources\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-registry-name\": {\n-                                \"description\": \"The name of the Schema Registry\",\n-                                \"displayName\": \"Schema Registry Name\",\n+                                \"description\": \"Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored\",\n+                                \"displayName\": \"Compression Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry-name\",\n+                                \"name\": \"Compression Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"aws\",\n-                            \"glue\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.aws.schemaregistry.AmazonGlueSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry that interacts with the AWS Glue Schema Registry so that those Schemas that are stored in the Glue Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Glue Schema Registry with their names.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n-                                \"requiredPermission\": \"access environment credentials\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Access Key\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Access Key ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Access Key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Assume Role ARN\": {\n-                                \"description\": \"The AWS Role ARN for cross account access. This is used in conjunction with Assume Role Session Name and other Assume Role properties.\",\n-                                \"displayName\": \"Assume Role ARN\",\n+                            \"Correlation Attribute Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"If specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n+                                \"displayName\": \"Correlation Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Assume Role ARN\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Correlation Attribute Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Assume Role Session Name\": {\n+                            \"Delimiter Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No Header, Footer, or Demarcator will be used\",\n+                                        \"displayName\": \"Do Not Use Delimiters\",\n+                                        \"value\": \"Do Not Use Delimiters\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The values of Header, Footer, and Demarcator will be retrieved from the contents of a file\",\n+                                        \"displayName\": \"Filename\",\n+                                        \"value\": \"Filename\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The values of Header, Footer, and Demarcator will be specified as property values\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Do Not Use Delimiters\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\n-                                \"description\": \"The AWS Role Session Name for cross account access. This is used in conjunction with Assume Role ARN.\",\n-                                \"displayName\": \"Assume Role Session Name\",\n+                                \"description\": \"Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.\",\n+                                \"displayName\": \"Delimiter Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Assume Role Session Name\",\n+                                \"name\": \"Delimiter Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Credentials File\": {\n-                                \"description\": \"Path to a file containing AWS access key and secret key in properties file format.\",\n-                                \"displayName\": \"Credentials File\",\n+                            \"Demarcator File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Filename or text specifying the demarcator to use. If not specified, no demarcator is supplied.\",\n+                                \"displayName\": \"Demarcator\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Demarcator File\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n+                                        \"TEXT\",\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Secret Key\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Secret Access Key\",\n+                            \"Footer File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Filename or text specifying the footer to use. If not specified, no footer is supplied.\",\n+                                \"displayName\": \"Footer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Secret Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Footer File\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Session Time\": {\n-                                \"defaultValue\": \"3600\",\n+                            \"Header File\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Session time for role based session (between 900 and 3600 seconds). This is used in conjunction with Assume Role ARN.\",\n-                                \"displayName\": \"Assume Role Session Time\",\n+                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n+                                \"displayName\": \"Header\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Header File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"anonymous-credentials\": {\n+                            \"Keep Path\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Anonymous credentials\",\n-                                \"displayName\": \"Use Anonymous Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"anonymous-credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"assume-role-external-id\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"ZIP\",\n+                                            \"TAR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\n-                                \"description\": \"External ID for cross-account access. This is used in conjunction with Assume Role ARN.\",\n-                                \"displayName\": \"Assume Role External ID\",\n+                                \"description\": \"If using the Zip or Tar Merge Format, specifies whether or not the FlowFiles' paths should be included in their entry names.\",\n+                                \"displayName\": \"Keep Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-external-id\",\n-                                \"required\": false,\n+                                \"name\": \"Keep Path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-proxy-host\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n-                                    }\n-                                ],\n-                                \"description\": \"Proxy host for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n-                                \"displayName\": \"Assume Role Proxy Host\",\n+                            \"Max Bin Age\": {\n+                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n+                                \"displayName\": \"Max Bin Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-proxy-host\",\n+                                \"name\": \"Max Bin Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-proxy-port\": {\n+                            \"Maximum Group Size\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy port for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n-                                \"displayName\": \"Assume Role Proxy Port\",\n+                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum.\",\n+                                \"displayName\": \"Maximum Group Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-proxy-port\",\n+                                \"name\": \"Maximum Group Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-ssl-context-service\": {\n+                            \"Maximum Number of Entries\": {\n+                                \"defaultValue\": \"1000\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"SSL Context Service used when connecting to the STS Endpoint.\",\n-                                \"displayName\": \"Assume Role SSL Context Service\",\n+                                \"description\": \"The maximum number of files to include in a bundle\",\n+                                \"displayName\": \"Maximum Number of Entries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-ssl-context-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Maximum Number of Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"assume-role-sts-endpoint\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n-                                    }\n-                                ],\n-                                \"description\": \"The default AWS Security Token Service (STS) endpoint (\\\"sts.amazonaws.com\\\") works for all accounts that are not for China (Beijing) region or GovCloud. You only need to set this property to \\\"sts.cn-north-1.amazonaws.com.cn\\\" when you are requesting session credentials for services in China(Beijing) region or to \\\"sts.us-gov-west-1.amazonaws.com\\\" for GovCloud.\",\n-                                \"displayName\": \"Assume Role STS Endpoint Override\",\n+                            \"Maximum number of Bins\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n+                                \"displayName\": \"Maximum number of Bins\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-sts-endpoint\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum number of Bins\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-sts-region\": {\n+                            \"Merge Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single TAR file. The FlowFiles' <path> attribute will be used to create a directory in the TAR file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the TAR file. If a FlowFile has an attribute named <tar.permissions> that is 3 characters, each between 0-7, that attribute will be used as the TAR entry's 'mode'.\",\n+                                        \"displayName\": \"TAR\",\n+                                        \"value\": \"TAR\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single ZIP file. The FlowFiles' <path> attribute will be used to create a directory in the ZIP file if the <Keep Paths> property is set to true; otherwise, all FlowFiles will be added at the root of the ZIP file. The <Compression Level> property indicates the ZIP compression to use.\",\n+                                        \"displayName\": \"ZIP\",\n+                                        \"value\": \"ZIP\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 3 FlowFile Stream\",\n+                                        \"displayName\": \"FlowFile Stream, v3\",\n+                                        \"value\": \"FlowFile Stream, v3\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 2 FlowFile Stream\",\n+                                        \"displayName\": \"FlowFile Stream, v2\",\n+                                        \"value\": \"FlowFile Stream, v2\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n+                                        \"description\": \"A bin of FlowFiles will be combined into a single Version 1 FlowFile Package\",\n+                                        \"displayName\": \"FlowFile Tar, v1\",\n+                                        \"value\": \"FlowFile Tar, v1\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n+                                        \"description\": \"The contents of all FlowFiles will be concatenated together into a single FlowFile\",\n+                                        \"displayName\": \"Binary Concatenation\",\n+                                        \"value\": \"Binary Concatenation\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"description\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n+                                        \"displayName\": \"Avro\",\n+                                        \"value\": \"Avro\"\n                                     }\n                                 ],\n-                                \"description\": \"The AWS Security Token Service (STS) region\",\n-                                \"displayName\": \"Assume Role STS Region\",\n+                                \"defaultValue\": \"Binary Concatenation\",\n+                                \"description\": \"Determines the format that will be used to merge the content.\",\n+                                \"displayName\": \"Merge Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-sts-region\",\n-                                \"required\": false,\n+                                \"name\": \"Merge Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-sts-signer-override\": {\n+                            \"Merge Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWS4SignerType\"\n+                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n+                                        \"displayName\": \"Bin-Packing Algorithm\",\n+                                        \"value\": \"Bin-Packing Algorithm\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n+                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier>, <fragment.count>, and <fragment.index>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. All FlowFiles in this group must have a unique value for the \\\"fragment.index\\\" attribute between 0 and the value of the \\\"fragment.count\\\" attribute.\",\n+                                        \"displayName\": \"Defragment\",\n+                                        \"value\": \"Defragment\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Default Signature\",\n+                                \"defaultValue\": \"Bin-Packing Algorithm\",\n+                                \"description\": \"Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n+                                \"displayName\": \"Merge Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Merge Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum Group Size\": {\n+                                \"defaultValue\": \"0 B\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The AWS STS library uses Signature Version 4 by default. This property allows you to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Assume Role STS Signer Override\",\n+                                \"description\": \"The minimum size for the bundle\",\n+                                \"displayName\": \"Minimum Group Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-sts-signer-override\",\n-                                \"required\": false,\n+                                \"name\": \"Minimum Group Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n+                            \"Minimum Number of Entries\": {\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"Bin-Packing Algorithm\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n-                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n+                                \"description\": \"The minimum number of files to include in a bundle\",\n+                                \"displayName\": \"Minimum Number of Entries\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum Number of Entries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n+                            \"Tar Modified Time\": {\n+                                \"defaultValue\": \"${file.lastModifiedTime}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"TAR\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n-                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"description\": \"If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression (e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'.\",\n+                                \"displayName\": \"Tar Modified Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Tar Modified Time\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"default-credentials\": {\n+                            \"mergecontent-metadata-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), the metadata for the first FlowFile in the bin will be set on the output FlowFile.\",\n+                                        \"displayName\": \"Use First Metadata\",\n+                                        \"value\": \"Use First Metadata\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values match those of the first FlowFile, any additional metadata will be dropped but the FlowFile will be merged. Any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n+                                        \"displayName\": \"Keep Only Common Metadata\",\n+                                        \"value\": \"Keep Only Common Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n+                                        \"displayName\": \"Do Not Merge Uncommon Metadata\",\n+                                        \"value\": \"Do Not Merge Uncommon Metadata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignores (does not transfer, compare, etc.) any metadata from a FlowFile whose content supports embedded metadata.\",\n+                                        \"displayName\": \"Ignore Metadata\",\n+                                        \"value\": \"Ignore Metadata\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses the Default Credential chain, including EC2 instance profiles or roles, environment variables, default user credentials, etc.\",\n-                                \"displayName\": \"Use Default Credentials\",\n+                                \"defaultValue\": \"Do Not Merge Uncommon Metadata\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Avro\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.\",\n+                                \"displayName\": \"Metadata Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"default-credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"profile-name\": {\n-                                \"description\": \"The AWS profile name for credentials from the profile configuration file.\",\n-                                \"displayName\": \"Profile Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"profile-name\",\n-                                \"required\": false,\n+                                \"name\": \"mergecontent-metadata-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-aws-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-aws-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.AwsCredentialsProviderService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n+                                \"name\": \"segment.original.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n+                                \"name\": \"tar.permissions\"\n                             }\n                         ],\n-                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeRecord\",\n+                            \"org.apache.nifi.processors.standard.SegmentContent\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFiles that were used to create the bundle\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFile containing the merged content\",\n+                                \"name\": \"merged\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"While content is not stored in memory, the FlowFiles' attributes are. The configuration of MergeContent (maximum bin size, maximum group size, maximum bin age, max number of entries) will influence how much memory is used. If merging together many small FlowFiles, a two-stage approach may be necessary in order to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"aws\",\n-                            \"credentials\",\n-                            \"provider\"\n+                            \"archive\",\n+                            \"concatenation\",\n+                            \"content\",\n+                            \"correlation\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"merge\",\n+                            \"stream\",\n+                            \"tar\",\n+                            \"zip\"\n                         ],\n-                        \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Amazon Web Services processors. Uses default credentials without configuration. Default credentials support EC2 instance profile/role, default user profile, environment variables, etc. Additional options include access key / secret key pairs, credentials file, named profile, and assume role credentials.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n+                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Demarcator\\\" = \\\"\\\\n\\\" (a newline can be inserted by pressing Shift + Enter)\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n+                                \"description\": \"Concatenate FlowFiles with textual content together in order to create fewer, larger FlowFiles.\",\n+                                \"keywords\": [\n+                                    \"concatenate\",\n+                                    \"bundle\",\n+                                    \"aggregate\",\n+                                    \"bin\",\n+                                    \"merge\",\n+                                    \"combine\",\n+                                    \"smash\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n+                                \"description\": \"Concatenate FlowFiles with binary content together in order to create fewer, larger FlowFiles.\",\n+                                \"keywords\": [\n+                                    \"concatenate\",\n+                                    \"bundle\",\n+                                    \"aggregate\",\n+                                    \"bin\",\n+                                    \"merge\",\n+                                    \"combine\",\n+                                    \"smash\"\n+                                ],\n+                                \"notes\": \"Not all binary data can be concatenated together. Whether or not this configuration is valid depends on the type of your data.\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Defragment\\\"\\n\\\"Merge Format\\\" = the value of Merge Format depends on the desired output format. If the file was previously zipped together and was split apart by UnpackContent,\\n    a Merge Format of \\\"ZIP\\\" makes sense. If it was previously a .tar file, a Merge Format of \\\"TAR\\\" makes sense. If the data is textual, \\\"Binary Concatenation\\\" can be\\n    used to combine the text into a single document.\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the fragments to 'failure'. A reasonable value might be \\\"5 mins\\\"\\n\\nFor textual data, \\\"Demarcator\\\" should be set to a newline (\\\\n), set by pressing Shift+Enter in the UI. For binary data, \\\"Demarcator\\\" should be left blank.\\n\",\n+                                \"description\": \"Reassemble a FlowFile that was previously split apart into smaller FlowFiles by a processor such as SplitText, UnpackContext, SplitRecord, etc.\",\n+                                \"keywords\": [\n+                                    \"reassemble\",\n+                                    \"repack\",\n+                                    \"merge\",\n+                                    \"recombine\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"When more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n+                                \"name\": \"merge.count\"\n+                            },\n+                            {\n+                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n+                                \"name\": \"merge.bin.age\"\n+                            },\n+                            {\n+                                \"description\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n+                                \"name\": \"merge.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"This processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.\",\n+                                \"name\": \"merge.reason\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"encryption-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"No encryption.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use server-side, S3-managed encryption.\",\n-                                        \"displayName\": \"Server-side S3\",\n-                                        \"value\": \"SSE_S3\"\n-                                    },\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"Use server-side, KMS key to perform encryption.\",\n-                                        \"displayName\": \"Server-side KMS\",\n-                                        \"value\": \"SSE_KMS\"\n+                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\n\\nAdd a single additional property. The name of the property should describe the field on which the data is being merged together.\\nThe property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, to merge together data that has the same value for the \\\"productSku\\\" field, add a property named `productSku` with a value of `/productSku`.\\n\\nConnect the \\\"success\\\" Relationship to MergeRecord.\\nAuto-terminate the \\\"original\\\" Relationship.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n                                     },\n                                     {\n-                                        \"description\": \"Use server-side, customer-supplied key to perform encryption.\",\n-                                        \"displayName\": \"Server-side Customer Key\",\n-                                        \"value\": \"SSE_C\"\n-                                    },\n+                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Maximum Number of Records\\\" property to a value at least as large as the \\\"Minimum Number of Records.\\\" If there is no need to limit the maximum number of\\n    records per file, this number can be set to a value that will never be reached such as `1000000000`.\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\nSet the value of the \\\"Correlation Attribute Name\\\" property to the name of the property that you added in the PartitionRecord Processor. For example, if merging data\\n    based on the \\\"productSku\\\" field, the property in PartitionRecord was named `productSku` so the value of the \\\"Correlation Attribute Name\\\" property should\\n    be `productSku`.\\nSet the \\\"Maximum Number of Bins\\\" property to a value that is at least as large as the different number of values that will be present for the Correlation Attribute.\\n    For example, if you expect 1,000 different SKUs, set this value to at least `1001`. It is not advisable, though, to set the value above 10,000.\\n\\nConnect the 'merged' Relationship to the next component in the flow.\\nAuto-terminate the 'original' Relationship.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.MergeRecord\"\n+                                    }\n+                                ],\n+                                \"description\": \"Combine together many Records that have the same value for a particular field in the data, in order to create a single, larger file\",\n+                                \"keywords\": [\n+                                    \"merge\",\n+                                    \"combine\",\n+                                    \"aggregate\",\n+                                    \"like records\",\n+                                    \"similar data\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Attribute Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use client-side, KMS key to perform encryption.\",\n-                                        \"displayName\": \"Client-side KMS\",\n-                                        \"value\": \"CSE_KMS\"\n+                                        \"description\": \"Any attribute that is not the same on all FlowFiles in a bin will be dropped. Those that are the same across all FlowFiles will be retained.\",\n+                                        \"displayName\": \"Keep Only Common Attributes\",\n+                                        \"value\": \"Keep Only Common Attributes\"\n                                     },\n                                     {\n-                                        \"description\": \"Use client-side, customer-supplied key to perform encryption.\",\n-                                        \"displayName\": \"Client-side Customer Key\",\n-                                        \"value\": \"CSE_C\"\n+                                        \"description\": \"Any attribute that has the same value for all FlowFiles in a bin, or has no value for a FlowFile, will be kept. For example, if a bin consists of 3 FlowFiles and 2 of them have a value of 'hello' for the 'greeting' attribute and the third FlowFile has no 'greeting' attribute then the outbound FlowFile will get a 'greeting' attribute with the value 'hello'.\",\n+                                        \"displayName\": \"Keep All Unique Attributes\",\n+                                        \"value\": \"Keep All Unique Attributes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Strategy to use for S3 data encryption and decryption.\",\n-                                \"displayName\": \"Encryption Strategy\",\n+                                \"defaultValue\": \"Keep Only Common Attributes\",\n+                                \"description\": \"Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.\",\n+                                \"displayName\": \"Attribute Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-strategy\",\n+                                \"name\": \"Attribute Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-id-or-key-material\": {\n-                                \"description\": \"For None and Server-side S3: not used. For Server-side KMS and Client-side KMS: the KMS Key ID must be configured. For Server-side Customer Key and Client-side Customer Key: the Key Material must be specified in Base64 encoded form. In case of Server-side Customer Key, the key must be an AES-256 key. In case of Client-side Customer Key, it can be an AES-256, AES-192 or AES-128 key.\",\n-                                \"displayName\": \"Key ID or Key Material\",\n+                            \"correlation-attribute-name\": {\n+                                \"description\": \"If specified, two FlowFiles will be binned together only if they have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n+                                \"displayName\": \"Correlation Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"key-id-or-key-material\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"correlation-attribute-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"kms-region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The Region of the AWS Key Management Service. Only used in case of Client-side KMS.\",\n-                                \"displayName\": \"KMS Region\",\n+                            \"max-bin-age\": {\n+                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n+                                \"displayName\": \"Max Bin Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kms-region\",\n+                                \"name\": \"max-bin-age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-aws-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"aws\",\n-                            \"decrypt\",\n-                            \"decryption\",\n-                            \"encrypt\",\n-                            \"encryption\",\n-                            \"key\",\n-                            \"s3\",\n-                            \"service\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.encryption.StandardS3EncryptionService\",\n-                        \"typeDescription\": \"Adds configurable encryption to S3 Put and S3 Fetch operations.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            },\n+                            \"max-bin-size\": {\n+                                \"description\": \"The maximum size for the bundle. If not specified, there is no maximum. This is a 'soft limit' in that if a FlowFile is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of bytes in last input FlowFile.\",\n+                                \"displayName\": \"Maximum Bin Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"max-bin-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n+                            \"max-records\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of Records to include in a bin. This is a 'soft limit' in that if a FlowFIle is added to a bin, all records in that FlowFile will be added, so this limit may be exceeded by up to the number of records in the last input FlowFile.\",\n+                                \"displayName\": \"Maximum Number of Records\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-records\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n+                            \"max.bin.count\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time. This number should not be smaller than the maximum number of concurrent threads for this Processor, or the bins that are created will often consist only of a single incoming FlowFile.\",\n+                                \"displayName\": \"Maximum Number of Bins\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.bin.count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"merge-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Generates 'bins' of FlowFiles and fills each bin as full as possible. FlowFiles are placed into a bin based on their size and optionally their attributes (if the <Correlation Attribute> property is set)\",\n+                                        \"displayName\": \"Bin-Packing Algorithm\",\n+                                        \"value\": \"Bin-Packing Algorithm\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier> and <fragment.count>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. The ordering of the Records that are output is not guaranteed.\",\n+                                        \"displayName\": \"Defragment\",\n+                                        \"value\": \"Defragment\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"Bin-Packing Algorithm\",\n+                                \"description\": \"Specifies the algorithm used to merge records. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n+                                \"displayName\": \"Merge Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"merge-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"S3\",\n-                            \"file\",\n-                            \"resource\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.service.S3FileResourceService\",\n-                        \"typeDescription\": \"Provides an Amazon Web Services (AWS) S3 file resource for other components.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"aws-communications-timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            },\n+                            \"min-bin-size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size of for the bin\",\n+                                \"displayName\": \"Minimum Bin Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"aws-communications-timeout\",\n+                                \"name\": \"min-bin-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"aws-credentials-provider-service\": {\n-                                \"description\": \"Service used to obtain an Amazon Web Services Credentials Provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"min-records\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The minimum number of records to include in a bin\",\n+                                \"displayName\": \"Minimum Number of Records\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"min-records\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"aws-credentials-provider-service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"aws-region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"aws-region\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws-ssl-context-service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"aws-ssl-context-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"secret-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression matching on Secret Name that identifies Secrets whose parameters should be fetched. Any secrets whose names do not match this pattern will not be fetched.\",\n-                                \"displayName\": \"Secret Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-name-pattern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute indicates how many FlowFiles should be expected in the given bundle.\",\n+                                \"name\": \"fragment.count\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeContent\",\n+                            \"org.apache.nifi.processors.standard.PartitionRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFiles that were used to create the bundle\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFile containing the merged records\",\n+                                \"name\": \"merged\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"aws\",\n-                            \"manager\",\n-                            \"secrets\",\n-                            \"secretsmanager\"\n+                            \"content\",\n+                            \"correlation\",\n+                            \"event\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"stream\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parameter.aws.AwsSecretsManagerParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from AWS SecretsManager.  Each secret becomes a Parameter group, which can map to a Parameter Context, with key/value pairs in the secret mapping to Parameters in the group.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MergeRecord\",\n+                        \"typeDescription\": \"This Processor merges together multiple record-oriented FlowFiles into a single FlowFile that contains all of the Records of the input FlowFiles. This Processor works by creating 'bins' and then adding FlowFiles to these bins until they are full. Once a bin is full, all of the FlowFiles will be combined into a single output FlowFile, and that FlowFile will be routed to the 'merged' Relationship. A bin will consist of potentially many 'like FlowFiles'. In order for two FlowFiles to be considered 'like FlowFiles', they must have the same Schema (as identified by the Record Reader) and, if the <Correlation Attribute Name> property is set, the same value for the specified attribute. See Processor Usage and Additional Details for more information. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\n\\nConnect the 'merged' Relationship to the next component in the flow. Auto-terminate the 'original' Relationship.\\n\",\n+                                \"description\": \"Combine together many arbitrary Records in order to create a single, larger file\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The merged FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The MIME Type indicated by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n+                                \"name\": \"merge.count\"\n+                            },\n+                            {\n+                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n+                                \"name\": \"merge.bin.age\"\n+                            },\n+                            {\n+                                \"description\": \"UUID of the merged FlowFile that will be added to the original FlowFiles attributes\",\n+                                \"name\": \"merge.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n+                                \"name\": \"<Attributes from Record Writer>\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75293,448 +75713,96 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows dimension name/value pairs to be added to the metric. AWS supports a maximum of 10 dimensions.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Dimension Name\",\n-                                \"value\": \"Dimension Value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"MetricName\": {\n-                                \"description\": \"The name of the metric\",\n-                                \"displayName\": \"Metric Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"MetricName\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Namespace\": {\n-                                \"description\": \"The namespace for the metric data for CloudWatch\",\n-                                \"displayName\": \"Namespace\",\n+                            \"End Offset\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"Number of bytes removed at the end of the file.\",\n+                                \"displayName\": \"End Offset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Namespace\",\n+                                \"name\": \"End Offset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Remove All Content\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n+                                \"displayName\": \"Remove All Content\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Remove All Content\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Timestamp\": {\n-                                \"description\": \"A point in time expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC. If not specified, the default value is set to the time the metric data was received\",\n-                                \"displayName\": \"Timestamp\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Unit\": {\n-                                \"description\": \"The unit of the metric. (e.g Seconds, Bytes, Megabytes, Percent, Count,  Kilobytes/Second, Terabits/Second, Count/Second) For details see http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html\",\n-                                \"displayName\": \"Unit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Unit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Value\": {\n-                                \"description\": \"The value for the metric. Must be a double\",\n-                                \"displayName\": \"Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"maximum\": {\n-                                \"description\": \"The maximum value of the sample set. Must be a double\",\n-                                \"displayName\": \"Maximum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"minimum\": {\n-                                \"description\": \"The minimum value of the sample set. Must be a double\",\n-                                \"displayName\": \"Minimum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"minimum\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"sampleCount\": {\n-                                \"description\": \"The number of samples used for the statistic set. Must be a double\",\n-                                \"displayName\": \"Sample Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sampleCount\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sum\": {\n-                                \"description\": \"The sum of values for the sample set. Must be a double\",\n-                                \"displayName\": \"Sum\",\n+                            \"Start Offset\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"Number of bytes removed at the beginning of the file.\",\n+                                \"displayName\": \"Start Offset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sum\",\n-                                \"required\": false,\n+                                \"name\": \"Start Offset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Processed flowfiles.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"cloudwatch\",\n-                            \"metrics\",\n-                            \"publish\",\n-                            \"put\"\n+                            \"binary\",\n+                            \"discard\",\n+                            \"keep\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.cloudwatch.PutCloudWatchMetric\",\n-                        \"typeDescription\": \"Publishes metrics to Amazon CloudWatch. Metric can be either a single value, or a StatisticSet comprised of minimum, maximum, sum and sample count.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ModifyBytes\",\n+                        \"typeDescription\": \"Discard byte range at the start and end or all content of a binary file.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75747,514 +75815,254 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Activity Restored Message\": {\n+                                \"defaultValue\": \"Activity restored at time: ${now():format('yyyy/MM/dd HH:mm:ss')} after being inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n+                                \"description\": \"The message that will be the content of FlowFiles that are sent to 'activity.restored' relationship\",\n+                                \"displayName\": \"Activity Restored Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Activity Restored Message\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Batch items for each request (between 1 and 50)\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The items to be retrieved in one batch\",\n-                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch items for each request (between 1 and 50)\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Continually Send Messages\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will send inactivity indicator continually every Threshold Duration amount of time until activity is restored; if false, will send an indicator only when the flow first becomes inactive\",\n+                                \"displayName\": \"Continually Send Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Name\": {\n-                                \"description\": \"The hash key name of the item\",\n-                                \"displayName\": \"Hash Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hash Key Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n-                                \"description\": \"The hash key value of the item\",\n-                                \"displayName\": \"Hash Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hash Key Value\",\n+                                \"name\": \"Continually Send Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Key Value Type\": {\n+                            \"Copy Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n+                                \"displayName\": \"Copy Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Key Value Type\",\n+                                \"name\": \"Copy Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Range Key Name\": {\n-                                \"description\": \"The range key name of the item\",\n-                                \"displayName\": \"Range Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Range Key Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Range Key Value\",\n+                            \"Inactivity Message\": {\n+                                \"defaultValue\": \"Lacking activity as of time: ${now():format('yyyy/MM/dd HH:mm:ss')}; flow has been inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n+                                \"description\": \"The message that will be the content of FlowFiles that are sent to the 'inactive' relationship\",\n+                                \"displayName\": \"Inactivity Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Range Key Value\",\n-                                \"required\": false,\n+                                \"name\": \"Inactivity Message\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Range Key Value Type\": {\n+                            \"Monitoring Scope\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"node\",\n+                                        \"value\": \"node\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"cluster\",\n+                                        \"value\": \"cluster\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\n+                                \"defaultValue\": \"node\",\n+                                \"description\": \"Specify how to determine activeness of the flow. 'node' means that activeness is examined at individual node separately. It can be useful if DFM expects each node should receive flow files in a distributed manner. With 'cluster', it defines the flow is active while at least one node receives flow files actively. If NiFi is running as standalone mode, this should be set as 'node', if it's 'cluster', NiFi logs a warning message and act as 'node' scope.\",\n+                                \"displayName\": \"Monitoring Scope\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Range Key Value Type\",\n+                                \"name\": \"Monitoring Scope\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Reporting Node\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"all\",\n+                                        \"value\": \"all\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"primary\",\n+                                        \"value\": \"primary\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"cluster\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Monitoring Scope\",\n+                                        \"propertyName\": \"Monitoring Scope\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"description\": \"Specify which node should send notification flow-files to inactive and activity.restored relationships. With 'all', every node in this cluster send notification flow-files. 'primary' means flow-files will be sent only from a primary node. If NiFi is running as standalone mode, this should be set as 'all', even if it's 'primary', NiFi act as 'all'.\",\n+                                \"displayName\": \"Reporting Node\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Reporting Node\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Reset State on Restart\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When the processor gets started or restarted, if set to true, the initial state will always be active. Otherwise, the last reported flow state will be preserved.\",\n+                                \"displayName\": \"Reset State on Restart\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Reset State on Restart\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n+                            \"Threshold Duration\": {\n+                                \"defaultValue\": \"5 min\",\n+                                \"description\": \"Determines how much time must elapse before considering the flow to be inactive\",\n+                                \"displayName\": \"Threshold Duration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"Threshold Duration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Wait for Activity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When the processor gets started or restarted, if set to true, only send an inactive indicator if there had been activity beforehand. Otherwise send an inactive indicator even if there had not been activity beforehand.\",\n+                                \"displayName\": \"Wait for Activity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Wait for Activity\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Items hash key value\",\n-                                \"name\": \"  dynamodb.item.hash.key.value\"\n-                            },\n-                            {\n-                                \"description\": \"Items range key value\",\n-                                \"name\": \"  dynamodb.item.range.key.value\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n+                        \"stateful\": {\n+                            \"description\": \"MonitorActivity stores the last timestamp at each node as state, so that it can examine activity at cluster wide. If 'Copy Attribute' is set to true, then flow file attributes are also persisted. In local scope, it stores last known activity timestamp if the flow is inactive.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n+                                \"description\": \"This relationship is used to transfer an Inactivity indicator when no FlowFiles are routed to 'success' for Threshold Duration amount of time\",\n+                                \"name\": \"inactive\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All incoming FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n+                                \"name\": \"activity.restored\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Delete\",\n-                            \"DynamoDB\",\n-                            \"Remove\"\n+                            \"active\",\n+                            \"activity\",\n+                            \"detection\",\n+                            \"flow\",\n+                            \"inactive\",\n+                            \"monitor\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                        \"typeDescription\": \"Deletes a document from DynamoDB based on hash and range key. The key can be string or number. The request requires all the primary keys for the operation (hash or hash and range key)\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MonitorActivity\",\n+                        \"typeDescription\": \"Monitors the flow for activity and sends out an indicator when the flow has not had any data for some specified amount of time and again when the flow's activity is restored\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n+                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n+                                \"name\": \"inactivityStartMillis\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n+                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n+                                \"name\": \"inactivityDurationMillis\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76267,528 +76075,262 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"attribute-cache-regex\": {\n+                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n+                                \"displayName\": \"Attribute Cache Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Batch items for each request (between 1 and 50)\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The items to be retrieved in one batch\",\n-                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch items for each request (between 1 and 50)\",\n+                                \"name\": \"attribute-cache-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to cache release signals in order to release files queued at a corresponding Wait processor\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Name\": {\n-                                \"description\": \"The hash key name of the item\",\n-                                \"displayName\": \"Hash Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hash Key Name\",\n+                                \"name\": \"distributed-cache-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Hash Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n-                                \"description\": \"The hash key value of the item\",\n-                                \"displayName\": \"Hash Key Value\",\n+                            \"release-signal-id\": {\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the release signal cache key\",\n+                                \"displayName\": \"Release Signal Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hash Key Value\",\n+                                \"name\": \"release-signal-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\n+                            \"signal-buffer-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specify the maximum number of incoming flow files that can be buffered until signals are notified to cache service. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping signals by signal identifier when multiple incoming flow files share the same signal identifier.\",\n+                                \"displayName\": \"Signal Buffer Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Key Value Type\",\n+                                \"name\": \"signal-buffer-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Json Document attribute\": {\n-                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n-                                \"displayName\": \"Json Document attribute\",\n+                            \"signal-counter-delta\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter delta. Specify how much the counter should increase. For example, if multiple signal events are processed at upstream flow in batch oriented way, the number of events processed can be notified with this property at once. Zero (0) has a special meaning, it clears target count back to 0, which is especially useful when used with Wait Releasable FlowFile Count = Zero (0) mode, to provide 'open-close-gate' type of flow control. One (1) can open a corresponding Wait processor, and Zero (0) can negate it as if closing a gate.\",\n+                                \"displayName\": \"Signal Counter Delta\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Json Document attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"signal-counter-delta\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Range Key Name\": {\n-                                \"description\": \"The range key name of the item\",\n-                                \"displayName\": \"Range Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Range Key Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Range Key Value\",\n+                            \"signal-counter-name\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the signal counter name. Signal counter name is useful when a corresponding Wait processor needs to know the number of occurrences of different types of events, such as success or failure, or destination data source names, etc.\",\n+                                \"displayName\": \"Signal Counter Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Range Key Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Range Key Value Type\",\n+                                \"name\": \"signal-counter-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.Wait\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n+                            {\n+                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"notify\",\n+                            \"release\",\n+                            \"signal\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.Notify\",\n+                        \"typeDescription\": \"Caches a release signal identifier in the distributed cache, optionally along with the FlowFile's attributes.  Any flow files held at a corresponding Wait processor will be released once this signal in the cache is discovered.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n+                                \"name\": \"notified\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n+                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can help improve performance by batching many flowfiles together into 1 larger file that is transmitted by InvokeHTTP.\\n\\n    Connect the success relationship of PackageFlowFile to the input of InvokeHTTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"configuration\": \"    \\\"HTTP Method\\\" = \\\"POST\\\" to send data to ListenHTTP.\\n    \\\"HTTP URL\\\" should include the hostname, port, and path to the ListenHTTP.\\n    \\\"Request Content-Type\\\" = \\\"${mime.type}\\\" because PackageFlowFile output files have attribute mime.type=application/flowfile-v3.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.InvokeHTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n+                                        \"configuration\": \"    \\\"Listening Port\\\" = a unique port number.\\n\\n    ListenHTTP automatically unpacks files that have attribute mime.type=application/flowfile-v3.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that InvokeHTTP sends, then the original 99 FlowFiles will be output by ListenHTTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListenHTTP\"\n+                                    }\n+                                ],\n+                                \"description\": \"Send FlowFile content and attributes from one NiFi instance to another NiFi instance.\",\n+                                \"keywords\": [\n+                                    \"flowfile\",\n+                                    \"attributes\",\n+                                    \"content\",\n+                                    \"ffv3\",\n+                                    \"flowfile-stream-v3\",\n+                                    \"transfer\"\n+                                ],\n+                                \"notes\": \"A Remote Process Group is preferred to send FlowFiles between two NiFi instances, but an alternative is to use PackageFlowFile then InvokeHTTP sending to ListenHTTP.\"\n+                            },\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can improve storage efficiency by batching many FlowFiles together into 1 larger file that is stored.\\n\\n    Connect the success relationship to the input of any NiFi egress processor for offline storage.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"configuration\": \"    \\\"Packaging Format\\\" = \\\"application/flowfile-v3\\\".\\n\\n    Connect the output of a NiFi ingress processor that reads files stored offline to the input of UnpackContent.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that is read from storage, then the original 99 FlowFiles will be output by UnpackContent.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.UnpackContent\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"Export FlowFile content and attributes from NiFi to external storage and reimport.\",\n+                                \"keywords\": [\n+                                    \"flowfile\",\n+                                    \"attributes\",\n+                                    \"content\",\n+                                    \"ffv3\",\n+                                    \"flowfile-stream-v3\",\n+                                    \"offline\",\n+                                    \"storage\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"max-batch-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Maximum number of FlowFiles to package into one output FlowFile using a best effort, non guaranteed approach. Multiple input queues can produce unexpected batching behavior.\",\n+                                \"displayName\": \"Maximum Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"max-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Items hash key value\",\n-                                \"name\": \"  dynamodb.item.hash.key.value\"\n-                            },\n-                            {\n-                                \"description\": \"Items range key value\",\n-                                \"name\": \"  dynamodb.item.range.key.value\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\",\n+                            \"org.apache.nifi.processors.standard.UnpackContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n+                                \"description\": \"The FlowFiles that were used to create the package are sent to this relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to not found relationship if key not found in the table\",\n-                                \"name\": \"not found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"DynamoDB\",\n-                            \"Fetch\",\n-                            \"Get\"\n+                            \"attributes\",\n+                            \"flowfile\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"package\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                        \"typeDescription\": \"Retrieves a document from DynamoDB based on hash and range key.  The key can be string or number.For any get request all the primary keys are required (hash or hash and range based on the table keys).A Json Document ('Map') attribute of the DynamoDB item is read into the content of the FlowFile.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PackageFlowFile\",\n+                        \"typeDescription\": \"This processor will package FlowFile attributes and content into an output FlowFile that can be exported from NiFi and imported back into NiFi, preserving the original attributes and content.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n+                                \"description\": \"The mime.type will be changed to application/flowfile-v3\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76801,545 +76343,204 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"ACCEPT_EMPTY_EXTENSIONS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n+                                \"displayName\": \"Accept empty extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Batch items for each request (between 1 and 50)\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The items to be retrieved in one batch\",\n-                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch items for each request (between 1 and 50)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character set of document\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character set of data in the document\",\n-                                \"displayName\": \"Character set of document\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character set of document\",\n+                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"APPEND_RAW_MESSAGE_TO_JSON\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When using flowfile-content (i.e. JSON output), add the original CEF message to the resulting JSON object. The original message is added as a string to _raw.\",\n+                                \"displayName\": \"Append raw message to JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Name\": {\n-                                \"description\": \"The hash key name of the item\",\n-                                \"displayName\": \"Hash Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hash Key Name\",\n+                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n-                                \"description\": \"The hash key value of the item\",\n-                                \"displayName\": \"Hash Key Value\",\n+                            \"DATETIME_REPRESENTATION\": {\n+                                \"defaultValue\": \"en-US\",\n+                                \"description\": \"The IETF BCP 47 representation of the Locale to be used when parsing date fields with long or short month names (e.g. may <en-US> vs. mai. <fr-FR>. The defaultvalue is generally safe. Only change if having issues parsing CEF messages\",\n+                                \"displayName\": \"DateTime Locale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hash Key Value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DATETIME_REPRESENTATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Key Value Type\": {\n+                            \"FIELDS_DESTINATION\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the CEF parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attributeattribute, fields will be populated as attributes. If set to flowfile-content, the CEF extension field will be converted into a flat JSON object.\",\n+                                \"displayName\": \"Parsed fields destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Key Value Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Json Document attribute\": {\n-                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n-                                \"displayName\": \"Json Document attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Json Document attribute\",\n+                                \"name\": \"FIELDS_DESTINATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Range Key Name\": {\n-                                \"description\": \"The range key name of the item\",\n-                                \"displayName\": \"Range Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Range Key Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Range Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Range Key Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value Type\": {\n+                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, custom extensions (not specified in the CEF specifications) will be included in the generated data/attributes.\",\n+                                \"displayName\": \"Include custom extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Range Key Value Type\",\n+                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"TIME_REPRESENTATION\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Local Timezone (system Default)\",\n+                                        \"value\": \"Local Timezone (system Default)\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"defaultValue\": \"Local Timezone (system Default)\",\n+                                \"description\": \"Timezone to be used when representing date fields. UTC will convert all dates to UTC, while Local Timezone will convert them to the timezone used by NiFi.\",\n+                                \"displayName\": \"Timezone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"TIME_REPRESENTATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Items hash key value\",\n-                                \"name\": \"  dynamodb.item.hash.key.value\"\n-                            },\n-                            {\n-                                \"description\": \"Items range key value\",\n-                                \"name\": \"  dynamodb.item.range.key.value\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a CEF message will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"Any FlowFile that could not be parsed as a CEF message will be transferred to this Relationship without any attributes being added\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"DynamoDB\",\n-                            \"Insert\",\n-                            \"Put\"\n+                            \"attributes\",\n+                            \"cef\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n-                        \"typeDescription\": \"Puts a document from DynamoDB based on hash and range key.  The table can have either hash and range or hash key alone. Currently the keys supported are string and number and value can be json document. In case of hash and range keys both key are required for the operation. The FlowFile content must be JSON. FlowFile content is mapped to the specified Json Document attribute in the DynamoDB item.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseCEF\",\n+                        \"typeDescription\": \"Parses the contents of a CEF formatted message and adds attributes to the FlowFile for headers and extensions of the parts of the CEF message.\\nNote: This Processor expects CEF messages WITHOUT the syslog headers (i.e. starting at \\\"CEF:0\\\"\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n+                                \"description\": \"The version of the CEF message.\",\n+                                \"name\": \"cef.header.version\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n+                                \"description\": \"The Device Vendor of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVendor\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n+                                \"description\": \"The Device Product of the CEF message.\",\n+                                \"name\": \"cef.header.deviceProduct\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n+                                \"description\": \"The Device Version of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVersion\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n+                                \"description\": \"The Device Event Class ID of the CEF message.\",\n+                                \"name\": \"cef.header.deviceEventClassId\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n+                                \"description\": \"The name of the CEF message.\",\n+                                \"name\": \"cef.header.name\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n+                                \"description\": \"The severity of the CEF message.\",\n+                                \"name\": \"cef.header.severity\"\n                             },\n                             {\n-                                \"description\": \"IO exception message on creating item\",\n-                                \"name\": \"dynamodb.item.io.error\"\n+                                \"description\": \"The key and value generated by the parsing of the message.\",\n+                                \"name\": \"cef.extension.*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -77352,551 +76553,279 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"system\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                        \"typeDescription\": \"Attempts to parses the contents of a Syslog message in accordance to RFC5424 and RFC3164 formats and adds attributes to the FlowFile for each of the parts of the Syslog message.Note: Be mindfull that RFC3164 is informational and a wide range of different implementations are present in the wild. If messages fail parsing, considering using RFC5424 or using a generic parsing processors such as ExtractGrok.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                            {\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n-                            \"partition-key-attribute\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ByAttribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Partition Key Strategy\",\n-                                        \"propertyName\": \"partition-key-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the FlowFile attribute that will be used as the value of the partition key when using \\\"Partition by attribute\\\" partition key strategy.\",\n-                                \"displayName\": \"Partition Key Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"partition-key-attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n-                            \"partition-key-field\": {\n-                                \"description\": \"Defines the name of the partition key field in the DynamoDB table. Partition key is also known as hash key. Depending on the \\\"Partition Key Strategy\\\" the field value might come from the incoming Record or a generated one.\",\n-                                \"displayName\": \"Partition Key Field\",\n+                            {\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies which character set of the Syslog messages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"partition-key-field\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partition-key-strategy\": {\n+                            \"include_policy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Uses the value of the Record field identified by the \\\"Partition Key Field\\\" property as partition key value.\",\n-                                        \"displayName\": \"Partition By Field\",\n-                                        \"value\": \"ByField\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Uses an incoming FlowFile attribute identified by \\\"Partition Key Attribute\\\" as the value of the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n-                                        \"displayName\": \"Partition By Attribute\",\n-                                        \"value\": \"ByAttribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses a generated UUID as value for the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n-                                        \"displayName\": \"Generated UUID\",\n-                                        \"value\": \"Generated\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ByField\",\n-                                \"description\": \"Defines the strategy the processor uses to assign partition key value to the inserted Items.\",\n-                                \"displayName\": \"Partition Key Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partition-key-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the Syslog Message body will be included in the attributes.\",\n+                                \"displayName\": \"Include Message Body in Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"include_policy\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"sort-key-field\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ByField\",\n-                                            \"BySequence\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sort Key Strategy\",\n-                                        \"propertyName\": \"sort-key-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Defines the name of the sort key field in the DynamoDB table. Sort key is also known as range key.\",\n-                                \"displayName\": \"Sort Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sort-key-field\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sort-key-strategy\": {\n+                            \"nil_policy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The processor will not assign sort key to the inserted Items.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"The missing field will not have an attribute added.\",\n+                                        \"displayName\": \"OMIT\",\n+                                        \"value\": \"OMIT\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses the value of the Record field identified by the \\\"Sort Key Field\\\" property as sort key value.\",\n-                                        \"displayName\": \"Sort By Field\",\n-                                        \"value\": \"ByField\"\n+                                        \"description\": \"The missing field will have an empty attribute added.\",\n+                                        \"displayName\": \"NULL\",\n+                                        \"value\": \"NULL\"\n                                     },\n                                     {\n-                                        \"description\": \"The processor will assign a number for every item based on the original record's position in the incoming FlowFile. This will be used as sort key value.\",\n-                                        \"displayName\": \"Generate Sequence\",\n-                                        \"value\": \"BySequence\"\n+                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n+                                        \"displayName\": \"DASH\",\n+                                        \"value\": \"DASH\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Defines the strategy the processor uses to assign sort key to the inserted Items.\",\n-                                \"displayName\": \"Sort Key Strategy\",\n+                                \"defaultValue\": \"NULL\",\n+                                \"description\": \"Defines how NIL values are handled for header fields.\",\n+                                \"displayName\": \"NIL Policy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sort-key-strategy\",\n+                                \"name\": \"nil_policy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n-                                \"name\": \"dynamodb.chunks.processed\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\"\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"NETWORK\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"DynamoDB\",\n-                            \"Insert\",\n-                            \"Put\",\n-                            \"Record\"\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"syslog5424\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\",\n-                        \"typeDescription\": \"Inserts items into DynamoDB based on record-oriented data. The record fields are mapped into DynamoDB item fields, including partition and sort keys if set. Depending on the number of records the processor might execute the insert in multiple chunks in order to overcome DynamoDB's limitation on batch writing. This might result partially processed FlowFiles in which case the FlowFile will be transferred to the \\\"unprocessed\\\" relationship with the necessary attribute to retry later without duplicating the already executed inserts.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ParseSyslog5424\",\n+                        \"typeDescription\": \"Attempts to parse the contents of a well formed Syslog message in accordance to RFC5424 format and adds attributes to the FlowFile for each of the parts of the Syslog message, including Structured Data.Structured Data will be written to attributes as one attribute per item id + parameter see https://tools.ietf.org/html/rfc5424.Note: ParseSyslog5424 follows the specification more closely than ParseSyslog.  If your Syslog producer does not follow the spec closely, with regards to using '-' for missing header entries for example, those logs will fail with this parser, where they would not fail with ParseSyslog.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n-                                \"name\": \"dynamodb.chunks.processed\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n+                                \"description\": \"The appname of the Syslog message.\",\n+                                \"name\": \"syslog.appname\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n+                                \"description\": \"The procid of the Syslog message.\",\n+                                \"name\": \"syslog.procid\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n+                                \"description\": \"The messageid the Syslog message.\",\n+                                \"name\": \"syslog.messageid\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n+                                \"description\": \"Multiple entries per structuredData of the Syslog message.\",\n+                                \"name\": \"syslog.structuredData\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n                             },\n                             {\n-                                \"description\": \"IO exception message on creating item\",\n-                                \"name\": \"dynamodb.item.io.error\"\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -77904,380 +76833,174 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Each dynamic property represents a RecordPath that will be evaluated against each record in an incoming FlowFile. When the value of the RecordPath is determined for a Record, an attribute is added to the outgoing FlowFile. The name of the attribute is the same as the name of this property. The value of the attribute is the same as the value of the field in the Record that the RecordPath points to. Note that no attribute will be added if the value returned for the RecordPath is null or is not a scalar value (i.e., the value is an Array, Map, or Record).\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name given to the dynamic property is the name of the attribute that will be used to denote the value of the associated RecordPath.\",\n+                                \"value\": \"A RecordPath that points to a field in the Record.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Amazon Kinesis Firehose Delivery Stream Name\": {\n-                                \"description\": \"The name of kinesis firehose delivery stream\",\n-                                \"displayName\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"250\",\n-                                \"description\": \"Batch size for messages (1-500).\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max message buffer size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Max message buffer\",\n-                                \"displayName\": \"Max message buffer size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max message buffer size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\",\n+                            \"org.apache.nifi.processors.standard.QueryRecord\",\n+                            \"org.apache.nifi.processors.standard.SplitRecord\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile cannot be partitioned from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"firehose\",\n-                            \"kinesis\",\n-                            \"put\",\n-                            \"stream\"\n+                            \"bin\",\n+                            \"group\",\n+                            \"organize\",\n+                            \"partition\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"rpath\",\n+                            \"segment\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.kinesis.firehose.PutKinesisFirehose\",\n-                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis Firehose. In order to send data to firehose, the firehose delivery stream name has to be specified.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.processors.standard.PartitionRecord\",\n+                        \"typeDescription\": \"Splits, or partitions, record-oriented data based on the configured fields in the data. One or more properties must be added. The name of the property is the name of an attribute to add. The value of the property is a RecordPath to evaluate against each Record. Two records will go to the same outbound FlowFile only if they have the same value for each of the given RecordPaths. Because we know that all records in a given output FlowFile have the same value for the fields that are specified by the RecordPath, an attribute is added for each field. See Additional Details on the Usage page for more information and examples.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the type of data that is being used to partition the data. The property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, if we want to separate records based on their `transactionType` field, we could add a new property named `transactionType`. The value of the property might be `/transaction/type`. An input FlowFile will then be separated into as few FlowFiles as possible such that each output FlowFile has the same value for the `transactionType` field.\\n\",\n+                                \"description\": \"Separate records into separate FlowFiles so that all of the records in a FlowFile have the same value for a given field or set of fields.\",\n+                                \"keywords\": [\n+                                    \"separate\",\n+                                    \"split\",\n+                                    \"partition\",\n+                                    \"break apart\",\n+                                    \"colocate\",\n+                                    \"segregate\",\n+                                    \"record\",\n+                                    \"field\",\n+                                    \"recordpath\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise.\\n\\nFor example, if we want to separate records based on whether or not they have a transaction total of more than $1,000 we could add a new property named `largeTransaction` with a value of `/transaction/total > 1000`. This will create two FlowFiles. In the first, all records will have a total over `1000`. In the second, all records will have a transaction less than or equal to 1000. Each FlowFile will have an attribute named `largeTransaction` with a value of `true` or `false`.\\n\",\n+                                \"description\": \"Separate records based on whether or not they adhere to a specific criteria\",\n+                                \"keywords\": [\n+                                    \"separate\",\n+                                    \"split\",\n+                                    \"partition\",\n+                                    \"break apart\",\n+                                    \"segregate\",\n+                                    \"record\",\n+                                    \"field\",\n+                                    \"recordpath\",\n+                                    \"criteria\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Error message on posting message to AWS Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.error.message\"\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Error code for the message when posting to AWS Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.error.code\"\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Record id of the message posted to Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.record.id\"\n+                                \"description\": \"All partitioned FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n+                                \"name\": \"<dynamic property name>\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -78285,578 +77008,577 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Override default KCL Configuration ConfigsBuilder properties with required values. Supports setting of values directly on the ConfigsBuilder, such as 'namespace', as well as properties on nested builders. For example, to set configsBuilder.retrievalConfig().maxListShardsRetryAttempts(value), name the property as 'retrievalConfig.maxListShardsRetryAttempts'. Only supports setting of simple property values, e.g. String, int, long and boolean. Does not allow override of KCL Configuration settings handled by non-dynamic processor properties.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Kinesis Client Library (KCL) Configuration property name\",\n-                                \"value\": \"Value to set in the KCL Configuration property\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Data Record Path\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to the database instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to the database.\",\n+                                \"displayName\": \"Data Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Data Record Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Statement Type Record Path\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use Record Path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the Statement Type. The RecordPath should equate to either INSERT, UPDATE, UPSERT, or DELETE. (Debezium style operation types are also supported: \\\"r\\\" and \\\"c\\\" for INSERT, \\\"u\\\" for UPDATE, and \\\"d\\\" for DELETE)\",\n+                                \"displayName\": \"Statement Type Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Statement Type Record Path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"database-session-autocommit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively). If set to true, the driver/database automatically handles the commit/rollback.\",\n+                                \"displayName\": \"Database Session AutoCommit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"database-session-autocommit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"db-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-allow-multiple-statements\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates whether to split the field value by a semicolon and execute each statement separately. If any statement causes an error, the entire set of statements will be rolled back. If the Statement Type is not 'SQL', this field is ignored.\",\n+                                \"displayName\": \"Allow Multiple SQL Statements\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-allow-multiple-statements\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-binary-format\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n+                                        \"description\": \"String values for binary columns contain the original value as text via UTF-8 character encoding\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"String values for binary columns contain the original value in hexadecimal format\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"String values for binary columns contain the original value in Base64 encoded format\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"Base64\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The format to be applied when decoding string values to binary.\",\n+                                \"displayName\": \"Binary String Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-binary-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-application-name\": {\n-                                \"description\": \"The Kinesis stream reader application name.\",\n-                                \"displayName\": \"Application Name\",\n+                            \"put-db-record-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-catalog-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-dcbp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-application-name\",\n+                                \"name\": \"put-db-record-dcbp-service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"put-db-record-field-containing-sql\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"If the Statement Type is 'SQL' (as set in the statement.type attribute), this field indicates which field in the record(s) contains the SQL statement to execute. The value of the field must be a single SQL statement. If the Statement Type is not 'SQL', this field is ignored.\",\n+                                \"displayName\": \"Field Containing SQL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-field-containing-sql\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-checkpoint-interval\": {\n-                                \"defaultValue\": \"3 secs\",\n-                                \"description\": \"Interval between Kinesis checkpoints\",\n-                                \"displayName\": \"Checkpoint Interval\",\n+                            \"put-db-record-max-batch-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies maximum number of sql statements to be included in each batch sent to the database. Zero means the batch size is not limited, and all statements are put into a single batch which can cause high memory usage issues for a very large number of statements.\",\n+                                \"displayName\": \"Maximum Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-checkpoint-interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-max-batch-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-query-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"put-db-record-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-cloudwatch-flag\": {\n+                            \"put-db-record-quoted-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to report Kinesis usage metrics to CloudWatch.\",\n-                                \"displayName\": \"Report Metrics to CloudWatch\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-cloudwatch-flag\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-dynamodb-override\": {\n-                                \"description\": \"DynamoDB override to use non-AWS deployments\",\n-                                \"displayName\": \"DynamoDB Override\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"amazon-kinesis-stream-dynamodb-override\",\n+                                \"name\": \"put-db-record-quoted-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-failover-timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Kinesis Client Library failover timeout\",\n-                                \"displayName\": \"Failover Timeout\",\n+                            \"put-db-record-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-failover-timeout\",\n-                                \"required\": true,\n+                                \"name\": \"put-db-record-quoted-table-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-graceful-shutdown-timeout\": {\n-                                \"defaultValue\": \"20 secs\",\n-                                \"description\": \"Kinesis Client Library graceful shutdown timeout\",\n-                                \"displayName\": \"Graceful Shutdown Timeout\",\n+                            \"put-db-record-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-graceful-shutdown-timeout\",\n+                                \"name\": \"put-db-record-record-reader\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"put-db-record-schema-name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n+                                \"displayName\": \"Schema Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-initial-position\": {\n+                            \"put-db-record-statement-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start reading just after the most recent record in the shard, so that you always read the most recent data in the shard.\",\n-                                        \"displayName\": \"LATEST\",\n-                                        \"value\": \"LATEST\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading at the last untrimmed record in the shard in the system, which is the oldest data record in the shard.\",\n-                                        \"displayName\": \"TRIM_HORIZON\",\n-                                        \"value\": \"TRIM_HORIZON\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading from the position denoted by a specific time stamp, provided in the value Timestamp.\",\n-                                        \"displayName\": \"AT_TIMESTAMP\",\n-                                        \"value\": \"AT_TIMESTAMP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPSERT\",\n+                                        \"value\": \"UPSERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT_IGNORE\",\n+                                        \"value\": \"INSERT_IGNORE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DELETE\",\n+                                        \"value\": \"DELETE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use statement.type Attribute\",\n+                                        \"value\": \"Use statement.type Attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use Record Path\",\n+                                        \"value\": \"Use Record Path\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"LATEST\",\n-                                \"description\": \"Initial position to read Kinesis streams.\",\n-                                \"displayName\": \"Initial Stream Position\",\n+                                \"description\": \"Specifies the type of SQL Statement to generate. Please refer to the database documentation for a description of the behavior of each operation. Please note that some Database Types may not support certain Statement Types. If 'Use statement.type Attribute' is chosen, then the value is taken from the statement.type attribute in the FlowFile. The 'Use statement.type Attribute' option is the only one that allows the 'SQL' statement type. If 'SQL' is specified, the value of the field specified by the 'Field Containing SQL' property is expected to be a valid SQL statement on the target database, and will be executed as-is.\",\n+                                \"displayName\": \"Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-initial-position\",\n+                                \"name\": \"put-db-record-statement-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-position-timestamp\": {\n-                                \"dependencies\": [\n+                            \"put-db-record-table-name\": {\n+                                \"description\": \"The name of the table that the statement should affect. Note that if the database is case-sensitive, the table name must match the database's table name exactly.\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-translate-field-names\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AT_TIMESTAMP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Initial Stream Position\",\n-                                        \"propertyName\": \"amazon-kinesis-stream-initial-position\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Timestamp position in stream from which to start reading Kinesis Records. Required if Initial position to read Kinesis streams. is AT_TIMESTAMP. Uses the Timestamp Format to parse value into a Date.\",\n-                                \"displayName\": \"Stream Position Timestamp\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-position-timestamp\",\n+                                \"name\": \"put-db-record-translate-field-names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading received messages. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record will create a FlowFile.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"put-db-record-unmatched-column-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-record-reader\",\n+                                \"name\": \"put-db-record-unmatched-column-behavior\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record will create a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"put-db-record-unmatched-field-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail on Unmatched Fields\",\n+                                        \"value\": \"Fail on Unmatched Fields\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-record-writer\",\n+                                \"name\": \"put-db-record-unmatched-field-behavior\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-retry-count\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Number of times to retry a Kinesis operation (process record, checkpoint, shutdown)\",\n-                                \"displayName\": \"Retry Count\",\n+                            \"put-db-record-update-keys\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use statement.type Attribute\",\n+                                            \"Use Record Path\",\n+                                            \"UPSERT\",\n+                                            \"UPDATE\",\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Statement Type\",\n+                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n+                                \"displayName\": \"Update Keys\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-retry-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-update-keys\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-retry-wait\": {\n-                                \"defaultValue\": \"1 sec\",\n-                                \"description\": \"Interval between Kinesis operation retries (process record, checkpoint, shutdown)\",\n-                                \"displayName\": \"Retry Wait\",\n+                            \"rollback-on-failure\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n+                                \"displayName\": \"Rollback On Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-retry-wait\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-timestamp-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ss\",\n-                                \"description\": \"Format to use for parsing the Stream Position Timestamp into a Date and converting the Kinesis Record's Approximate Arrival Timestamp into a FlowFile attribute.\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"amazon-kinesis-stream-timestamp-format\",\n+                                \"name\": \"rollback-on-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kinesis-stream-name\": {\n-                                \"description\": \"The name of Kinesis Stream\",\n-                                \"displayName\": \"Amazon Kinesis Stream Name\",\n+                            \"table-schema-cache-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Specifies how many Table Schemas should be cached\",\n+                                \"displayName\": \"Table Schema Cache Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kinesis-stream-name\",\n+                                \"name\": \"table-schema-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n+                                \"name\": \"statement.type\"\n+                            }\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Kinesis Client Library is used to create a Worker thread for consumption of Kinesis Records. The Worker is initialised and started when this Processor has been triggered. It runs continually, spawning Kinesis Record Processors as required to fetch Kinesis Records. The Worker Thread (and any child Record Processor threads) are not controlled by the normal NiFi scheduler as part of the Concurrent Thread pool and are not released until this processor is stopped.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"Kinesis Client Library will continually poll for new Records, requesting up to a maximum number of Records/bytes per call. This can result in sustained network usage.\",\n-                                \"resource\": \"NETWORK\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"consume\",\n-                            \"kinesis\",\n-                            \"stream\"\n+                            \"database\",\n+                            \"delete\",\n+                            \"insert\",\n+                            \"jdbc\",\n+                            \"put\",\n+                            \"record\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\",\n-                        \"typeDescription\": \"Reads data from the specified AWS Kinesis stream and outputs a FlowFile for every processed Record (raw)  or a FlowFile for a batch of processed records if a Record Reader and Record Writer are configured. At-least-once delivery of all Kinesis Records within the Stream while the processor is running. AWS Kinesis Client Library can take several seconds to initialise before starting to fetch data. Uses DynamoDB for check pointing and CloudWatch (optional) for metrics. Ensure that the credentials provided have access to DynamoDB and CloudWatch (optional) along with Kinesis.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n+                        \"typeDescription\": \"The PutDatabaseRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file. These records are translated to SQL statements and executed as a single transaction. If any errors occur, the flow file is routed to failure or retry, and if the records are transmitted successfully, the incoming flow file is routed to success.  The type of statement executed by the processor is specified via the Statement Type property, which accepts some hard-coded values such as INSERT, UPDATE, and DELETE, as well as 'Use statement.type Attribute', which causes the processor to get the statement type from a flow file attribute.  IMPORTANT: If the Statement Type is UPDATE, then the incoming records must not alter the value(s) of the primary keys (or user-specified Update Keys). If such records are encountered, the UPDATE statement issued to the database may do nothing (if no existing records with the new primary key values are found), or could inadvertently corrupt the existing data (by changing records for which the new values of the primary keys exist).\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\",\n+                                \"description\": \"Insert records into a database\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Partition key of the (last) Kinesis Record read from the Shard\",\n-                                \"name\": \"aws.kinesis.partition.key\"\n-                            },\n-                            {\n-                                \"description\": \"Shard ID from which the Kinesis Record was read\",\n-                                \"name\": \"aws.kinesis.shard.id\"\n-                            },\n-                            {\n-                                \"description\": \"The unique identifier of the (last) Kinesis Record within its Shard\",\n-                                \"name\": \"aws.kinesis.sequence.number\"\n-                            },\n-                            {\n-                                \"description\": \"Approximate arrival timestamp of the (last) Kinesis Record read from the stream\",\n-                                \"name\": \"aws.kinesis.approximate.arrival.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer (if configured)\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Number of records written to the FlowFiles by the Record Writer (if configured)\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Record Reader or Record Writer (if configured)\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n+                                \"name\": \"putdatabaserecord.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -78869,392 +77591,122 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Cache Entry Identifier\": {\n+                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the cache key\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"Cache update strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"Adds the specified entry to the cache, replacing any value that is currently set.\",\n+                                        \"displayName\": \"Replace if present\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"Adds the specified entry to the cache, if the key does not exist.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"replace\",\n+                                \"description\": \"Determines how the cache is updated if the cache already contains the entry\",\n+                                \"displayName\": \"Cache update strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-partition-key\": {\n-                                \"defaultValue\": \"${kinesis.partition.key}\",\n-                                \"description\": \"The partition key attribute.  If it is not set, a random value is used\",\n-                                \"displayName\": \"Amazon Kinesis Stream Partition Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"amazon-kinesis-stream-partition-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kinesis-stream-name\": {\n-                                \"description\": \"The name of Kinesis Stream\",\n-                                \"displayName\": \"Amazon Kinesis Stream Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"kinesis-stream-name\",\n+                                \"name\": \"Cache update strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-message-buffer-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Max message buffer size in Mega-bytes\",\n-                                \"displayName\": \"Max message buffer size (MB)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-message-buffer-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-batch-size\": {\n-                                \"defaultValue\": \"250\",\n-                                \"description\": \"Batch size for messages (1-500).\",\n-                                \"displayName\": \"Message Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-batch-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to cache flow files\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"Max cache entry size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum amount of data to put into cache\",\n+                                \"displayName\": \"Max cache entry size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max cache entry size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\"\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.FetchDistributedMapCache\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that cannot be inserted into the cache will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"kinesis\",\n-                            \"put\",\n-                            \"stream\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\",\n-                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis. In order to send data to Kinesis, the stream name has to be specified.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutDistributedMapCache\",\n+                        \"typeDescription\": \"Gets the content of a FlowFile and puts it to a distributed map cache, using a cache key computed from FlowFile attributes. If the cache already contains the entry and the cache update strategy is 'keep original' the entry is not replaced.'\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Error message on posting message to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Error code for the message when posting to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"Sequence number for the message when posting to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.sequence.number\"\n-                            },\n-                            {\n-                                \"description\": \"Shard id of the message posted to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.shard.id\"\n+                                \"description\": \"All FlowFiles will have an attribute 'cached'. The value of this attribute is true, is the FlowFile is cached, otherwise false.\",\n+                                \"name\": \"cached\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -79262,391 +77714,362 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Dynamic property names that will be passed to the Mail session. Possible properties can be found in: https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"mail.propertyName\",\n+                                \"value\": \"Value for a specific property to be set in the JavaMail Session object\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Attach File\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the FlowFile content should be attached to the email\",\n+                                \"displayName\": \"Attach File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Attach File\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Amazon Lambda Name\": {\n-                                \"description\": \"The Lambda Function Name\",\n-                                \"displayName\": \"Amazon Lambda Name\",\n+                            \"BCC\": {\n+                                \"description\": \"The recipients to include in the BCC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"BCC\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Amazon Lambda Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"BCC\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"CC\": {\n+                                \"description\": \"The recipients to include in the CC-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"CC\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"CC\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Content Type\": {\n+                                \"defaultValue\": \"text/plain\",\n+                                \"description\": \"Mime Type used to interpret the contents of the email, such as text/plain or text/html\",\n+                                \"displayName\": \"Content Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Content Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Amazon Lambda Qualifier (version)\": {\n-                                \"defaultValue\": \"$LATEST\",\n-                                \"description\": \"The Lambda Function Version\",\n-                                \"displayName\": \"Amazon Lambda Qualifier (version)\",\n+                            \"From\": {\n+                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"From\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Amazon Lambda Qualifier (version)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"From\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Include All Attributes In Message\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not all FlowFile attributes should be recorded in the body of the email message\",\n+                                \"displayName\": \"Include All Attributes In Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Include All Attributes In Message\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Message\": {\n+                                \"description\": \"The body of the email message\",\n+                                \"displayName\": \"Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n+                            \"SMTP Auth\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Flag indicating whether authentication should be used\",\n+                                \"displayName\": \"SMTP Auth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Auth\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Hostname\": {\n+                                \"description\": \"The hostname of the SMTP host\",\n+                                \"displayName\": \"SMTP Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"password-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SMTP Port\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The Port used for SMTP communications\",\n+                                \"displayName\": \"SMTP Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Socket Factory\": {\n+                                \"defaultValue\": \"javax.net.ssl.SSLSocketFactory\",\n+                                \"description\": \"Socket Factory to use for SMTP Connection\",\n+                                \"displayName\": \"SMTP Socket Factory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Socket Factory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP TLS\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether Opportunistic TLS should be enabled using STARTTLS command\",\n+                                \"displayName\": \"SMTP STARTTLS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP TLS\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP Username\": {\n+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"SMTP X-Mailer Header\": {\n+                                \"defaultValue\": \"NiFi\",\n+                                \"description\": \"X-Mailer used in the header of the outgoing email\",\n+                                \"displayName\": \"SMTP X-Mailer Header\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP X-Mailer Header\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Subject\": {\n+                                \"defaultValue\": \"Message from NiFi\",\n+                                \"description\": \"The email subject\",\n+                                \"displayName\": \"Subject\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Subject\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"To\": {\n+                                \"description\": \"The recipients to include in the To-Line of the email. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"To\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"To\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"attribute-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Email messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"authorization-mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"password-based-authorization-mode\",\n+                                \"description\": \"How to authorize sending email on the user's behalf.\",\n+                                \"displayName\": \"Authorization Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"email-ff-content-as-message\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the FlowFile content should be the message of the email. If true, the 'Message' property is ignored.\",\n+                                \"displayName\": \"Flow file content as message\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"email-ff-content-as-message\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"input-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the FlowFile contents for reading input FlowFile contents to generate the message body or as an attachment to the message. If not set, UTF-8 will be the default value.\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"input-character-set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"OAuth2 service that can provide access tokens.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"oauth2-access-token-provider\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that fail to send will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a String object) will be read into memory in case the property to use the flow file content as the email body is set to true.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"lambda\",\n-                            \"put\"\n+                            \"email\",\n+                            \"notify\",\n+                            \"put\",\n+                            \"smtp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.lambda.PutLambda\",\n-                        \"typeDescription\": \"Sends the contents to a specified Amazon Lambda Function. The AWS credentials used for authentication must have permissions execute the Lambda function (lambda:InvokeFunction).The FlowFile content must be JSON.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutEmail\",\n+                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Function error message in result on posting message to AWS Lambda\",\n-                                \"name\": \"aws.lambda.result.function.error\"\n-                            },\n-                            {\n-                                \"description\": \"Status code in the result for the message when posting to AWS Lambda\",\n-                                \"name\": \"aws.lambda.result.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"Payload in the result from AWS Lambda\",\n-                                \"name\": \"aws.lambda.result.payload\"\n-                            },\n-                            {\n-                                \"description\": \"Log in the result of the message posted to Lambda\",\n-                                \"name\": \"aws.lambda.result.log\"\n-                            },\n-                            {\n-                                \"description\": \"Exception message on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"Exception cause on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.cause\"\n-                            },\n-                            {\n-                                \"description\": \"Exception error code on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"Exception request id on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.request.id\"\n-                            },\n-                            {\n-                                \"description\": \"Exception status code on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.status.code\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -79654,307 +78077,432 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"pre.cmd._____\",\n+                                \"value\": \"Not used\"\n+                            },\n+                            {\n+                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"post.cmd._____\",\n+                                \"value\": \"Not used\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"Conflict Resolution\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n+                                        \"description\": \"Remote file is replaced with new file, FlowFile goes to success\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to success\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n+                                        \"description\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n+                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Determines how to handle the problem of filename collisions\",\n+                                \"displayName\": \"Conflict Resolution\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Conflict Resolution\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Directory\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Create Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Dot Rename\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n+                                \"displayName\": \"Dot Rename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Dot Rename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Modified Time\": {\n+                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Reject Zero-Byte Files\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n+                                \"displayName\": \"Reject Zero-Byte Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Temporary Filename\": {\n+                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n+                                \"displayName\": \"Temporary Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Temporary Filename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ftp-use-utf8\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Tells the client to use UTF-8 encoding when processing files and filenames. If set to true, the server must also support UTF-8 encoding.\",\n+                                \"displayName\": \"Use UTF-8 Encoding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -79963,75 +78511,59 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\"\n+                            \"org.apache.nifi.processors.standard.GetFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Polly\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"ftp\",\n+                            \"put\",\n+                            \"remote\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Polly job.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The bucket name where polly output will be located.\",\n-                                \"name\": \"PollyS3OutputBucket\"\n-                            },\n-                            {\n-                                \"description\": \"Object key of polly output.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80039,355 +78571,186 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to write to any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Conflict Resolution Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"Create Missing Directories\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n+                                \"displayName\": \"Create Missing Directories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Create Missing Directories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Directory\": {\n+                                \"description\": \"The directory to which files should be written. You may use expression language such as /aa/bb/${path}\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Group\": {\n+                                \"description\": \"Sets the group on the output file to the value of this attribute.  You may also use expression language such as ${file.group}.\",\n+                                \"displayName\": \"Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Group\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Modified Time\": {\n+                                \"description\": \"Sets the lastModifiedTime on the output file to the value of this attribute.  Format must be yyyy-MM-dd'T'HH:mm:ssZ.  You may also use expression language such as ${file.lastModifiedTime}.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Count\": {\n+                                \"description\": \"Specifies the maximum number of files that can exist in the output directory\",\n+                                \"displayName\": \"Maximum File Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Maximum File Count\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"json-payload\": {\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Owner\": {\n+                                \"description\": \"Sets the owner on the output file to the value of this attribute.  You may also use expression language such as ${file.owner}. Note on many operating systems Nifi must be running as a super-user to have the permissions to set the file owner.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"Sets the permissions on the output file to the value of this attribute.  Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644).  You may also use expression language such as ${file.permissions}.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename to use when writing the FlowFile to disk.\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"Files that could not be written to the output directory for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Polly\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"local\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\",\n-                        \"typeDescription\": \"Trigger a AWS Polly job. It should be followed by GetAwsPollyJobStatus processor in order to monitor job status.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsPollyJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80396,384 +78759,113 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"put-record-include-zero-record-results\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If no records are read from the incoming FlowFile, this property specifies whether or not an empty record set will be transmitted. The original FlowFile will still be routed to success, but if no transmission occurs, no provenance SEND event will be generated.\",\n+                                \"displayName\": \"Include Zero Record Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"put-record-include-zero-record-results\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"put-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"put-record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"put-record-sink\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the query result records to some destination.\",\n+                                \"displayName\": \"Record Destination Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"put-record-sink\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"textract-type\": {\n-                                \"defaultValue\": \"${awsTextractType}\",\n-                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n-                                \"displayName\": \"Textract Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"textract-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n-                                \"name\": \"throttled\"\n+                                \"description\": \"The original FlowFile is routed to this relationship if the records could not be transmitted but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the records could not be transmitted and retrying the operation will also fail\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Textract\"\n+                            \"put\",\n+                            \"record\",\n+                            \"sink\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Textract job.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutRecord\",\n+                        \"typeDescription\": \"The PutRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file, and sends them to a destination specified by a Record Destination Service (i.e. record sink).\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80782,386 +78874,569 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"500\",\n+                                \"description\": \"The maximum number of FlowFiles to send in a single connection\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Conflict Resolution\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n+                                        \"description\": \"Remote file is replaced with new file, FlowFile goes to success\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to success\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n+                                        \"description\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n+                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Determines how to handle the problem of filename collisions\",\n+                                \"displayName\": \"Conflict Resolution\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Conflict Resolution\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Directory\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Create Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Disable Directory Listing\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n+                                \"displayName\": \"Disable Directory Listing\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Disable Directory Listing\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Dot Rename\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, then the filename of the sent file is prepended with a \\\".\\\" and then renamed back to the original once the file is completely sent. Otherwise, there is no rename. This property is ignored if the Temporary Filename property is set.\",\n+                                \"displayName\": \"Dot Rename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Dot Rename\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Host Key File\": {\n+                                \"description\": \"If supplied, the given file will be used as the Host Key; otherwise, if 'Strict Host Key Checking' property is applied (set to true) then uses the 'known_hosts' and 'known_hosts2' files from ~/.ssh directory else no host key file will be used\",\n+                                \"displayName\": \"Host Key File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Http Proxy Username\": {\n+                                \"description\": \"Http Proxy Username\",\n+                                \"displayName\": \"Http Proxy Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: ecdsa-sha2-nistp256, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521, ecdsa-sha2-nistp521-cert-v01@openssh.com, rsa-sha2-256, rsa-sha2-512, ssh-dss, ssh-dss-cert-v01@openssh.com, ssh-ed25519, ssh-ed25519-cert-v01@openssh.com, ssh-rsa, ssh-rsa-cert-v01@openssh.com\",\n+                                \"displayName\": \"Key Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Modified Time\": {\n+                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Authentication Codes Allowed\": {\n+                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n+                                \"displayName\": \"Message Authentication Codes Allowed\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"The permissions to assign to the file after transferring it. Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644). If not set, the permissions will not be changed. You may also use expression language such as ${file.permissions}. If the value is invalid, the processor will not be invalid but will fail to change permissions of the file.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Reject Zero-Byte Files\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n+                                \"displayName\": \"Reject Zero-Byte Files\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Group\": {\n+                                \"description\": \"Integer value representing the Group ID to set on the file after transferring it. If not set, the group will not be set. You may also use expression language such as ${file.group}. If the value is invalid, the processor will not be invalid but will fail to change the group of the file.\",\n+                                \"displayName\": \"Remote Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Group\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Owner\": {\n+                                \"description\": \"Integer value representing the User ID to set on the file after transferring it. If not set, the owner will not be set. You may also use expression language such as ${file.owner}. If the value is invalid, the processor will not be invalid but will fail to change the owner of the file.\",\n+                                \"displayName\": \"Remote Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"json-payload\": {\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Temporary Filename\": {\n+                                \"description\": \"If set, the filename of the sent file will be equal to the value specified during the transfer and after successful completion will be renamed to the original filename. If this value is set, the Dot Rename property is ignored.\",\n+                                \"displayName\": \"Temporary Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"name\": \"Temporary Filename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"textract-type\": {\n+                            \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Expense Analysis\",\n-                                        \"value\": \"Expense Analysis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Document Analysis\",\n-                                        \"value\": \"Document Analysis\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Document Text Detection\",\n-                                        \"value\": \"Document Text Detection\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Document Analysis\",\n-                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n-                                \"displayName\": \"Textract Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n+                                \"displayName\": \"Use Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"textract-type\",\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\"\n+                            \"org.apache.nifi.processors.standard.GetSFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Textract\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"sftp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\",\n-                        \"typeDescription\": \"Trigger a AWS Textract job. It should be followed by GetAwsTextractJobStatus processor in order to monitor job status.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTextractJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            },\n-                            {\n-                                \"description\": \"The selected Textract type, which can be used in GetAwsTextractJobStatus\",\n-                                \"name\": \"awsTextractType\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81170,379 +79445,236 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of FlowFiles to put to the database in a single transaction\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"JDBC Connection Pool\": {\n+                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n+                                \"displayName\": \"JDBC Connection Pool\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JDBC Connection Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Obtain Generated Keys\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, any key that is automatically generated by the database will be added to the FlowFile that generated it using the sql.generate.key attribute. This may result in slightly slower performance and is not supported by all databases.\",\n+                                \"displayName\": \"Obtain Generated Keys\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"name\": \"Obtain Generated Keys\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Support Fragmented Transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, when a FlowFile is consumed by this Processor, the Processor will first check the fragment.identifier and fragment.count attributes of that FlowFile. If the fragment.count value is greater than 1, the Processor will not process any FlowFile with that fragment.identifier until all are available; at that point, it will process all FlowFiles with that fragment.identifier as a single transaction, in the order specified by the FlowFiles' fragment.index attributes. This Provides atomicity of those SQL statements. Once any statement of this transaction throws exception when executing, this transaction will be rolled back. When transaction rollback happened, none of these FlowFiles would be routed to 'success'. If the <Rollback On Failure> is set true, these FlowFiles will stay in the input relationship. When the <Rollback On Failure> is set false,, if any of these FlowFiles will be routed to 'retry', all of these FlowFiles will be routed to 'retry'.Otherwise, they will be routed to 'failure'. If this value is false, these attributes will be ignored and the updates will occur independent of one another.\",\n+                                \"displayName\": \"Support Fragmented Transactions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n+                                \"name\": \"Support Fragmented Transactions\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Transaction Timeout\": {\n+                                \"description\": \"If the <Support Fragmented Transactions> property is set to true, specifies how long to wait for all FlowFiles for a particular fragment.identifier attribute to arrive before just transferring all of the FlowFiles with that identifier to the 'failure' relationship\",\n+                                \"displayName\": \"Transaction Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Transaction Timeout\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n+                            \"database-session-autocommit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively), if set to true the driver/database handles the commit/rollback.\",\n+                                \"displayName\": \"Database Session AutoCommit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"database-session-autocommit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"putsql-sql-statement\": {\n+                                \"description\": \"The SQL statement to execute. The statement can be empty, a constant value, or built from attributes using Expression Language. If this property is specified, it will be used regardless of the content of incoming FlowFiles. If this property is empty, the content of the incoming FlowFile is expected to contain a valid SQL statement, to be issued by the processor to the database.\",\n+                                \"displayName\": \"SQL Statement\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n-                                \"required\": true,\n+                                \"name\": \"putsql-sql-statement\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"rollback-on-failure\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n+                                \"displayName\": \"Rollback On Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"rollback-on-failure\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n+                                \"name\": \"sql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\"\n+                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n-                                \"name\": \"throttled\"\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n+                                \"name\": \"retry\"\n                             },\n                             {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Transcribe\"\n+                            \"database\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"rdbms\",\n+                            \"relational\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Transcribe job.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSQL\",\n+                        \"typeDescription\": \"Executes a SQL UPDATE or INSERT command. The content of an incoming FlowFile is expected to be the SQL command to execute. The SQL command may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\n+                                \"description\": \"If the database generated a key for an INSERT statement and the Obtain Generated Keys property is set to true, this attribute will be added to indicate the generated key, if possible. This feature is not supported by all database vendors.\",\n+                                \"name\": \"sql.generated.key\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81551,354 +79683,240 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"25\",\n+                                \"description\": \"The number of incoming FlowFiles to process in a single execution of this processor.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the Syslog messages. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The IP address or hostname of the Syslog server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"5 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Body\": {\n+                                \"description\": \"The body for the Syslog messages.\",\n+                                \"displayName\": \"Message Body\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Body\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The hostname for the Syslog messages.\",\n+                                \"displayName\": \"Message Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Priority\": {\n+                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n+                                \"displayName\": \"Message Priority\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Priority\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Timestamp\": {\n+                                \"defaultValue\": \"${now():format('MMM d HH:mm:ss')}\",\n+                                \"description\": \"The timestamp for the Syslog messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", \\\" or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\".\",\n+                                \"displayName\": \"Message Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Timestamp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Version\": {\n+                                \"description\": \"The version for the Syslog messages.\",\n+                                \"displayName\": \"Message Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Port\": {\n+                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be sent over a secure connection.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"json-payload\": {\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the syslog server. Does not apply to UDP. Note that Expression language is not evaluated per FlowFile.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\"\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"FlowFiles that failed to send to Syslog are sent out this relationship.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that do not form a valid Syslog message are sent out this relationship.\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Transcribe\"\n+                            \"logs\",\n+                            \"put\",\n+                            \"syslog\",\n+                            \"tcp\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\",\n-                        \"typeDescription\": \"Trigger a AWS Transcribe job. It should be followed by GetAwsTranscribeStatus processor in order to monitor job status.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.PutSyslog\",\n+                        \"typeDescription\": \"Sends Syslog messages to a given host and port over TCP or UDP. Messages are constructed from the \\\"Message ___\\\" properties of the processor which can use expression language to generate messages from incoming FlowFiles. The properties are used to construct messages of the form: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional.  The constructed messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If a message is constructed that does not form a valid Syslog message according to the above description, then it is routed to the invalid relationship. Valid messages are sent to the Syslog server and successes are routed to the success relationship, failures routed to the failure relationship.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranscribeJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81907,379 +79925,270 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Per FlowFile\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to send each FlowFile's content on an individual connection.\",\n+                                \"displayName\": \"Connection Per FlowFile\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Connection Per FlowFile\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Outgoing Message Delimiter\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the delimiter to use when sending messages out over the same TCP stream. The delimiter is appended to each FlowFile message that is transmitted over the stream so that the receiver can determine when one message ends and the next message begins. Users should ensure that the FlowFile content does not contain the delimiter character to avoid errors. In order to use a new line character you can enter '\\\\n'. For a tab character use '\\\\t'. Finally for a carriage return use '\\\\r'.\",\n+                                \"displayName\": \"Outgoing Message Delimiter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Outgoing Message Delimiter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n+                            \"Record Reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for reading Records from input FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Record Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"description\": \"Specifies the Controller Service to use for writing Records to the configured socket address\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n                             \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n+                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Transmission Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Send FlowFile content as a single stream\",\n+                                        \"displayName\": \"FlowFile-oriented\",\n+                                        \"value\": \"FLOWFILE_ORIENTED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Read Records from input FlowFiles and send serialized Records as individual messages\",\n+                                        \"displayName\": \"Record-oriented\",\n+                                        \"value\": \"RECORD_ORIENTED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n+                                \"description\": \"Specifies the strategy used for reading input FlowFiles and transmitting messages to the destination socket address\",\n+                                \"displayName\": \"Transmission Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Transmission Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\"\n+                            \"org.apache.nifi.processors.standard.ListenTCP\",\n+                            \"org.apache.nifi.processors.standard.PutUDP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n-                                \"name\": \"throttled\"\n-                            },\n-                            {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Translate\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Translate job.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutTCP\",\n+                        \"typeDescription\": \"Sends serialized FlowFiles or Records over TCP to a configurable destination with optional support for TLS\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\n+                                \"description\": \"Count of records transmitted to configured destination address\",\n+                                \"name\": \"record.count.transmitted\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -82288,2280 +80197,2334 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Idle Connection Expiration\": {\n+                                \"defaultValue\": \"15 seconds\",\n+                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n+                                \"displayName\": \"Idle Connection Expiration\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"name\": \"Idle Connection Expiration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                            \"Max Size of Socket Send Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n+                                \"displayName\": \"Max Size of Socket Send Buffer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"json-payload\": {\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\"\n+                            \"org.apache.nifi.processors.standard.ListenUDP\",\n+                            \"org.apache.nifi.processors.standard.PutTCP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Translate\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\",\n-                        \"typeDescription\": \"Trigger a AWS Translate job. It should be followed by GetAwsTranslateJobStatus processor in order to monitor job status.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutUDP\",\n+                        \"typeDescription\": \"The PutUDP processor receives a FlowFile and packages the FlowFile content into a single UDP datagram packet which is then transmitted to the configured UDP server. The user must ensure that the FlowFile content being fed to this processor is not larger than the maximum size for the underlying UDP transport. The maximum transport size will vary based on the platform setup but is generally just under 64KB. FlowFiles will be marked as failed if their content is larger than the maximum transport size.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranslateJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Fetch Size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"FullControl User List\": {\n-                                \"defaultValue\": \"${s3.permissions.full.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n-                                \"displayName\": \"FullControl User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"FullControl User List\",\n-                                \"required\": false,\n+                                \"name\": \"Fetch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"defaultValue\": \"${s3.owner}\",\n-                                \"description\": \"The Amazon ID to use for the object's owner\",\n-                                \"displayName\": \"Owner\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n+                                \"name\": \"Maximum-value Columns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Read ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n-                                \"displayName\": \"Read ACL User List\",\n+                            \"Set Auto Commit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read ACL User List\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Set Auto Commit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Read Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.read.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n-                                \"displayName\": \"Read Permission User List\",\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read Permission User List\",\n-                                \"required\": false,\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"db-fetch-db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"db-fetch-sql-query\": {\n+                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n+                                \"displayName\": \"Custom Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"db-fetch-sql-query\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Signer Override\": {\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to change non-Avro-compatible characters in column names to Avro-compatible characters. For example, colons and periods will be changed to underscores in order to build a valid Avro record.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbf-normalize\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-user-logical-types\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n-                                \"required\": false,\n+                                \"name\": \"dbf-user-logical-types\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Version\": {\n-                                \"description\": \"The Version of the Object to delete\",\n-                                \"displayName\": \"Version\",\n+                            \"initial-load-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n+                                        \"displayName\": \"Start at Current Maximum Values\",\n+                                        \"value\": \"Start at Current Maximum Values\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Start at Beginning\",\n+                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n+                                \"displayName\": \"Initial Load Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"initial-load-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n-                                \"displayName\": \"Write ACL User List\",\n+                            \"qdbt-max-frags\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n+                                \"displayName\": \"Maximum Number of Fragments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write ACL User List\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-max-frags\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.write.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n-                                \"displayName\": \"Write Permission User List\",\n+                            \"qdbt-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write Permission User List\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-max-rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n+                            \"qdbt-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"name\": \"qdbt-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n+                            \"transaction-isolation-level\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_NONE\",\n+                                        \"value\": \"0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_READ_COMMITTED\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_READ_UNCOMMITTED\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_REPEATABLE_READ\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRANSACTION_SERIALIZABLE\",\n+                                        \"value\": \"8\"\n                                     }\n                                 ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"description\": \"This setting will set the transaction isolation level for the database connection for drivers that support this setting\",\n+                                \"displayName\": \"Transaction Isolation Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"transaction-isolation-level\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"Delete\",\n-                            \"S3\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                        \"typeDescription\": \"Deletes a file from an Amazon S3 Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTable\",\n+                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to Avro format. Expression Language is supported for several properties, but no incoming connections are permitted. The Environment/System properties may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"maxvalue.*\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"initial.maxvalue.<max_value_column>\",\n+                                \"value\": \"Initial maximum value for the specified column\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [\n                             {\n                                 \"configurations\": [\n                                     {\n-                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchS3Object.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog;\\nset the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; and\\nset the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included.\\nIn order to perform an incremental load of all tables, leave the Catalog, Schema Pattern, and Table Name Pattern unset.\\n\\nLeave the RecordWriter property unset.\\n\\nConnect the 'success' relationship to QueryDatabaseTableRecord.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to \\\"${db.table.fullname}\\\"\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\"\n                                     }\n                                 ],\n-                                \"description\": \"Retrieve all files in an S3 bucket\",\n+                                \"description\": \"Perform an incremental load of multiple database tables, fetching only new rows as they are added to the tables.\",\n                                 \"keywords\": [\n-                                    \"s3\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n+                                    \"incremental load\",\n+                                    \"rdbms\",\n+                                    \"jdbc\",\n+                                    \"cdc\",\n+                                    \"database\",\n+                                    \"table\",\n                                     \"stream\"\n                                 ],\n                                 \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to RouteOnAttribute.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"If you would like to \\\"OR\\\" together all of the conditions (i.e., the file should be retrieved if any of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if any matches\\\".\\nIf you would like to \\\"AND\\\" together all of the conditions (i.e., the file should only be retrieved if all of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if all match\\\".\\n\\nFor each condition that you would like to filter on, add a new property. The name of the property should describe the condition. The value of the property should be an Expression Language expression that returns `true` if the file meets the condition or `false` if the file does not meet the condition.\\n\\nSome attributes that you may consider filtering on are:\\n- `filename` (the name of the file)\\n- `s3.length` (the number of bytes in the file)\\n- `s3.tag.<tag name>` (the value of the s3 tag with the name `tag name`)\\n- `s3.user.metadata.<key name>` (the value of the user metadata with the key named `key name`)\\n\\nFor example, to fetch only files that are at least 1 MB and have a filename ending in `.zip` we would set the following properties:\\n- \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n- \\\"At least 1 MB\\\" = \\\"${s3.length:ge(1000000)}\\\"\\n- \\\"Ends in .zip\\\" = \\\"${filename:endsWith('.zip')}\\\"\\n\\nAuto-terminate the `unmatched` Relationship.\\nConnect the `matched` Relationship to the FetchS3Object processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve only files from S3 that meet some specified criteria\",\n-                                \"keywords\": [\n-                                    \"s3\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"filter\",\n-                                    \"select\",\n-                                    \"fetch\",\n-                                    \"criteria\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Queue URL\\\" must be set to the appropriate URL for the SQS queue. It is recommended that this property be parameterized, using a value such as `#{SQS_QUEUE_URL}`.\\nThe \\\"Region\\\" property must be set to denote the SQS region that the queue resides in. It's a good idea to parameterize this property by setting it to something like `#{SQS_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' relationship is connected to EvaluateJsonPath.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.sqs.GetSQS\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Destination\\\" = \\\"flowfile-attribute\\\"\\n\\\"s3.bucket\\\" = \\\"$.Records[0].s3.bucket.name\\\"\\n\\\"filename\\\" = \\\"$.Records[0].s3.object.key\\\"\\n\\nThe 'success' relationship is connected to FetchS3Object.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the GetSQS Processor.\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve new files as they arrive in an S3 bucket\",\n-                                \"keywords\": [],\n-                                \"notes\": \"This method of retrieving files from S3 is more efficient than using ListS3 and more cost effective. It is the pattern recommended by AWS. However, it does require that the S3 bucket be configured to place notifications on an SQS queue when new files arrive. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html\"\n                             }\n                         ],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Columns to Return\": {\n+                                \"description\": \"A comma-separated list of column names to be used in the query. If your database requires special treatment of the names (quoting, e.g.), each name should include such treatment. If no column names are supplied, all columns in the specified table will be returned. NOTE: It is important to use consistent column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Columns to Return\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Connection Pooling Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Fetch Size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of result rows to be fetched from the result set at a time. This is a hint to the database driver and may not be honored and/or exact. If the value specified is zero, then the hint is ignored. If using PostgreSQL, then 'Set Auto Commit' must be equal to 'false' to cause 'Fetch Size' to take effect.\",\n+                                \"displayName\": \"Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Fetch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL select query , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Maximum-value Columns\": {\n+                                \"description\": \"A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly.\",\n+                                \"displayName\": \"Maximum-value Columns\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Maximum-value Columns\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Set Auto Commit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"description\": \"Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the 'Fetch Size' setting to take effect. When auto commit is enabled, PostgreSQL driver ignores 'Fetch Size' setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html.\",\n+                                \"displayName\": \"Set Auto Commit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"name\": \"Set Auto Commit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"db-fetch-db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Signer Override\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n+                            \"db-fetch-sql-query\": {\n+                                \"description\": \"A custom SQL query used to retrieve data. Instead of building a SQL query from other properties, this query will be wrapped as a sub-query. Query must have no ORDER BY statement.\",\n+                                \"displayName\": \"Custom Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"db-fetch-sql-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Version\": {\n-                                \"description\": \"The Version of the Object to download\",\n-                                \"displayName\": \"Version\",\n+                            \"db-fetch-where-clause\": {\n+                                \"description\": \"A custom clause to be added in the WHERE condition when building SQL queries.\",\n+                                \"displayName\": \"Additional WHERE clause\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Version\",\n+                                \"name\": \"db-fetch-where-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"encryption-service\": {\n-                                \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n-                                \"displayName\": \"Encryption Service\",\n+                            \"dbf-user-logical-types\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to use Avro Logical Types for DECIMAL/NUMBER, DATE, TIME and TIMESTAMP columns. If disabled, written as string. If enabled, Logical types are used and written as its underlying type, specifically, DECIMAL/NUMBER as logical 'decimal': written as bytes with additional precision and scale meta data, DATE as logical 'date-millis': written as int denoting days since Unix epoch (1970-01-01), TIME as logical 'time-millis': written as int denoting milliseconds since Unix epoch, and TIMESTAMP as logical 'timestamp-millis': written as long denoting milliseconds since Unix epoch. If a reader of written Avro records also knows these logical types, then these values can be deserialized with more context depending on reader implementation.\",\n+                                \"displayName\": \"Use Avro Logical Types\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"dbf-user-logical-types\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"initial-load-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n+                                        \"displayName\": \"Start at Current Maximum Values\",\n+                                        \"value\": \"Start at Current Maximum Values\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Start at Beginning\",\n+                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n+                                \"displayName\": \"Initial Load Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"initial-load-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"range-length\": {\n-                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n-                                \"displayName\": \"Range Length\",\n+                            \"qdbt-max-frags\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of fragments. If the value specified is zero, then all fragments are returned. This prevents OutOfMemoryError when this processor ingests huge table. NOTE: Setting this property can result in data loss, as the incoming results are not ordered, and fragments may end at arbitrary boundaries where rows are not included in the result set.\",\n+                                \"displayName\": \"Maximum Number of Fragments\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-max-frags\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n-                                \"displayName\": \"Range Start\",\n+                            \"qdbt-max-rows\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The maximum number of result rows that will be included in a single FlowFile. This will allow you to break up very large result sets into multiple FlowFiles. If the value specified is zero, then all rows are returned in a single FlowFile.\",\n+                                \"displayName\": \"Max Rows Per Flow File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-max-rows\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"requester-pays\": {\n+                            \"qdbt-output-batch-size\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n+                                \"displayName\": \"Output Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"qdbtr-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.\",\n-                                        \"displayName\": \"True\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Does not consent to pay requester charges for retrieving objects from the S3 bucket.\",\n-                                        \"displayName\": \"False\",\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.\",\n-                                \"displayName\": \"Requester Pays\",\n+                                \"description\": \"Whether to change characters in column names when creating the output schema. For example, colons and periods will be changed to underscores.\",\n+                                \"displayName\": \"Normalize Table/Column Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"requester-pays\",\n+                                \"name\": \"qdbtr-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"qdbtr-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer may use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"qdbtr-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n+                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a query on the specified table, the maximum values for the specified column(s) will be retained for use in future executions of the query. This allows the Processor to fetch only those records that have max values greater than the retained values. This can be used for incremental fetching, fetching of newly added rows, etc. To clear the maximum values, clear the state of the processor per the State Management documentation\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Fetch\",\n-                            \"Get\",\n-                            \"S3\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"record\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                        \"typeDescription\": \"Retrieves the contents of an S3 Object and writes it to the content of a FlowFile\",\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\",\n+                        \"typeDescription\": \"Generates a SQL select query, or uses a provided statement, and executes it to fetch all rows whose values in the specified Maximum Value column(s) are larger than the previously-seen maxima. Query result will be converted to the format specified by the record writer. Expression Language is supported for several properties, but no incoming connections are permitted. The Environment/System properties may be used to provide values for any property containing Expression Language. If it is desired to leverage flow file attributes to perform these queries, the GenerateTableFetch and/or ExecuteSQL processors can be used for this purpose. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer or cron expression, using the standard scheduling methods. This processor is intended to be run on the Primary Node only. FlowFile attribute 'querydbtable.row.count' indicates how many rows were selected.\",\n                         \"useCases\": [\n                             {\n-                                \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that contains the file. Typically this is defined as an attribute on an incoming FlowFile, so this property is set to `${s3.bucket}`.\\nThe \\\"Object Key\\\" property denotes the fully qualified filename of the file to fetch. Typically, the FlowFile's `filename` attribute is used, so this property is set to `${filename}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{S3_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the file.\\n\",\n-                                \"description\": \"Fetch a specific file from S3\",\n-                                \"keywords\": [],\n+                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Beginning\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n+                                \"description\": \"Retrieve all rows from a database table.\",\n+                                \"keywords\": [\n+                                    \"jdbc\",\n+                                    \"rdbms\",\n+                                    \"cdc\",\n+                                    \"database\",\n+                                    \"table\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n+                                \"description\": \"Perform an incremental load of a single database table, fetching only new rows as they are added to the table.\",\n+                                \"keywords\": [\n+                                    \"incremental load\",\n+                                    \"rdbms\",\n+                                    \"jdbc\",\n+                                    \"cdc\",\n+                                    \"database\",\n+                                    \"table\",\n+                                    \"stream\"\n+                                ],\n                                 \"notes\": \"\"\n                             }\n                         ],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The URL that can be used to access the S3 object\",\n-                                \"name\": \"s3.url\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the S3 bucket\",\n-                                \"name\": \"s3.bucket\"\n+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"The path of the file\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n-                                \"description\": \"The path of the file\",\n-                                \"name\": \"absolute.path\"\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The MD5 sum of the file\",\n-                                \"name\": \"hash.value\"\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"MD5\",\n-                                \"name\": \"hash.algorithm\"\n+                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"maxvalue.*\"\n                             },\n                             {\n-                                \"description\": \"If S3 provides the content type/MIME type, this attribute will hold that file\",\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The ETag that can be used to see if the file has changed\",\n-                                \"name\": \"s3.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\n-                            },\n-                            {\n-                                \"description\": \"If the file has an expiration date, this attribute will be set, containing the milliseconds since epoch in UTC time\",\n-                                \"name\": \"s3.expirationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The ID of the rule that dictates this object's expiration time\",\n-                                \"name\": \"s3.expirationTimeRuleId\"\n-                            },\n-                            {\n-                                \"description\": \"The server side encryption algorithm of the object\",\n-                                \"name\": \"s3.sseAlgorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The version of the S3 object\",\n-                                \"name\": \"s3.version\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the encryption strategy that was used to store the S3 object (if it is encrypted)\",\n-                                \"name\": \"s3.encryptionStrategy\"\n+                                \"description\": \"The number of records output by the Record Writer.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Each user-defined property specifies a SQL SELECT statement to run over the data, with the data that is selected being routed to the relationship whose name is the property name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the relationship to route data to\",\n+                                \"value\": \"A SQL SELECT statement that is used to determine what data should be routed to this relationship.\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"Each user-defined property defines a new Relationship for this Processor.\",\n+                            \"name\": \"<Property Name>\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"cache-schema\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"This property is no longer used. It remains solely for backward compatibility in order to avoid making existing Processors invalid upon upgrade. This property will be removed in future versions. Now, instead of forcing the user to understand the semantics of schema caching, the Processor caches up to 25 schemas and automatically rolls off the old schemas. This provides the same performance when caching was enabled previously and in some cases very significant performance improvements if caching was previously disabled.\",\n+                                \"displayName\": \"Cache Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"cache-schema\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Bucket\": {\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'precision' denoting number of available digits is required. Generally, precision is defined by column data type definition or database engines default. However undefined precision (0) can be returned from some database engines. 'Default Decimal Precision' is used when writing those undefined precision numbers.\",\n+                                \"displayName\": \"Default Decimal Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When a DECIMAL/NUMBER value is written as a 'decimal' Avro logical type, a specific 'scale' denoting number of available decimal digits is required. Generally, scale is defined by column data type definition or database engines default. However when undefined precision (0) is returned, scale can also be uncertain with some database engines. 'Default Decimal Scale' is used when writing those undefined numbers. If a value has more decimals than specified scale, then the value will be rounded-up, e.g. 1.53 becomes 2 with scale 0, and 1.5 with scale 1.\",\n+                                \"displayName\": \"Default Decimal Scale\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Listing Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"If not using a Record Writer, this property dictates how many S3 objects should be listed in a single batch. Once this number is reached, the FlowFiles that have been created will be transferred out of the Processor. Setting this value lower may result in lower latency by sending out the FlowFiles before the complete listing has finished. However, it can significantly reduce performance. Larger values may take more memory to store all of the information before sending the FlowFiles out. This property is ignored if using a Record Writer, as one of the main benefits of the Record Writer is being able to emit the entire listing as a single FlowFile.\",\n-                                \"displayName\": \"Listing Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Listing Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"include-zero-record-flowfiles\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When running the SQL statement against an incoming FlowFile, if the result has no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Signer Override\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-signer-class-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the SQL statement contains columns not present in input data), the original FlowFile it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is routed to this relationship\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"aggregate\",\n+                            \"avro\",\n+                            \"calcite\",\n+                            \"csv\",\n+                            \"etl\",\n+                            \"filter\",\n+                            \"json\",\n+                            \"logs\",\n+                            \"modify\",\n+                            \"query\",\n+                            \"record\",\n+                            \"route\",\n+                            \"select\",\n+                            \"sql\",\n+                            \"text\",\n+                            \"transform\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.QueryRecord\",\n+                        \"typeDescription\": \"Evaluates one or more SQL queries against the contents of a FlowFile. The result of the SQL query then becomes the content of the output FlowFile. This can be used, for example, for field-specific filtering, transformation, and row-level filtering. Columns can be renamed, simple calculations and aggregations performed, etc. The Processor is configured with a Record Reader Controller Service and a Record Writer service so as to allow flexibility in incoming and outgoing data formats. The Processor must be configured with at least one user-defined property. The name of the Property is the Relationship to route data to, and the value of the Property is a SQL SELECT statement that is used to specify how input data should be transformed/filtered. The SQL statement must be valid ANSI SQL and is powered by Apache Calcite. If the transformation fails, the original FlowFile is routed to the 'failure' relationship. Otherwise, the data selected will be routed to the associated relationship. If the Record Writer chooses to inherit the schema from the Record, it is important to note that the schema that is inherited will be from the ResultSet, rather than the input Record. This allows a single instance of the QueryRecord processor to have multiple queries, each of which returns a different set of columns and aggregations. As a result, though, the schema that is derived will have no schema name, so it is important that the configured Record Writer not attempt to write the Schema Name as an attribute if inheriting the Schema from the Record. See the Processor Usage documentation for more information.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep. I.e., it is the exact opposite of what we want to remove.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to remove records where either the name is George OR the age is less than 18, we would add a   property named \\\"adults not george\\\" with a value that selects records where the name is not George AND the age is greater than or equal to 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"name\\\" <> 'George' AND \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults not george\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n+                                \"description\": \"Filter out records based on the values of the records' fields\",\n+                                \"keywords\": [\n+                                    \"filter out\",\n+                                    \"remove\",\n+                                    \"drop\",\n+                                    \"strip out\",\n+                                    \"record field\",\n+                                    \"sql\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only records where the person is an adult (aged 18 or older), add a property named \\\"adults\\\"   with a value that is a SQL statement that selects records where the age is at least 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n+                                \"description\": \"Keep only specific records\",\n+                                \"keywords\": [\n+                                    \"keep\",\n+                                    \"filter\",\n+                                    \"retain\",\n+                                    \"select\",\n+                                    \"include\",\n+                                    \"record\",\n+                                    \"sql\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep, such as `relevant fields`.\\nIts value is a SQL statement that selects the desired columns from a table named `FLOW_FILE` for relevant rows.\\nThere is no WHERE clause.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only the `name`, `age`, and `address` fields, add a property named `relevant fields`   with a value of `SELECT \\\"name\\\", \\\"age\\\", \\\"address\\\" FROM FLOWFILE`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the `relevant fields` Relationship should be connected to the next Processor in our flow.\\n\",\n+                                \"description\": \"Keep only specific fields in a a Record, where the names of the fields to keep are known\",\n+                                \"keywords\": [\n+                                    \"keep\",\n+                                    \"filter\",\n+                                    \"retain\",\n+                                    \"select\",\n+                                    \"include\",\n+                                    \"record\",\n+                                    \"fields\",\n+                                    \"sql\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nFor each route that you want to create, add a new property.\\nThe name of the property should be a short description of the data that should be selected for the route.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE`. The WHERE clause selects the data that should be included in the route.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\n\\nA new outbound relationship is created for each property that is added. The name of the relationship is the same as the property name.\\n\\nFor example, to route data based on whether or not it is a large transaction, we would add two properties:\\n`small transaction` would have a value such as `SELECT * FROM FLOWFILE WHERE transactionTotal < 100`\\n`large transaction` would have a value of `SELECT * FROM FLOWFILE WHERE transactionTotal >= 100`\\n\",\n+                                \"description\": \"Route record-oriented data for processing based on its contents\",\n+                                \"keywords\": [\n+                                    \"record\",\n+                                    \"route\",\n+                                    \"conditional processing\",\n+                                    \"field\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records selected by the query\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"The relation to which the FlowFile was routed\",\n+                                \"name\": \"QueryRecord.Route\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Any field that matches the RecordPath set as the value will be removed.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A description of the field to remove\",\n+                                \"value\": \"A RecordPath to the field to be removed.\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Record Reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"delimiter\": {\n-                                \"description\": \"The string used to delimit directories within the bucket. Please consult the AWS documentation for the correct use of this field.\",\n-                                \"displayName\": \"Delimiter\",\n+                            \"Record Writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delimiter\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"Record Writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"et-initial-listing-target\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n+                            {\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"csv\",\n+                            \"delete\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"record\",\n+                            \"remove\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RemoveRecordField\",\n+                        \"typeDescription\": \"Modifies the contents of a FlowFile that contains Record-oriented data (i.e. data that can be read via a RecordReader and written by a RecordWriter) by removing selected fields. This Processor requires that at least one user-defined Property be added. The name of the property is ignored by the processor, but could be a meaningful identifier for the user. The value of the property should indicate a RecordPath that determines the field to be removed. The processor executes the removal in the order in which these properties are added to the processor. Set the \\\"Record Writer\\\" to \\\"Inherit Record Schema\\\" in order to use the updated Record Schema modified when removing Fields.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Configure the Record Reader according to the incoming data format.\\nConfigure the Record Writer according to the desired output format.\\n\\nFor each field that you want to remove, add a single new property to the Processor.\\nThe name of the property can be anything but it's recommended to use a brief description of the field.\\nThe value of the property is a RecordPath that matches the field to remove.\\n\\nFor example, to remove the `name` and `email` fields, add two Properties:\\n`name` = `/name`\\n`email` = `/email`\\n\",\n+                                \"description\": \"Remove one or more fields from a Record, where the names of the fields to remove are known.\",\n+                                \"keywords\": [\n+                                    \"record\",\n+                                    \"field\",\n+                                    \"drop\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"expunge\",\n+                                    \"recordpath\"\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Allows users to specify a new name for each field that matches the RecordPath.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A RecordPath that identifies which field(s) to update\",\n+                                \"value\": \"The new name to assign to the Record field\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Record Reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"Record Writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.RemoveRecordField\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Entity Tracking State Cache\",\n-                                        \"propertyName\": \"et-state-cache\"\n-                                    }\n+                            {\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"csv\",\n+                            \"field\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"record\",\n+                            \"rename\",\n+                            \"schema\",\n+                            \"update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RenameRecordField\",\n+                        \"typeDescription\": \"Renames one or more fields in each Record of a FlowFile. This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is the new name to assign to the Record Field that matches the RecordPath. The property value may use Expression Language to reference FlowFile attributes as well as the variables `field.name`, `field.value`, `field.type`, and `record.index`\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is the new name of the property.\\n\\nFor example, to rename the `name` field to `full_name`, add a property with a name of `/name` and a value of `full_name`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n+                                \"description\": \"Rename a field in each Record to a specific, known name.\",\n+                                \"keywords\": [\n+                                    \"rename\",\n+                                    \"field\",\n+                                    \"static\",\n+                                    \"specific\",\n+                                    \"name\"\n                                 ],\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that can be used to determine the new name of the field.\\n\\nFor example, to rename the `addr` field to whatever value is stored in the `preferred_address_name` attribute, add a property with a name of `/name` and a value of `${preferred_address_name}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n+                                \"description\": \"Rename a field in each Record to a name that is derived from a FlowFile attribute.\",\n+                                \"keywords\": [\n+                                    \"rename\",\n+                                    \"field\",\n+                                    \"expression language\",\n+                                    \"EL\",\n+                                    \"flowfile\",\n+                                    \"attribute\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that references the `field.name` property.\\n\\nFor example, to rename all fields with a prefix of `pre_`, we add a property named `/*` and a value of `pre_${field.name}`. If we would like this to happen recursively, to nested fields as well, we use a property name of `//*` with the value of `pre_${field.name}`.\\n\\nTo make all field names uppercase, we can add a property named `//*` with a value of `${field.name:toUpper()}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n+                                \"description\": \"Rename a field in each Record to a new name that is derived from the current field name.\",\n+                                \"keywords\": [\n+                                    \"rename\",\n+                                    \"field\",\n+                                    \"expression language\",\n+                                    \"EL\",\n+                                    \"field.name\"\n+                                ],\n+                                \"notes\": \"This might be used, for example, to add a prefix or a suffix to some fields, or to transform the name of the field by making it uppercase.\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n+                                \"name\": \"record.index\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"list-type\": {\n+                            \"Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"List Objects V1\",\n-                                        \"value\": \"1\"\n+                                        \"displayName\": \"Line-by-Line\",\n+                                        \"value\": \"Line-by-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"List Objects V2\",\n-                                        \"value\": \"2\"\n+                                        \"displayName\": \"Entire text\",\n+                                        \"value\": \"Entire text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specifies whether to use the original List Objects or the newer List Objects Version 2 endpoint.\",\n-                                \"displayName\": \"List Type\",\n+                                \"defaultValue\": \"Line-by-Line\",\n+                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) or buffer the entire file into memory (Entire Text) and run against that.\",\n+                                \"displayName\": \"Evaluation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-type\",\n+                                \"name\": \"Evaluation Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Line-by-Line Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"All\",\n+                                        \"value\": \"All\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First-Line\",\n+                                        \"value\": \"First-Line\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists all entities without any tracking. The same entities will be listed each time this processor is scheduled. It is recommended to change the default run schedule value. Any property that relates to the persisting state will be ignored.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Last-Line\",\n+                                        \"value\": \"Last-Line\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Except-First-Line\",\n+                                        \"value\": \"Except-First-Line\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Except-Last-Line\",\n+                                        \"value\": \"Except-Last-Line\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                                \"defaultValue\": \"All\",\n+                                \"description\": \"Run the 'Replacement Strategy' against each line separately (Line-by-Line) for all lines in the FlowFile, First Line (Header) alone, Last Line (Footer) alone, Except the First Line (Header) or Except the Last Line (Footer).\",\n+                                \"displayName\": \"Line-by-Line Evaluation Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Line-by-Line Evaluation Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-age\": {\n-                                \"description\": \"The maximum age that an S3 object can be in order to be considered; any object older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum Object Age\",\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file or per line, depending on the Evaluation Mode) in order to apply the replacement. If 'Entire Text' (in Evaluation Mode) is selected and the FlowFile is larger than this value, the FlowFile will be routed to 'failure'. In 'Line-by-Line' Mode, if a single line is larger than this value, the FlowFile will be routed to 'failure'. A default value of 1 MB is provided, primarily for 'Entire Text' mode. In 'Line-by-Line' Mode, a value such as 8 KB or 16 KB is suggested. This value is ignored if the <Replacement Strategy> property is set to one of: Append, Prepend, Always Replace\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-age\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that an S3 object must be in order to be considered; any object younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum Object Age\",\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"(?s)(^.*$)\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Regex Replace\",\n+                                            \"Literal Replace\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Search Value to search for in the FlowFile content. Only used for 'Literal Replace' and 'Regex Replace' matching strategies\",\n+                                \"displayName\": \"Search Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Regular Expression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Replacement Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Insert the Replacement Value at the beginning of the FlowFile or the beginning of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be prepended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be prepended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be prepended to the entire text.\",\n+                                        \"displayName\": \"Prepend\",\n+                                        \"value\": \"Prepend\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Insert the Replacement Value at the end of the FlowFile or the end of each line (depending on the Evaluation Mode). For \\\"Line-by-Line\\\" Evaluation Mode, the value will be appended to each line. Similarly, for \\\"First-Line\\\", \\\"Last-Line\\\", \\\"Except-Last-Line\\\" and \\\"Except-First-Line\\\" Evaluation Modes,the value will be appended to header alone, footer alone, all lines except header and all lines except footer respectively. For \\\"Entire Text\\\" evaluation mode,the value will be appended to the entire text.\",\n+                                        \"displayName\": \"Append\",\n+                                        \"value\": \"Append\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Prepends text before the start of the FlowFile (or the start of each line, depending on the configuration of the Evaluation Mode property) as well as appending text to the end of the FlowFile (or the end of each line, depending on the configuration of the Evaluation Mode property)\",\n+                                        \"displayName\": \"Surround\",\n+                                        \"value\": \"Surround\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Interpret the Search Value as a Regular Expression and replace all matches with the Replacement Value. The Replacement Value may reference Capturing Groups used in the Search Value by using a dollar-sign followed by the Capturing Group number, such as $1 or $2. If the Search Value is set to .* then everything is replaced without even evaluating the Regular Expression.\",\n+                                        \"displayName\": \"Regex Replace\",\n+                                        \"value\": \"Regex Replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Search for all instances of the Search Value and replace the matches with the Replacement Value.\",\n+                                        \"displayName\": \"Literal Replace\",\n+                                        \"value\": \"Literal Replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Always replaces the entire line or the entire contents of the FlowFile (depending on the value of the <Evaluation Mode> property) and does not bother searching for any value. When this strategy is chosen, the <Search Value> property is ignored.\",\n+                                        \"displayName\": \"Always Replace\",\n+                                        \"value\": \"Always Replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Substitute variable references (specified in ${var} form) using FlowFile attributes for looking up the replacement value by variable name. When this strategy is chosen, both the <Search Value> and <Replacement Value> properties are ignored.\",\n+                                        \"displayName\": \"Substitute Variables\",\n+                                        \"value\": \"Substitute Variables\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Regex Replace\",\n+                                \"description\": \"The strategy for how and what to replace within the FlowFile's text content.\",\n+                                \"displayName\": \"Replacement Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"Replacement Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prefix\": {\n-                                \"description\": \"The prefix used to filter the object list. Do not begin with a forward slash '/'. In most cases, it should end with a forward slash '/'.\",\n-                                \"displayName\": \"Prefix\",\n+                            \"Replacement Value\": {\n+                                \"defaultValue\": \"$1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Prepend\",\n+                                            \"Regex Replace\",\n+                                            \"Always Replace\",\n+                                            \"Append\",\n+                                            \"Literal Replace\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The value to insert using the 'Replacement Strategy'. Using \\\"Regex Replace\\\" back-references to Regular Expression capturing groups are supported, but back-references that reference capturing groups that do not exist in the regular expression will be treated as literal value. Back References may also be referenced using the Expression Language, as '$1', '$2', etc. The single-tick marks MUST be included, as these variables are not \\\"Standard\\\" attribute names (attribute names must be quoted unless they contain only numbers, letters, and _).\",\n+                                \"displayName\": \"Replacement Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prefix\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Replacement Value\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Text to Append\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text to append to the end of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Append\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Text to Append\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Text to Prepend\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text to prepend to the start of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Prepend\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Text to Prepend\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that have been successfully processed are routed to this relationship. This includes both FlowFiles that had text replaced and those that did not.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"Change\",\n+                            \"Modify\",\n+                            \"Regex\",\n+                            \"Regular Expression\",\n+                            \"Replace\",\n+                            \"Text\",\n+                            \"Update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ReplaceText\",\n+                        \"typeDescription\": \"Updates the content of a FlowFile by searching for some textual value in the FlowFile content (via Regular Expression/regex, or literal value) and replacing the section of the content that matches with some alternate value. It can also be used to append or prepend text to the contents of a FlowFile.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Append\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be appended to the line.\\nFor example, to insert the text `<fin>` at the end of every line, we would set \\\"Replacement Value\\\" to `<fin>`.\\nWe can also use Expression Language. So to insert the filename at the end of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n+                                \"description\": \"Append text to the end of every line in a FlowFile\",\n+                                \"keywords\": [\n+                                    \"raw text\",\n+                                    \"append\",\n+                                    \"line\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Prepend\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be prepended to the line.\\nFor example, to insert the text `<start>` at the beginning of every line, we would set \\\"Replacement Value\\\" to `<start>`.\\nWe can also use Expression Language. So to insert the filename at the beginning of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n+                                \"description\": \"Prepend text to the beginning of every line in a FlowFile\",\n+                                \"keywords\": [\n+                                    \"raw text\",\n+                                    \"prepend\",\n+                                    \"line\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Literal Replace\\\"\\n\\\"Search Value\\\" is set to whatever text is in the FlowFile that needs to be replaced.\\n\\\"Replacement Value\\\" is set to the text that should replace the current text.\\n\\nFor example, to replace the word \\\"spider\\\" with \\\"arachnid\\\" we set \\\"Search Value\\\" to `spider` and set \\\"Replacement Value\\\" to `arachnid`.\\n\",\n+                                \"description\": \"Replace every occurrence of a literal string in the FlowFile with a different value\",\n+                                \"keywords\": [\n+                                    \"replace\",\n+                                    \"string\",\n+                                    \"text\",\n+                                    \"literal\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Regex Replace\\\"\\n\\\"Search Value\\\" is set to a regular expression that matches the text that should be transformed in a capturing group.\\n\\\"Replacement Value\\\" is set to a NiFi Expression Language expression that references `$1` (in quotes to escape the reference name).\\n\\nFor example, if we wanted to lowercase any occurrence of WOLF, TIGER, or LION, we would use a \\\"Search Value\\\" of `(WOLF|TIGER|LION)` and a \\\"Replacement Value\\\" of `${'$1':toLower()}`.\\nIf we want to replace any identifier with a hash of that identifier, we might use a \\\"Search Value\\\" of `identifier: (.*)` and a \\\"Replacement Value\\\" of `identifier: ${'$1':hash('sha256')}`\\n\",\n+                                \"description\": \"Transform every occurrence of a literal string in a FlowFile\",\n+                                \"keywords\": [\n+                                    \"replace\",\n+                                    \"transform\",\n+                                    \"raw text\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Entire text\\\"\\n\\\"Replacement Strategy\\\" = \\\"Always Replace\\\"\\n\\n\\\"Replacement Value\\\" is set to the new text that should be written to the FlowFile. This text might include NiFi Expression Language to reference one or more attributes.\\n\",\n+                                \"description\": \"Completely replace the contents of a FlowFile to a specific text\",\n+                                \"keywords\": [\n+                                    \"replace\",\n+                                    \"raw text\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Mapping File\": {\n+                                \"description\": \"The name of the file (including the full path) containing the Mappings.\",\n+                                \"displayName\": \"Mapping File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Mapping File\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"requester-pays\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Indicates that the requester consents to pay any charges associated with listing the S3 bucket.\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Does not consent to pay requester charges for listing the S3 bucket.\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with listing the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.  Note that this setting is not applicable when 'Use Versions' is 'true'.\",\n-                                \"displayName\": \"Requester Pays\",\n+                            \"Mapping File Refresh Interval\": {\n+                                \"defaultValue\": \"60s\",\n+                                \"description\": \"The polling interval to check for updates to the mapping file. The default is 60s.\",\n+                                \"displayName\": \"Mapping File Refresh Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"requester-pays\",\n+                                \"name\": \"Mapping File Refresh Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-versions\": {\n+                            \"Matching Group\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of the matching group of the provided regex to replace with the corresponding value from the mapping file (if it exists).\",\n+                                \"displayName\": \"Matching Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Matching Group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"\\\\S+\",\n+                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n+                                \"displayName\": \"Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Regular Expression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that have been successfully updated are routed to this relationship, as well as FlowFiles whose content does not match the given Regular Expression\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that could not be updated are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Change\",\n+                            \"Mapping\",\n+                            \"Modify\",\n+                            \"Regex\",\n+                            \"Regular Expression\",\n+                            \"Replace\",\n+                            \"Text\",\n+                            \"Update\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ReplaceTextWithMapping\",\n+                        \"typeDescription\": \"Updates the content of a FlowFile by evaluating a Regular Expression against it and replacing the section of the content that matches the Regular Expression with some alternate value provided in a mapping file.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"One or more dynamic properties can be used to add attributes to FlowFiles passed to the 'retries_exceeded' relationship\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Exceeded FlowFile Attribute Key\",\n+                                \"value\": \"The value of the attribute added to the FlowFile\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Fail on Non-numerical Overwrite\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use S3 versions, if applicable.  If false, only the latest version of each object will be returned.\",\n-                                \"displayName\": \"Use Versions\",\n+                                \"description\": \"If the FlowFile already has the attribute defined in 'Retry Attribute' that is *not* a number, fail the FlowFile instead of resetting that value to '1'\",\n+                                \"displayName\": \"Fail on Non-numerical Overwrite\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-versions\",\n+                                \"name\": \"Fail on Non-numerical Overwrite\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"write-s3-object-tags\": {\n+                            \"maximum-retries\": {\n+                                \"defaultValue\": \"3\",\n+                                \"description\": \"The maximum number of times a FlowFile can be retried before being passed to the 'retries_exceeded' relationship\",\n+                                \"displayName\": \"Maximum Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"maximum-retries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"penalize-retries\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n+                                        \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n+                                        \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to 'True', the tags associated with the S3 object will be written as FlowFile attributes\",\n-                                \"displayName\": \"Write Object Tags\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If set to 'true', this Processor will penalize input FlowFiles before passing them to the 'retry' relationship. This does not apply to the 'retries_exceeded' relationship.\",\n+                                \"displayName\": \"Penalize Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"write-s3-object-tags\",\n+                                \"name\": \"penalize-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"write-s3-user-metadata\": {\n+                            \"retry-attribute\": {\n+                                \"defaultValue\": \"flowfile.retries\",\n+                                \"description\": \"The name of the attribute that contains the current retry count for the FlowFile. WARNING: If the name matches an attribute already on the FlowFile that does not contain a numerical value, the processor will either overwrite that attribute with '1' or fail based on configuration.\",\n+                                \"displayName\": \"Retry Attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"retry-attribute\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"reuse-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, fail the FlowFile regardless of current retry count\",\n+                                        \"displayName\": \"Fail on Reuse\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a warning message before resetting the retry attribute and UUID for this instance\",\n+                                        \"displayName\": \"Warn on Reuse\",\n+                                        \"value\": \"warn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a debug message before resetting the retry attribute and UUID for this instance\",\n+                                        \"displayName\": \"Reset Reuse\",\n+                                        \"value\": \"reset\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to 'True', the user defined metadata associated with the S3 object will be added to FlowFile attributes/records\",\n-                                \"displayName\": \"Write User Metadata\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Defines how the Processor behaves if the retry FlowFile has a different retry UUID than the instance that received the FlowFile. This generally means that the attribute was not reset after being successfully retried by a previous instance of this processor.\",\n+                                \"displayName\": \"Reuse Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"write-s3-user-metadata\",\n+                                \"name\": \"reuse-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Will read the attribute or attribute expression language result as defined in 'Retry Attribute'\",\n+                                \"name\": \"Retry Attribute\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Input FlowFile has exceeded the configured maximum retry count, do not pass this relationship back to the input Processor to terminate the limited feedback loop.\",\n+                                \"name\": \"retries_exceeded\"\n+                            },\n+                            {\n+                                \"description\": \"Input FlowFile has not exceeded the configured maximum retry count, pass this relationship back to the input Processor to create a limited feedback loop.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"The processor is configured such that a non-numerical value on 'Retry Attribute' results in a failure instead of resetting that value to '1'. This will immediately terminate the limited feedback loop. Might also include when 'Maximum Retries' contains attribute expression language that does not resolve to an Integer.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"S3\",\n-                            \"list\"\n+                            \"FlowFile\",\n+                            \"Retry\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                        \"typeDescription\": \"Retrieves a listing of objects from an S3 bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchS3Object. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RetryFlowFile\",\n+                        \"typeDescription\": \"FlowFiles passed to this Processor have a 'Retry Attribute' value checked against a configured 'Maximum Retries' value. If the current attribute value is below the configured maximum, the FlowFile is passed to a retry relationship. The FlowFile may or may not be penalized in that condition. If the FlowFile's attribute value exceeds the configured maximum, the FlowFile will be passed to a 'retries_exceeded' relationship. WARNING: If the incoming FlowFile has a non-numeric value in the configured 'Retry Attribute' attribute, it will be reset to '1'. You may choose to fail the FlowFile instead of performing the reset. Additional dynamic properties can be defined for any attributes you wish to add to the FlowFiles transferred to 'retries_exceeded'. These attributes support attribute expression language.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the S3 bucket\",\n-                                \"name\": \"s3.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"The region of the S3 bucket\",\n-                                \"name\": \"s3.region\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n+                                \"name\": \"Retry Attribute\"\n                             },\n                             {\n-                                \"description\": \"The ETag that can be used to see if the file has changed\",\n-                                \"name\": \"s3.etag\"\n-                            },\n+                                \"description\": \"User defined retry attribute with .uuid that determines what processor retried the FlowFile last\",\n+                                \"name\": \"Retry Attribute .uuid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"A boolean indicating if this is the latest version of the object\",\n-                                \"name\": \"s3.isLatest\"\n-                            },\n+                                \"description\": \"Routes FlowFiles whose attributes match the Expression Language specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"Expression Language expression that returns a boolean value indicating whether or not the FlowFile should be routed to this Relationship\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's Attribute Expression Language\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n                             {\n-                                \"description\": \"The last modified time in milliseconds since epoch in UTC time\",\n-                                \"name\": \"s3.lastModified\"\n-                            },\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria to route on. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise. This adds a new attribute to the FlowFile whose name is equal to the property name.\\n\\nConnect the 'success' Relationship to RouteOnAttribute.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Set \\\"Routing Strategy\\\" to \\\"Route to Property name\\\"\\n\\nAdd two additional properties. For the first one, the name of the property should describe data that matches the criteria. The value is an Expression Language expression that checks if the attribute added by the PartitionRecord processor has a value of `true`. For example, `${criteria:equals('true')}`.\\nThe second property should have a name that describes data that does not match the criteria. The value is an Expression Language that evaluates to the opposite of the first property value. For example, `${criteria:equals('true'):not()}`.\\n\\nConnect each of the newly created Relationships to the appropriate downstream processors.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\n+                                    }\n+                                ],\n+                                \"description\": \"Route record-oriented data based on whether or not the record's values meet some criteria\",\n+                                \"keywords\": [\n+                                    \"record\",\n+                                    \"route\",\n+                                    \"content\",\n+                                    \"data\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Routing Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A copy of the FlowFile will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n+                                        \"displayName\": \"Route to Property name\",\n+                                        \"value\": \"Route to Property name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the FlowFile to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if all match\",\n+                                        \"value\": \"Route to 'match' if all match\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the FlowFile to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if any matches\",\n+                                        \"value\": \"Route to 'match' if any matches\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Property name\",\n+                                \"description\": \"Specifies how to determine which relationship to use when evaluating the Expression Language\",\n+                                \"displayName\": \"Routing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Routing Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The size of the object in bytes\",\n-                                \"name\": \"s3.length\"\n-                            },\n+                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n+                                \"name\": \"unmatched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Attribute Expression Language\",\n+                            \"Expression Language\",\n+                            \"Regular Expression\",\n+                            \"attributes\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"routing\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteOnAttribute\",\n+                        \"typeDescription\": \"Routes FlowFiles based on their Attributes using the Attribute Expression Language\",\n+                        \"useCases\": [\n                             {\n-                                \"description\": \"The storage class of the object\",\n-                                \"name\": \"s3.storeClass\"\n+                                \"configuration\": \"Set the \\\"Routing Strategy\\\" property to \\\"Route to Property name\\\".\\nFor each route that a FlowFile might be routed to, add a new property. The name of the property should describe the route.\\nThe value of the property is an Attribute Expression Language expression that returns a boolean value indicating whether or not a given FlowFile will be routed to the associated relationship.\\n\\nFor example, we might route data based on its file extension using the following properties:\\n    - \\\"Routing Strategy\\\" = \\\"Route to Property Name\\\"\\n    - \\\"jpg\\\" = \\\"${filename:endsWith('.jpg')}\\\"\\n    - \\\"png\\\" = \\\"${filename:endsWith('.png')}\\\"\\n    - \\\"pdf\\\" = \\\"${filename:endsWith('.pdf')}\\\"\\n\\nThe Processor will now have 3 relationships: `jpg`, `png`, and `pdf`. Each of these should be connected to the appropriate downstream processor.\\n\",\n+                                \"description\": \"Route data to one or more relationships based on its attributes using the NiFi Expression Language.\",\n+                                \"keywords\": [\n+                                    \"attributes\",\n+                                    \"routing\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"The version of the object, if applicable\",\n-                                \"name\": \"s3.version\"\n+                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to keep the data.\\nIf the data should be kept in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to keep the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nFor example, to keep files whose filename ends with .txt and have a file size of at least 1000 bytes, we will use the following properties:\\n    - \\\"ends_with_txt\\\" = \\\"${filename:endsWith('.txt')}\\\"\\n    - \\\"large_enough\\\" = \\\"${fileSize:ge(1000)}\\n    - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'unmatched' relationship.\\nConnect the 'matched' relationship to the next processor in the flow.\\n\",\n+                                \"description\": \"Keep data only if its attributes meet some criteria, such as its filename ends with .txt.\",\n+                                \"keywords\": [\n+                                    \"keep\",\n+                                    \"filter\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"If 'Write Object Tags' is set to 'True', the tags associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n-                                \"name\": \"s3.tag.___\"\n-                            },\n+                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to drop the data.\\nIf the data should be dropped in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to drop the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nHere are a couple of examples for configuring the properties:\\n    Example 1 Use Case: Data should be dropped if its \\\"uuid\\\" attribute has an 'a' in it or ends with '0'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_0\\\" = \\\"${uuid:endsWith('0')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if any matches\\\"\\n    Example 2 Use Case: Data should be dropped if its 'uuid' attribute has an 'a' AND it ends with a '1'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_1\\\" = \\\"${uuid:endsWith('1')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'matched' relationship.\\nConnect the 'unmatched' relationship to the next processor in the flow.\\n\",\n+                                \"description\": \"Discard or drop a file based on attributes, such as filename.\",\n+                                \"keywords\": [\n+                                    \"discard\",\n+                                    \"drop\",\n+                                    \"filter\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"If 'Write User Metadata' is set to 'True', the user defined metadata associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n-                                \"name\": \"s3.user.metadata.___\"\n+                                \"description\": \"The relation to which the FlowFile was routed\",\n+                                \"name\": \"RouteOnAttribute.Route\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -84571,928 +82534,1211 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Allows user-defined metadata to be added to the S3 object as key/value pairs\",\n+                                \"description\": \"Routes FlowFiles whose content matches the regular expression defined by Dynamic Property's value to the Relationship defined by the Dynamic Property's key\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a User-Defined Metadata field to add to the S3 Object\",\n-                                \"value\": \"The value of a User-Defined Metadata field to add to the S3 Object\"\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"A Regular Expression\"\n                             }\n                         ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's Regular Expression\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache Control\": {\n-                                \"description\": \"Sets the Cache-Control HTTP header indicating the caching directives of the associated object. Multiple directives are comma-separated.\",\n-                                \"displayName\": \"Cache Control\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Control\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Content Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer in order to apply the regular expressions. If the size of the FlowFile exceeds this value, any amount of this value will be ignored\",\n+                                \"displayName\": \"Content Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Content Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Disposition\": {\n+                            \"Match Requirement\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"inline\",\n-                                        \"value\": \"inline\"\n+                                        \"displayName\": \"content must match exactly\",\n+                                        \"value\": \"content must match exactly\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"attachment\",\n-                                        \"value\": \"attachment\"\n-                                    }\n-                                ],\n-                                \"description\": \"Sets the Content-Disposition HTTP header indicating if the content is intended to be displayed inline or should be downloaded.\\n Possible values are 'inline' or 'attachment'. If this property is not specified, object's content-disposition will be set to filename. When 'attachment' is selected, '; filename=' plus object key are automatically appended to form final value 'attachment; filename=\\\"filename.jpg\\\"'.\",\n-                                \"displayName\": \"Content Disposition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Disposition\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Content Type\": {\n-                                \"description\": \"Sets the Content-Type HTTP header indicating the type of content stored in the associated object. The value of this header is a standard MIME type.\\nAWS S3 Java client will attempt to determine the correct content type if one hasn't been set yet. Users are responsible for ensuring a suitable content type is set when uploading streams. If no content type is provided and cannot be determined by the filename, the default content type \\\"application/octet-stream\\\" will be used.\",\n-                                \"displayName\": \"Content Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Content Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Expiration Time Rule\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Expiration Time Rule\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Expiration Time Rule\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Resource Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n+                                        \"displayName\": \"content must contain match\",\n+                                        \"value\": \"content must contain match\"\n                                     }\n                                 ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n+                                \"defaultValue\": \"content must match exactly\",\n+                                \"description\": \"Specifies whether the entire content of the file must match the regular expression exactly, or if any part of the file (up to Content Buffer Size) can contain the regular expression in order to be considered a match\",\n+                                \"displayName\": \"Match Requirement\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n+                                \"name\": \"Match Requirement\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"FullControl User List\": {\n-                                \"defaultValue\": \"${s3.permissions.full.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n-                                \"displayName\": \"FullControl User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"FullControl User List\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"Multipart Part Size\": {\n-                                \"defaultValue\": \"5 GB\",\n-                                \"description\": \"Specifies the part size for use when the PutS3Multipart Upload API is used. Flow files will be broken into chunks of this size for the upload process, but the last part sent can be smaller since it is not padded. The valid range is 50MB to 5GB.\",\n-                                \"displayName\": \"Multipart Part Size\",\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that do not match any of the user-supplied regular expressions will be routed to this relationship\",\n+                                \"name\": \"unmatched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"content\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"regular expression\",\n+                            \"route\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteOnContent\",\n+                        \"typeDescription\": \"Applies Regular Expressions to the content of a FlowFile and routes a copy of the FlowFile to each destination whose Regular Expression matches. Regular Expressions are added as User-Defined Properties where the name of the property is the name of the relationship and the value is a Regular Expression to match against the FlowFile content. User-Defined properties do support the Attribute Expression Language, but the results are interpreted as literal values, not Regular Expressions\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Routes data that matches the value specified in the Dynamic Property Value to the Relationship specified in the Dynamic Property Key.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Relationship Name\",\n+                                \"value\": \"value to match against\"\n+                            }\n+                        ],\n+                        \"dynamicRelationship\": {\n+                            \"description\": \"FlowFiles that match the Dynamic Property's value\",\n+                            \"name\": \"Name from Dynamic Property\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set in which the incoming text is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Multipart Part Size\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Multipart Threshold\": {\n-                                \"defaultValue\": \"5 GB\",\n-                                \"description\": \"Specifies the file size threshold for switch from the PutS3Object API to the PutS3MultipartUpload API.  Flow files bigger than this limit will be sent using the stateful multipart process. The valid range is 50MB to 5GB.\",\n-                                \"displayName\": \"Multipart Threshold\",\n+                            \"Grouping Regular Expression\": {\n+                                \"description\": \"Specifies a Regular Expression to evaluate against each line to determine which Group the line should be placed in. The Regular Expression must have at least one Capturing Group that defines the line's Group. If multiple Capturing Groups exist in the Regular Expression, the values from all Capturing Groups will be concatenated together. Two lines will not be placed into the same FlowFile unless they both have the same value for the Group (or neither line matches the Regular Expression). For example, to group together all lines in a CSV File by the first column, we can set this value to \\\"(.*?),.*\\\". Two lines that have the same Group but different Relationships will never be placed into the same FlowFile.\",\n+                                \"displayName\": \"Grouping Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Multipart Threshold\",\n-                                \"required\": true,\n+                                \"name\": \"Grouping Regular Expression\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Multipart Upload AgeOff Interval\": {\n-                                \"defaultValue\": \"60 min\",\n-                                \"description\": \"Specifies the interval at which existing multipart uploads in AWS S3 will be evaluated for ageoff.  When processor is triggered it will initiate the ageoff evaluation if this interval has been exceeded.\",\n-                                \"displayName\": \"Multipart Upload AgeOff Interval\",\n+                            \"Ignore Case\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, capitalization will not be taken into account when comparing values. E.g., matching against 'HELLO' or 'hello' will have the same result. This property is ignored if the 'Matching Strategy' is set to 'Satisfies Expression'.\",\n+                                \"displayName\": \"Ignore Case\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Multipart Upload AgeOff Interval\",\n+                                \"name\": \"Ignore Case\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Multipart Upload Max Age Threshold\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"Specifies the maximum age for existing multipart uploads in AWS S3.  When the ageoff process occurs, any upload older than this threshold will be aborted.\",\n-                                \"displayName\": \"Multipart Upload Max Age Threshold\",\n+                            \"Ignore Leading/Trailing Whitespace\": {\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not the whitespace at the beginning and end of the lines should be ignored when evaluating the line.\",\n+                                \"displayName\": \"Ignore Leading/Trailing Whitespace\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Multipart Upload Max Age Threshold\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"defaultValue\": \"${s3.owner}\",\n-                                \"description\": \"The Amazon ID to use for the object's owner\",\n-                                \"displayName\": \"Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n-                                \"displayName\": \"Read ACL User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read ACL User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.read.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n-                                \"displayName\": \"Read Permission User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read Permission User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"Matching Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"Match lines based on whether or not the the text satisfies the given Expression Language expression. I.e., the line will match if the property value, evaluated as an Expression, returns true. The expression is able to reference FlowFile Attributes, as well as the variables 'line' (which is the text of the line to evaluate) and 'lineNo' (which is the line number being evaluated. This will be 1 for the first line, 2 for the second and so on).\",\n+                                        \"displayName\": \"Satisfies Expression\",\n+                                        \"value\": \"Satisfies Expression\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"Match lines based on whether the line starts with the property value\",\n+                                        \"displayName\": \"Starts With\",\n+                                        \"value\": \"Starts With\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n+                                        \"description\": \"Match lines based on whether the line ends with the property value\",\n+                                        \"displayName\": \"Ends With\",\n+                                        \"value\": \"Ends With\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Match lines based on whether the line contains the property value\",\n+                                        \"displayName\": \"Contains\",\n+                                        \"value\": \"Contains\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Match lines based on whether the line equals the property value\",\n+                                        \"displayName\": \"Equals\",\n+                                        \"value\": \"Equals\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Match lines based on whether the line exactly matches the Regular Expression that is provided as the Property value\",\n+                                        \"displayName\": \"Matches Regular Expression\",\n+                                        \"value\": \"Matches Regular Expression\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Match lines based on whether the line contains some text that matches the Regular Expression that is provided as the Property value\",\n+                                        \"displayName\": \"Contains Regular Expression\",\n+                                        \"value\": \"Contains Regular Expression\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n+                                \"description\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n+                                \"displayName\": \"Matching Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Matching Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Resource Transfer Source\": {\n+                            \"Routing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"FLOWFILE_CONTENT\"\n+                                        \"description\": \"Lines will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n+                                        \"displayName\": \"Route to each matching Property Name\",\n+                                        \"value\": \"Route to each matching Property Name\"\n                                     },\n                                     {\n-                                        \"description\": \"The File Resource Service provides the source for transfer\",\n-                                        \"displayName\": \"File Resource Service\",\n-                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n+                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the line to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if line matches all conditions\",\n+                                        \"value\": \"Route to 'matched' if line matches all conditions\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Requires that at least one user-defined expression evaluate to 'true' for the line to be considered a match\",\n+                                        \"displayName\": \"Route to 'matched' if lines matches any condition\",\n+                                        \"value\": \"Route to 'matched' if lines matches any condition\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\n+                                \"defaultValue\": \"Route to each matching Property Name\",\n+                                \"description\": \"Specifies how to determine which Relationship(s) to use when evaluating the lines of incoming text against the 'Matching Strategy' and user-defined properties.\",\n+                                \"displayName\": \"Routing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resource Transfer Source\",\n+                                \"name\": \"Routing Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The original input file will be routed to this destination when the lines have been successfully routed to 1 or more relationships\",\n+                                \"name\": \"original\"\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            {\n+                                \"description\": \"Data that does not satisfy the required user-defined rules will be routed to this Relationship\",\n+                                \"name\": \"unmatched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Expression Language\",\n+                            \"Regular Expression\",\n+                            \"attributes\",\n+                            \"csv\",\n+                            \"delimited\",\n+                            \"detect\",\n+                            \"filter\",\n+                            \"find\",\n+                            \"logs\",\n+                            \"regex\",\n+                            \"regexp\",\n+                            \"routing\",\n+                            \"search\",\n+                            \"string\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RouteText\",\n+                        \"typeDescription\": \"Routes textual data based on a set of user-defined rules. Each line in an incoming FlowFile is compared against the values specified by user-defined Properties. The mechanism by which the text is compared to these user-defined properties is defined by the 'Matching Strategy'. The data is then routed according to these rules, routing each line of the text individually.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Matches Regular Expression\\\"\\n\\\"Empty Line\\\" = \\\"^$\\\"\\n\\nAuto-terminate the \\\"Empty Line\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n+                                \"description\": \"Drop blank or empty lines from the FlowFile's content.\",\n+                                \"keywords\": [\n+                                    \"filter\",\n+                                    \"drop\",\n+                                    \"empty\",\n+                                    \"blank\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"strip out\",\n+                                    \"lines\",\n+                                    \"text\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Satisfies Expression\\\"\\n\\nAn additional property should be added named \\\"Filter Out.\\\" The value should be a NiFi Expression Language Expression that can refer to two variables (in addition to FlowFile attributes): `line`, which is the line of text being evaluated; and `lineNo`, which is the line number in the file (starting with 1). The Expression should return `true` for any line that should be dropped.\\n\\nFor example, to remove any line that starts with a # symbol, we can set \\\"Filter Out\\\" to `${line:startsWith(\\\"#\\\")}`.\\nWe could also remove the first 2 lines of text by setting \\\"Filter Out\\\" to `${lineNo:le(2)}`. Note that we use the `le` function because we want lines numbers less than or equal to `2`, since the line index is 1-based.\\n\\nAuto-terminate the \\\"Filter Out\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n+                                \"description\": \"Remove specific lines of text from a file, such as those containing a specific word or having a line length over some threshold.\",\n+                                \"keywords\": [\n+                                    \"filter\",\n+                                    \"drop\",\n+                                    \"empty\",\n+                                    \"blank\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"strip out\",\n+                                    \"lines\",\n+                                    \"text\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n+                                \"name\": \"RouteText.Route\"\n+                            },\n+                            {\n+                                \"description\": \"The value captured by all capturing groups in the 'Grouping Regular Expression' property. If this property is not set or contains no capturing groups, this attribute will not be added.\",\n+                                \"name\": \"RouteText.Group\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Signer Override\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Storage Class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DeepArchive\",\n-                                        \"value\": \"DeepArchive\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Glacier\",\n-                                        \"value\": \"Glacier\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GlacierInstantRetrieval\",\n-                                        \"value\": \"GlacierInstantRetrieval\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IntelligentTiering\",\n-                                        \"value\": \"IntelligentTiering\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OneZoneInfrequentAccess\",\n-                                        \"value\": \"OneZoneInfrequentAccess\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Outposts\",\n-                                        \"value\": \"Outposts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ReducedRedundancy\",\n-                                        \"value\": \"ReducedRedundancy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Snow\",\n-                                        \"value\": \"Snow\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n-                                    },\n+                            \"sample-record-interval\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"StandardInfrequentAccess\",\n-                                        \"value\": \"StandardInfrequentAccess\"\n+                                        \"dependentValues\": [\n+                                            \"interval\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Storage Class\",\n+                                \"description\": \"Specifies the number of records to skip before writing a record to the outgoing FlowFile. This property is only used if Sampling Strategy is set to Interval Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, a value of one (1) will cause all records to be included, and a value of two (2) will cause half the records to be included, and so on.\",\n+                                \"displayName\": \"Sampling Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Storage Class\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n-                                \"displayName\": \"Write ACL User List\",\n+                            \"sample-record-probability\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"probabilistic\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n+                                \"displayName\": \"Sampling Probability\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write ACL User List\",\n-                                \"required\": false,\n+                                \"name\": \"sample-record-probability\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.write.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n-                                \"displayName\": \"Write Permission User List\",\n+                            \"sample-record-random-seed\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"probabilistic\",\n+                                            \"reservoir\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies a particular number to use as the seed for the random number generator (used by probabilistic strategies). Setting this property will ensure the same records are selected even when using probabilistic strategies.\",\n+                                \"displayName\": \"Random Seed\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write Permission User List\",\n+                                \"name\": \"sample-record-random-seed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"canned-acl\": {\n-                                \"defaultValue\": \"${s3.permissions.cannedacl}\",\n-                                \"description\": \"Amazon Canned ACL for an object, one of: BucketOwnerFullControl, BucketOwnerRead, LogDeliveryWrite, AuthenticatedRead, PublicReadWrite, PublicRead, Private; will be ignored if any other ACL/permission/owner property is specified\",\n-                                \"displayName\": \"Canned ACL\",\n+                            \"sample-record-range\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"range\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the range of records to include in the sample, from 1 to the total number of records. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth records, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-). If this property is unset, all records will be included.\",\n+                                \"displayName\": \"Sampling Range\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"canned-acl\",\n-                                \"required\": false,\n+                                \"name\": \"sample-record-range\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n+                            \"sample-record-reservoir\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"reservoir\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n+                                \"description\": \"Specifies the number of records to write to the outgoing FlowFile. This property is only used if Sampling Strategy is set to reservoir-based strategies such as Reservoir Sampling.\",\n+                                \"displayName\": \"Reservoir Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-reservoir\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n+                            \"sample-record-sampling-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"description\": \"Selects every Nth record where N is the value of the 'Interval Value' property\",\n+                                        \"displayName\": \"Interval Sampling\",\n+                                        \"value\": \"interval\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Creates a sample of records based on the index (i.e. record number) of the records using the specified range. An example is '3,6-8,20-' which includes the third record, the sixth, seventh and eighth record, and all records from the twentieth record on. Commas separate intervals that don't overlap, and an interval can be between two numbers (i.e. 6-8) or up to a given number (i.e. -5), or from a number to the number of the last record (i.e. 20-).\",\n+                                        \"displayName\": \"Range Sampling\",\n+                                        \"value\": \"range\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Selects each record with probability P where P is the value of the 'Selection Probability' property\",\n+                                        \"displayName\": \"Probabilistic Sampling\",\n+                                        \"value\": \"probabilistic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Creates a sample of K records where each record has equal probability of being included, where K is the value of the 'Reservoir Size' property. Note that if the value is very large it may cause memory issues as the reservoir is kept in-memory.\",\n+                                        \"displayName\": \"Reservoir Sampling\",\n+                                        \"value\": \"reservoir\"\n                                     }\n                                 ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"defaultValue\": \"reservoir\",\n+                                \"description\": \"Specifies which method to use for sampling records from the incoming FlowFile\",\n+                                \"displayName\": \"Sampling Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sample-record-sampling-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, any record is not valid), the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is routed to this relationship if sampling is successful\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"interval\",\n+                            \"range\",\n+                            \"record\",\n+                            \"reservoir\",\n+                            \"sample\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.SampleRecord\",\n+                        \"typeDescription\": \"Samples the records of a FlowFile based on a specified sampling strategy (such as Reservoir Sampling). The resulting FlowFile may be of a fixed number of records (in the case of reservoir-based algorithms) or some subset of the total number of records (in the case of probabilistic sampling), or a deterministic number of records (in the case of interval sampling).\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The MIME type indicated by the record writer\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Attribute Pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Regular Expression that specifies the names of attributes whose values will be matched against the terms in the dictionary\",\n+                                \"displayName\": \"Attribute Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Attribute Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Dictionary File\": {\n+                                \"description\": \"A new-line-delimited text file that includes the terms that should trigger a match. Empty lines are ignored.  The contents of the text file are loaded into memory when the processor is scheduled and reloaded when the contents are modified.\",\n+                                \"displayName\": \"Dictionary File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n+                                \"name\": \"Dictionary File\",\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"encryption-service\": {\n-                                \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n-                                \"displayName\": \"Encryption Service\",\n+                            \"Dictionary Filter Pattern\": {\n+                                \"description\": \"A Regular Expression that will be applied to each line in the dictionary file. If the regular expression does not match the line, the line will not be included in the list of terms to search for. If a Matching Group is specified, only the portion of the term that matches that Matching Group will be used instead of the entire term. If not specified, all terms in the dictionary will be used and each term will consist of the text of the entire line in the file\",\n+                                \"displayName\": \"Dictionary Filter Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-service\",\n+                                \"name\": \"Dictionary Filter Pattern\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Match Criteria\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"At Least 1 Must Match\",\n+                                        \"value\": \"At Least 1 Must Match\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"All Must Match\",\n+                                        \"value\": \"All Must Match\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"At Least 1 Must Match\",\n+                                \"description\": \"If set to All Must Match, then FlowFiles will be routed to 'matched' only if all specified attributes' values are found in the dictionary. If set to At Least 1 Must Match, FlowFiles will be routed to 'matched' if any attribute specified is found in the dictionary\",\n+                                \"displayName\": \"Match Criteria\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Match Criteria\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles whose attributes are not found in the dictionary will be routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             },\n-                            \"s3-object-remove-tags-prefix\": {\n+                            {\n+                                \"description\": \"FlowFiles whose attributes are found in the dictionary will be routed to this relationship\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"find\",\n+                            \"lookup\",\n+                            \"scan\",\n+                            \"search\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ScanAttribute\",\n+                        \"typeDescription\": \"Scans the specified attributes of FlowFiles, checking to see if any of their values are present within the specified dictionary of terms\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Dictionary Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"binary\",\n+                                        \"value\": \"binary\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to 'True', the value provided for 'Object Tags Prefix' will be removed from the attribute(s) and then considered as the Tag name. For ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII and the prefix is set to 'tagS3' then the corresponding tag values would be 'country' and 'PII'\",\n-                                \"displayName\": \"Remove Tag Prefix\",\n+                                \"defaultValue\": \"text\",\n+                                \"description\": \"Indicates how the dictionary is encoded. If 'text', dictionary terms are new-line delimited and UTF-8 encoded; if 'binary', dictionary terms are denoted by a 4-byte integer indicating the term length followed by the term itself\",\n+                                \"displayName\": \"Dictionary Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s3-object-remove-tags-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Dictionary Encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s3-object-tags-prefix\": {\n-                                \"description\": \"Specifies the prefix which would be scanned against the incoming FlowFile's attributes and the matching attribute's name and value would be considered as the outgoing S3 object's Tag name and Tag value respectively. For Ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII, the tag prefix to be specified would be 'tagS3'\",\n-                                \"displayName\": \"Object Tags Prefix\",\n+                            \"Dictionary File\": {\n+                                \"description\": \"The filename of the terms dictionary\",\n+                                \"displayName\": \"Dictionary File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Dictionary File\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that do not match any term in the dictionary are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that match at least one term in the dictionary are routed to this relationship\",\n+                                \"name\": \"matched\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"aho-corasick\",\n+                            \"byte sequence\",\n+                            \"content\",\n+                            \"dictionary\",\n+                            \"find\",\n+                            \"scan\",\n+                            \"search\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ScanContent\",\n+                        \"typeDescription\": \"Scans the content of FlowFiles for terms that are found in a user-supplied dictionary. If a term is matched, the UTF-8 encoded version of the term will be added to the FlowFile using the 'matching.term' attribute\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The term that caused the Processor to route the FlowFile to the 'matched' relationship; if FlowFile is routed to the 'unmatched' relationship, this attribute is not added\",\n+                                \"name\": \"matching.term\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Segment Size\": {\n+                                \"description\": \"The maximum data size in bytes for each segment\",\n+                                \"displayName\": \"Segment Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"s3-object-tags-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Segment Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All segments will be sent to this relationship. If the file was small enough that it was not segmented, a copy of the original is sent to this relationship as well as original\",\n+                                \"name\": \"segments\"\n                             },\n-                            \"s3-temporary-directory-multipart\": {\n-                                \"defaultValue\": \"${java.io.tmpdir}\",\n-                                \"description\": \"Directory in which, for multipart uploads, the processor will locally save the state tracking the upload ID and parts uploaded which must both be provided to complete the upload.\",\n-                                \"displayName\": \"Temporary Directory Multipart State\",\n+                            {\n+                                \"description\": \"The original FlowFile will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"segment\",\n+                            \"split\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.SegmentContent\",\n+                        \"typeDescription\": \"Segments a FlowFile into multiple smaller segments on byte boundaries. Each segment is given the following attributes: fragment.identifier, fragment.index, fragment.count, segment.original.filename; these attributes can then be used by the MergeContent processor in order to reconstitute the original FlowFile\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All segments produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the segments that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of segments generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"The filename will be updated to include the parent's filename, the segment index, and the segment count\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Byte Sequence\": {\n+                                \"description\": \"A representation of bytes to look for and upon which to split the source file into separate files\",\n+                                \"displayName\": \"Byte Sequence\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s3-temporary-directory-multipart\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Byte Sequence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"server-side-encryption\": {\n+                            \"Byte Sequence Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies the algorithm used for server side encryption.\",\n-                                \"displayName\": \"Server Side Encryption\",\n+                                \"defaultValue\": \"Hexadecimal\",\n+                                \"description\": \"Specifies how the <Byte Sequence> property should be interpreted\",\n+                                \"displayName\": \"Byte Sequence Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"server-side-encryption\",\n+                                \"name\": \"Byte Sequence Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-chunked-encoding\": {\n+                            \"Byte Sequence Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Keep the Byte Sequence at the end of the first split if <Keep Byte Sequence> is true\",\n+                                        \"displayName\": \"Trailing\",\n+                                        \"value\": \"Trailing\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Keep the Byte Sequence at the beginning of the second split if <Keep Byte Sequence> is true\",\n+                                        \"displayName\": \"Leading\",\n+                                        \"value\": \"Leading\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables / disables chunked encoding for upload requests. Set it to false only if your endpoint does not support chunked uploading.\",\n-                                \"displayName\": \"Use Chunked Encoding\",\n+                                \"defaultValue\": \"Trailing\",\n+                                \"description\": \"If <Keep Byte Sequence> is set to true, specifies whether the byte sequence should be added to the end of the first split or the beginning of the second; if <Keep Byte Sequence> is false, this property is ignored.\",\n+                                \"displayName\": \"Byte Sequence Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-chunked-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"Byte Sequence Location\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-path-style-access\": {\n+                            \"Keep Byte Sequence\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Path-style access can be enforced by setting this property to true. Set it to true if your endpoint does not support virtual-hosted-style requests, only path-style requests.\",\n-                                \"displayName\": \"Use Path Style Access\",\n+                                \"description\": \"Determines whether or not the Byte Sequence should be included with each Split\",\n+                                \"displayName\": \"Keep Byte Sequence\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-path-style-access\",\n-                                \"required\": false,\n+                                \"name\": \"Keep Byte Sequence\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the S3 object\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"All Splits will be routed to the splits relationship\",\n+                                \"name\": \"splits\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"Put\",\n-                            \"S3\"\n+                            \"binary\",\n+                            \"content\",\n+                            \"split\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.PutS3Object\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as an S3 Object to an Amazon S3 Bucket.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitContent\",\n+                        \"typeDescription\": \"Splits incoming FlowFiles by a specified byte sequence\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The URL that can be used to access the S3 object\",\n-                                \"name\": \"s3.url\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 bucket where the Object was put in S3\",\n-                                \"name\": \"s3.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 key within where the Object was put in S3\",\n-                                \"name\": \"s3.key\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 content type of the S3 Object that put in S3\",\n-                                \"name\": \"s3.contenttype\"\n-                            },\n-                            {\n-                                \"description\": \"The version of the S3 Object that was put to S3\",\n-                                \"name\": \"s3.version\"\n-                            },\n-                            {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"JsonPath Expression\": {\n+                                \"description\": \"A JsonPath expression that indicates the array element to split into JSON/scalar fragments.\",\n+                                \"displayName\": \"JsonPath Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JsonPath Expression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\n+                            \"Max String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing the JSON document\",\n+                                \"displayName\": \"Max String Length\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n+                            \"Null Value Representation\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"empty string\",\n+                                \"description\": \"Indicates the desired representation of JSON Path expressions resulting in a null value.\",\n+                                \"displayName\": \"Null Value Representation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Null Value Representation\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The ETag of the S3 Object\",\n-                                \"name\": \"s3.etag\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The content disposition of the S3 Object that put in S3\",\n-                                \"name\": \"s3.contentdisposition\"\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"The cache-control header of the S3 Object\",\n-                                \"name\": \"s3.cachecontrol\"\n-                            },\n+                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"The uploadId used to upload the Object to S3\",\n-                                \"name\": \"s3.uploadId\"\n-                            },\n+                                \"description\": \"The entirety of the FlowFile's content (as a JsonNode object) is read into memory, in addition to all of the generated FlowFiles representing the split JSON. If many splits are generated due to the size of the JSON, or how the JSON is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"json\",\n+                            \"jsonpath\",\n+                            \"split\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitJson\",\n+                        \"typeDescription\": \"Splits a JSON File into multiple, separate FlowFiles for an array element specified by a JsonPath expression. Each generated FlowFile is comprised of an element of the specified array and transferred to relationship 'split,' with the original file transferred to the 'original' relationship. If the specified JsonPath is not found or does not evaluate to an array element, the original file is routed to 'failure' and no files are generated.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"A human-readable form of the expiration date of the S3 object, if one is set\",\n-                                \"name\": \"s3.expiration\"\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The server side encryption algorithm of the object\",\n-                                \"name\": \"s3.sseAlgorithm\"\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"A human-readable form of the User Metadata of the S3 object, if any was set\",\n-                                \"name\": \"s3.usermetadata\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The name of the encryption strategy, if any was set\",\n-                                \"name\": \"s3.encryptionStrategy\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -85505,503 +83751,287 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Record Writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n+                            \"Records Per Split\": {\n+                                \"description\": \"Specifies how many records should be written to each 'split' or 'segment' FlowFile\",\n+                                \"displayName\": \"Records Per Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"Records Per Split\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n+                            {\n+                                \"description\": \"The individual 'segments' of the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"splits\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successfully splitting an input FlowFile, the original FlowFile will be sent to this relationship.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"schema\",\n+                            \"split\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitRecord\",\n+                        \"typeDescription\": \"Splits up an input FlowFile that is in a record-oriented data format into multiple smaller FlowFiles\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer for the FlowFiles routed to the 'splits' Relationship.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records in the FlowFile. This is added to FlowFiles that are routed to the 'splits' Relationship.\",\n+                                \"name\": \"record.count\"\n+                            },\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Header Line Count\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of lines that should be considered part of the header; the header lines will be duplicated to all split files\",\n+                                \"displayName\": \"Header Line Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Header Line Count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Header Line Marker Characters\": {\n+                                \"description\": \"The first character(s) on the line of the datafile which signifies a header line. This value is ignored when Header Line Count is non-zero. The first line not containing the Header Line Marker Characters and all subsequent lines are considered non-header\",\n+                                \"displayName\": \"Header Line Marker Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Header Line Marker Characters\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Signer Override\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n+                            \"Line Split Count\": {\n+                                \"description\": \"The number of lines that will be added to each split file, excluding header lines. A value of zero requires Maximum Fragment Size to be set, and line count will not be considered in determining splits.\",\n+                                \"displayName\": \"Line Split Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n+                                \"name\": \"Line Split Count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Fragment Size\": {\n+                                \"description\": \"The maximum size of each split file, including header lines. NOTE: in the case where a single line exceeds this property (including headers, if applicable), that line will be output in a split of its own which exceeds this Maximum Fragment Size setting.\",\n+                                \"displayName\": \"Maximum Fragment Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Fragment Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"append-tag\": {\n+                            \"Remove Trailing Newlines\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"If set to true, the tag will be appended to the existing set of tags on the S3 object. Any existing tags with the same key as the new tag will be updated with the specified value. If set to false, the existing tags will be removed and the new tag will be set on the S3 object.\",\n-                                \"displayName\": \"Append Tag\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"append-tag\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-signer-class-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"description\": \"Whether to remove newlines at the end of each split file. This should be false if you intend to merge the split files later. If this is set to 'true' and a FlowFile is generated that contains only 'empty lines' (i.e., consists only of \\\\r and \\\\n characters), the FlowFile will not be emitted. Note, however, that if header lines are specified, the resultant FlowFile will never be empty as it will consist of the header lines, so a FlowFile may be emitted that contains only the header lines.\",\n+                                \"displayName\": \"Remove Trailing Newlines\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"tag-key\": {\n-                                \"description\": \"The key of the tag that will be set on the S3 Object\",\n-                                \"displayName\": \"Tag Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"tag-key\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"tag-value\": {\n-                                \"description\": \"The value of the tag that will be set on the S3 Object\",\n-                                \"displayName\": \"Tag Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"tag-value\",\n+                                \"name\": \"Remove Trailing Newlines\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"version\": {\n-                                \"description\": \"The Version of the Object to tag\",\n-                                \"displayName\": \"Version ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n+                                \"description\": \"If a file cannot be split for some reason, the original file will be routed to this destination and nothing will be routed elsewhere\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The original input file will be routed to this destination when it has been successfully split into 1 or more files\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The split files will be routed to this destination when an input file is successfully split into 1 or more split files\",\n+                                \"name\": \"splits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The FlowFile with its attributes is stored in memory, not the content of the FlowFile. If many splits are generated due to the size of the content, or how the content is configured to be split, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"S3\",\n-                            \"Tag\"\n+                            \"split\",\n+                            \"text\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.TagS3Object\",\n-                        \"typeDescription\": \"Adds or updates a tag on an Amazon S3 Object.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitText\",\n+                        \"typeDescription\": \"Splits a text file into multiple smaller text files on line boundaries limited by maximum number of lines or total size of fragment. Each output split file will contain no more than the configured number of lines or bytes. If both Line Split Count and Maximum Fragment Size are specified, the split occurs at whichever limit is reached first. If the first line of a fragment exceeds the Maximum Fragment Size, that line will be output in a single split file which exceeds the configured maximum size limit. This component also allows one to specify that each split should include a header lines. Header lines can be computed by either specifying the amount of lines that should constitute a header or by using header marker to match against the read lines. If such match happens then the corresponding line will be treated as header. Keep in mind that upon the first failure of header marker match, no more matches will be performed and the rest of the data will be parsed as regular lines for a given split. If after computation of the header there are no more data, the resulting split will consists of only header lines.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The tags associated with the S3 object will be written as part of the FlowFile attributes\",\n-                                \"name\": \"s3.tag.___\"\n+                                \"description\": \"The number of lines of text from the original FlowFile that were copied to this FlowFile\",\n+                                \"name\": \"text.line.count\"\n                             },\n                             {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n+                                \"description\": \"The number of bytes from the original FlowFile that were copied to this FlowFile, including header, if applicable, which is duplicated in each split FlowFile\",\n+                                \"name\": \"fragment.size\"\n                             },\n                             {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86009,444 +84039,397 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Split Depth\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Indicates the XML-nesting depth to start splitting XML fragments. A depth of 1 means split the root's children, whereas a depth of 2 means split the root's children's children and so forth.\",\n+                                \"displayName\": \"Split Depth\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Split Depth\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"User specified dynamic Properties are added as attributes to the notification\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A name of an attribute to be added to the notification\",\n-                                \"value\": \"The attribute value\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"split\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The entirety of the FlowFile's content (as a Document object) is read into memory, in addition to all of the generated FlowFiles representing the split XML. A Document object can take approximately 10 times as much memory as the size of the XML. For example, a 1 MB XML document may use 10 MB of memory. If many splits are generated due to the size of the XML, a two-phase approach may be necessary to avoid excessive use of memory.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"split\",\n+                            \"xml\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.SplitXml\",\n+                        \"typeDescription\": \"Splits an XML File into multiple separate FlowFiles, each comprising a child or descendant of the original root element\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"30 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ARN Type\": {\n+                            \"File Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The ARN is the name of a topic\",\n-                                        \"displayName\": \"Topic ARN\",\n-                                        \"value\": \"Topic ARN\"\n+                                        \"description\": \"State is stored locally. Each node in a cluster will tail a different file.\",\n+                                        \"displayName\": \"Local\",\n+                                        \"value\": \"Local\"\n                                     },\n                                     {\n-                                        \"description\": \"The ARN is the name of a particular Target, used to notify a specific subscriber\",\n-                                        \"displayName\": \"Target ARN\",\n-                                        \"value\": \"Target ARN\"\n+                                        \"description\": \"State is located on a remote resource. This Processor will store state across the cluster so that it can be run on Primary Node Only and a new Primary Node can pick up where the last one left off.\",\n+                                        \"displayName\": \"Remote\",\n+                                        \"value\": \"Remote\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Topic ARN\",\n-                                \"description\": \"The type of Amazon Resource Name that is being used.\",\n-                                \"displayName\": \"ARN Type\",\n+                                \"defaultValue\": \"Local\",\n+                                \"description\": \"Specifies where the state is located either local or cluster so that state can be stored appropriately in order to ensure that all data is consumed without duplicating data upon restart of NiFi\",\n+                                \"displayName\": \"State Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ARN Type\",\n+                                \"name\": \"File Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"File to Tail\": {\n+                                \"description\": \"Path of the file to tail in case of single file mode. If using multifile mode, regular expression to find files to tail in the base directory. In case recursivity is set to true, the regular expression will be used to match the path starting from the base directory (see additional details for examples).\",\n+                                \"displayName\": \"File(s) to Tail\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"File to Tail\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Amazon Resource Name (ARN)\": {\n-                                \"description\": \"The name of the resource to which notifications should be published\",\n-                                \"displayName\": \"Amazon Resource Name (ARN)\",\n+                            \"Initial Start Position\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start with the oldest data that matches the Rolling Filename Pattern and then begin reading from the File to Tail\",\n+                                        \"displayName\": \"Beginning of Time\",\n+                                        \"value\": \"Beginning of Time\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start with the beginning of the File to Tail. Do not ingest any data that has already been rolled over\",\n+                                        \"displayName\": \"Beginning of File\",\n+                                        \"value\": \"Beginning of File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n+                                        \"displayName\": \"Current Time\",\n+                                        \"value\": \"Current Time\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Beginning of File\",\n+                                \"description\": \"When the Processor first begins to tail data, this property specifies where the Processor should begin reading data. Once data has been ingested from a file, the Processor will continue from the last point from which it has received data.\",\n+                                \"displayName\": \"Initial Start Position\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Amazon Resource Name (ARN)\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Initial Start Position\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The character set in which the FlowFile's content is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"Line Start Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Single file\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Tailing mode\",\n+                                        \"propertyName\": \"tail-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n+                                \"displayName\": \"Line Start Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Line Start Pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Max Buffer Size\": {\n+                                \"defaultValue\": \"64 KB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Line Start Pattern\",\n+                                        \"propertyName\": \"Line Start Pattern\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n+                                \"displayName\": \"Max Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Max Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Deduplication Message ID\": {\n-                                \"description\": \"The token used for deduplication of sent messages\",\n-                                \"displayName\": \"Deduplication Message ID\",\n+                            \"Post-Rollover Tail Period\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"When a file is rolled over, the processor will continue tailing the rolled over file until it has not been modified for this amount of time. This allows for another process to rollover a file, and then flush out any buffered data. Note that when this value is set, and the tailed file rolls over, the new file will not be tailed until the old file has not been modified for the configured amount of time. Additionally, when using this capability, in order to avoid data duplication, this period must be set longer than the Processor's Run Schedule, and the Processor must not be stopped after the file being tailed has been rolled over and before the data has been fully consumed. Otherwise, the data may be duplicated, as the entire file may be written out as the contents of a single FlowFile.\",\n+                                \"displayName\": \"Post-Rollover Tail Period\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Deduplication Message ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Post-Rollover Tail Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"E-mail Subject\": {\n-                                \"description\": \"The optional subject to use for any subscribers that are subscribed via E-mail\",\n-                                \"displayName\": \"E-mail Subject\",\n+                            \"Rolling Filename Pattern\": {\n+                                \"description\": \"If the file to tail \\\"rolls over\\\" as would be the case with log files, this filename pattern will be used to identify files that have rolled over so that if NiFi is restarted, and the file has rolled over, it will be able to pick up where it left off. This pattern supports wildcard characters * and ?, it also supports the notation ${filename} to specify a pattern based on the name of the file (without extension), and will assume that the files that have rolled over live in the same directory as the file being tailed. The same glob pattern will be used for all files.\",\n+                                \"displayName\": \"Rolling Filename Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"E-mail Subject\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Rolling Filename Pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"pre-allocated-buffer-size\": {\n+                                \"defaultValue\": \"65536 B\",\n+                                \"description\": \"Sets the amount of memory that is pre-allocated for each tailed file.\",\n+                                \"displayName\": \"Pre-Allocated Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"pre-allocated-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"reread-on-nul\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If this option is set to 'true', when a NUL character is read, the processor will yield and try to read the same part again later. (Note: Yielding may delay the processing of other files tailed by this processor, not just the one with the NUL character.) The purpose of this flag is to allow users to handle cases where reading a file may return temporary NUL values. NFS for example may send file contents out of order. In this case the missing parts are temporarily replaced by NUL values. CAUTION! If the file contains legitimate NUL values, setting this flag causes this processor to get stuck indefinitely. For this reason users should refrain from using this feature if they can help it and try to avoid having the target file on a file system where reads are unreliable.\",\n+                                \"displayName\": \"Reread when NUL encountered\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"reread-on-nul\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Group ID\": {\n-                                \"description\": \"If using FIFO, the message group to which the flowFile belongs\",\n-                                \"displayName\": \"Message Group ID\",\n+                            \"tail-base-directory\": {\n+                                \"description\": \"Base directory used to look for files to tail. This property is required when using Multifile mode.\",\n+                                \"displayName\": \"Base directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Group ID\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"tail-base-directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"tail-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"In this mode, only the one file indicated in the 'Files to tail' property will be watched by the processor. In this mode, the file may not exist when starting the processor.\",\n+                                        \"displayName\": \"Single file\",\n+                                        \"value\": \"Single file\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"In this mode, the 'Files to tail' property accepts a regular expression and the processor will look for files in 'Base directory' to list the files to tail by the processor.\",\n+                                        \"displayName\": \"Multiple files\",\n+                                        \"value\": \"Multiple files\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"Single file\",\n+                                \"description\": \"Mode to use: single file will tail only one file, multiple file will look for a list of file. In Multiple mode the Base directory is required.\",\n+                                \"displayName\": \"Tailing mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"tail-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"tailfile-lookup-frequency\": {\n+                                \"defaultValue\": \"10 minutes\",\n+                                \"description\": \"Only used in Multiple files mode. It specifies the minimum duration the processor will wait before listing again the files to tail.\",\n+                                \"displayName\": \"Lookup frequency\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"tailfile-lookup-frequency\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Use JSON Structure\": {\n+                            \"tailfile-maximum-age\": {\n+                                \"defaultValue\": \"24 hours\",\n+                                \"description\": \"Only used in Multiple files mode. It specifies the necessary minimum duration to consider that no new messages will be appended in a file regarding its last modification date. This should not be set too low to avoid duplication of data in case new messages are appended at a lower frequency.\",\n+                                \"displayName\": \"Maximum age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"tailfile-maximum-age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"tailfile-recursive-lookup\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the contents of the FlowFile must be JSON with a top-level element named 'default'. Additional elements can be used to send different messages to different protocols. See the Amazon SNS Documentation for more information.\",\n-                                \"displayName\": \"Use JSON Structure\",\n+                                \"description\": \"When using Multiple files mode, this property defines if files must be listed recursively or not in the base directory.\",\n+                                \"displayName\": \"Recursive lookup\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use JSON Structure\",\n+                                \"name\": \"tailfile-recursive-lookup\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n-                        ],\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Stores state about where in the Tailed File it left off so that on restart it does not have to duplicate data. State is stored either local or clustered depend on the <File Location> property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles are routed to this Relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"publish\",\n-                            \"pubsub\",\n-                            \"put\",\n-                            \"sns\",\n-                            \"topic\"\n+                            \"file\",\n+                            \"log\",\n+                            \"source\",\n+                            \"tail\",\n+                            \"text\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.sns.PutSNS\",\n-                        \"typeDescription\": \"Sends the content of a FlowFile as a notification to the Amazon Simple Notification Service\",\n+                        \"type\": \"org.apache.nifi.processors.standard.TailFile\",\n+                        \"typeDescription\": \"\\\"Tails\\\" a file, or a list of files, ingesting data from the file as it is written to the file. The file is expected to be textual. Data is ingested only when a new line is encountered (carriage return or new-line character or combination). If the file to tail is periodically \\\"rolled over\\\", as is generally the case with log files, an optional Rolling Filename Pattern can be used to retrieve data from files that have rolled over, even if the rollover occurred while NiFi was not running (provided that the data still exists upon restart of NiFi). It is generally advisable to set the Run Schedule to a few seconds, rather than running with the default value of 0 secs, as this Processor will consume a lot of resources if scheduled very aggressively. At this time, this Processor does not support ingesting files that have been compressed when 'rolled over'.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Path of the original file the flow file comes from.\",\n+                                \"name\": \"tailfile.original.path\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86454,374 +84437,173 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"These XSLT parameters are passed to the transformer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"An XSLT transform parameter name\",\n+                                \"value\": \"An XSLT transform parameter value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"XSLT file name\": {\n+                                \"description\": \"Provides the name (including full path) of the XSLT file to apply to the FlowFile XML content.One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined.\",\n+                                \"displayName\": \"XSLT file name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"XSLT file name\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Maximum number of stylesheets to cache. Zero disables the cache.\",\n+                                \"displayName\": \"Cache size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"cache-ttl-after-last-access\": {\n+                                \"defaultValue\": \"60 secs\",\n+                                \"description\": \"The cache TTL (time-to-live) or how long to keep stylesheets in the cache after last access.\",\n+                                \"displayName\": \"Cache TTL after last access\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-ttl-after-last-access\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue URL\": {\n-                                \"description\": \"The URL of the queue delete from\",\n-                                \"displayName\": \"Queue URL\",\n+                            \"indent-output\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to indent the output.\",\n+                                \"displayName\": \"Indent\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue URL\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"indent-output\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receipt Handle\": {\n-                                \"defaultValue\": \"${sqs.receipt.handle}\",\n-                                \"description\": \"The identifier that specifies the receipt of the message\",\n-                                \"displayName\": \"Receipt Handle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Receipt Handle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"secure-processing\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n+                                \"displayName\": \"Secure processing\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"secure-processing\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"xslt-controller\": {\n+                                \"description\": \"Controller lookup used to store XSLT definitions. One of the 'XSLT file name' and 'XSLT Lookup' properties must be defined. WARNING: note that the lookup controller service should not be used to store large XSLT files.\",\n+                                \"displayName\": \"XSLT Lookup\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"xslt-controller\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"xslt-controller-key\": {\n+                                \"description\": \"Key used to retrieve the XSLT definition from the XSLT lookup controller. This property must be set when using the XSLT controller property.\",\n+                                \"displayName\": \"XSLT Lookup key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"xslt-controller-key\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Delete\",\n-                            \"Queue\",\n-                            \"SQS\"\n+                            \"transform\",\n+                            \"xml\",\n+                            \"xslt\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n-                        \"typeDescription\": \"Deletes a message from an Amazon Simple Queuing Service Queue\",\n+                        \"type\": \"org.apache.nifi.processors.standard.TransformXml\",\n+                        \"typeDescription\": \"Applies the provided XSLT file to the FlowFile XML payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the XSL transform fails, the original FlowFile is routed to the 'failure' relationship\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86830,1312 +84612,241 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"File Filter\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Only files contained in the archive whose names match the given regular expression will be extracted (tar/zip only)\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Auto Delete Messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Filename Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"zip\",\n+                                            \"use mime.type attribute\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Packaging Format\",\n+                                        \"propertyName\": \"Packaging Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether the messages should be automatically deleted by the processors once they have been received.\",\n-                                \"displayName\": \"Auto Delete Messages\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Auto Delete Messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of messages to send in a single network request\",\n-                                \"displayName\": \"Batch Size\",\n+                                \"description\": \"If supplied this character set will be supplied to the Zip utility to attempt to decode filenames using the specific character set. If not specified the default platform character set will be used. This is useful if a Zip was created with a different character set than the platform default and the zip uses non standard values to specify.\",\n+                                \"displayName\": \"Filename Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"Filename Character Set\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n+                            \"Packaging Format\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Big5\",\n-                                        \"value\": \"Big5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Big5-HKSCS\",\n-                                        \"value\": \"Big5-HKSCS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CESU-8\",\n-                                        \"value\": \"CESU-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EUC-JP\",\n-                                        \"value\": \"EUC-JP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EUC-KR\",\n-                                        \"value\": \"EUC-KR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB18030\",\n-                                        \"value\": \"GB18030\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB2312\",\n-                                        \"value\": \"GB2312\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GBK\",\n-                                        \"value\": \"GBK\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM-Thai\",\n-                                        \"value\": \"IBM-Thai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM00858\",\n-                                        \"value\": \"IBM00858\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01140\",\n-                                        \"value\": \"IBM01140\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01141\",\n-                                        \"value\": \"IBM01141\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01142\",\n-                                        \"value\": \"IBM01142\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01143\",\n-                                        \"value\": \"IBM01143\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01144\",\n-                                        \"value\": \"IBM01144\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01145\",\n-                                        \"value\": \"IBM01145\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01146\",\n-                                        \"value\": \"IBM01146\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01147\",\n-                                        \"value\": \"IBM01147\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01148\",\n-                                        \"value\": \"IBM01148\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01149\",\n-                                        \"value\": \"IBM01149\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM037\",\n-                                        \"value\": \"IBM037\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM1026\",\n-                                        \"value\": \"IBM1026\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM1047\",\n-                                        \"value\": \"IBM1047\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM273\",\n-                                        \"value\": \"IBM273\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM277\",\n-                                        \"value\": \"IBM277\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM278\",\n-                                        \"value\": \"IBM278\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM280\",\n-                                        \"value\": \"IBM280\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM284\",\n-                                        \"value\": \"IBM284\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM285\",\n-                                        \"value\": \"IBM285\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM290\",\n-                                        \"value\": \"IBM290\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM297\",\n-                                        \"value\": \"IBM297\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM420\",\n-                                        \"value\": \"IBM420\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM424\",\n-                                        \"value\": \"IBM424\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM437\",\n-                                        \"value\": \"IBM437\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM500\",\n-                                        \"value\": \"IBM500\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM775\",\n-                                        \"value\": \"IBM775\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM850\",\n-                                        \"value\": \"IBM850\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM852\",\n-                                        \"value\": \"IBM852\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM855\",\n-                                        \"value\": \"IBM855\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM857\",\n-                                        \"value\": \"IBM857\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM860\",\n-                                        \"value\": \"IBM860\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM861\",\n-                                        \"value\": \"IBM861\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM862\",\n-                                        \"value\": \"IBM862\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM863\",\n-                                        \"value\": \"IBM863\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM864\",\n-                                        \"value\": \"IBM864\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM865\",\n-                                        \"value\": \"IBM865\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM866\",\n-                                        \"value\": \"IBM866\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM868\",\n-                                        \"value\": \"IBM868\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM869\",\n-                                        \"value\": \"IBM869\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM870\",\n-                                        \"value\": \"IBM870\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM871\",\n-                                        \"value\": \"IBM871\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM918\",\n-                                        \"value\": \"IBM918\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-CN\",\n-                                        \"value\": \"ISO-2022-CN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-JP\",\n-                                        \"value\": \"ISO-2022-JP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-JP-2\",\n-                                        \"value\": \"ISO-2022-JP-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-KR\",\n-                                        \"value\": \"ISO-2022-KR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-13\",\n-                                        \"value\": \"ISO-8859-13\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-15\",\n-                                        \"value\": \"ISO-8859-15\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-16\",\n-                                        \"value\": \"ISO-8859-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-2\",\n-                                        \"value\": \"ISO-8859-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-3\",\n-                                        \"value\": \"ISO-8859-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-4\",\n-                                        \"value\": \"ISO-8859-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-5\",\n-                                        \"value\": \"ISO-8859-5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-6\",\n-                                        \"value\": \"ISO-8859-6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-7\",\n-                                        \"value\": \"ISO-8859-7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-8\",\n-                                        \"value\": \"ISO-8859-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-9\",\n-                                        \"value\": \"ISO-8859-9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JIS_X0201\",\n-                                        \"value\": \"JIS_X0201\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JIS_X0212-1990\",\n-                                        \"value\": \"JIS_X0212-1990\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KOI8-R\",\n-                                        \"value\": \"KOI8-R\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KOI8-U\",\n-                                        \"value\": \"KOI8-U\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Shift_JIS\",\n-                                        \"value\": \"Shift_JIS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TIS-620\",\n-                                        \"value\": \"TIS-620\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-32\",\n-                                        \"value\": \"UTF-32\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-32BE\",\n-                                        \"value\": \"UTF-32BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-32LE\",\n-                                        \"value\": \"UTF-32LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1250\",\n-                                        \"value\": \"windows-1250\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1251\",\n-                                        \"value\": \"windows-1251\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1252\",\n-                                        \"value\": \"windows-1252\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1253\",\n-                                        \"value\": \"windows-1253\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1254\",\n-                                        \"value\": \"windows-1254\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1255\",\n-                                        \"value\": \"windows-1255\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1256\",\n-                                        \"value\": \"windows-1256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1257\",\n-                                        \"value\": \"windows-1257\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1258\",\n-                                        \"value\": \"windows-1258\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-31j\",\n-                                        \"value\": \"windows-31j\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-Big5-HKSCS-2001\",\n-                                        \"value\": \"x-Big5-HKSCS-2001\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-Big5-Solaris\",\n-                                        \"value\": \"x-Big5-Solaris\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-euc-jp-linux\",\n-                                        \"value\": \"x-euc-jp-linux\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-EUC-TW\",\n-                                        \"value\": \"x-EUC-TW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-eucJP-Open\",\n-                                        \"value\": \"x-eucJP-Open\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1006\",\n-                                        \"value\": \"x-IBM1006\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1025\",\n-                                        \"value\": \"x-IBM1025\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1046\",\n-                                        \"value\": \"x-IBM1046\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1097\",\n-                                        \"value\": \"x-IBM1097\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1098\",\n-                                        \"value\": \"x-IBM1098\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1112\",\n-                                        \"value\": \"x-IBM1112\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1122\",\n-                                        \"value\": \"x-IBM1122\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1123\",\n-                                        \"value\": \"x-IBM1123\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1124\",\n-                                        \"value\": \"x-IBM1124\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1129\",\n-                                        \"value\": \"x-IBM1129\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1166\",\n-                                        \"value\": \"x-IBM1166\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1364\",\n-                                        \"value\": \"x-IBM1364\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1381\",\n-                                        \"value\": \"x-IBM1381\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1383\",\n-                                        \"value\": \"x-IBM1383\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM29626C\",\n-                                        \"value\": \"x-IBM29626C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM300\",\n-                                        \"value\": \"x-IBM300\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM33722\",\n-                                        \"value\": \"x-IBM33722\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM737\",\n-                                        \"value\": \"x-IBM737\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM833\",\n-                                        \"value\": \"x-IBM833\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM834\",\n-                                        \"value\": \"x-IBM834\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM856\",\n-                                        \"value\": \"x-IBM856\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM874\",\n-                                        \"value\": \"x-IBM874\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM875\",\n-                                        \"value\": \"x-IBM875\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM921\",\n-                                        \"value\": \"x-IBM921\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM922\",\n-                                        \"value\": \"x-IBM922\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM930\",\n-                                        \"value\": \"x-IBM930\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM933\",\n-                                        \"value\": \"x-IBM933\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM935\",\n-                                        \"value\": \"x-IBM935\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM937\",\n-                                        \"value\": \"x-IBM937\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM939\",\n-                                        \"value\": \"x-IBM939\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM942\",\n-                                        \"value\": \"x-IBM942\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM942C\",\n-                                        \"value\": \"x-IBM942C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM943\",\n-                                        \"value\": \"x-IBM943\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM943C\",\n-                                        \"value\": \"x-IBM943C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM948\",\n-                                        \"value\": \"x-IBM948\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM949\",\n-                                        \"value\": \"x-IBM949\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM949C\",\n-                                        \"value\": \"x-IBM949C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM950\",\n-                                        \"value\": \"x-IBM950\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM964\",\n-                                        \"value\": \"x-IBM964\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM970\",\n-                                        \"value\": \"x-IBM970\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-ISCII91\",\n-                                        \"value\": \"x-ISCII91\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-ISO-2022-CN-CNS\",\n-                                        \"value\": \"x-ISO-2022-CN-CNS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-ISO-2022-CN-GB\",\n-                                        \"value\": \"x-ISO-2022-CN-GB\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-iso-8859-11\",\n-                                        \"value\": \"x-iso-8859-11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-JIS0208\",\n-                                        \"value\": \"x-JIS0208\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-JISAutoDetect\",\n-                                        \"value\": \"x-JISAutoDetect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-Johab\",\n-                                        \"value\": \"x-Johab\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacArabic\",\n-                                        \"value\": \"x-MacArabic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacCentralEurope\",\n-                                        \"value\": \"x-MacCentralEurope\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacCroatian\",\n-                                        \"value\": \"x-MacCroatian\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacCyrillic\",\n-                                        \"value\": \"x-MacCyrillic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacDingbat\",\n-                                        \"value\": \"x-MacDingbat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacGreek\",\n-                                        \"value\": \"x-MacGreek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacHebrew\",\n-                                        \"value\": \"x-MacHebrew\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacIceland\",\n-                                        \"value\": \"x-MacIceland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacRoman\",\n-                                        \"value\": \"x-MacRoman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacRomania\",\n-                                        \"value\": \"x-MacRomania\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacSymbol\",\n-                                        \"value\": \"x-MacSymbol\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacThai\",\n-                                        \"value\": \"x-MacThai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacTurkish\",\n-                                        \"value\": \"x-MacTurkish\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacUkraine\",\n-                                        \"value\": \"x-MacUkraine\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MS932_0213\",\n-                                        \"value\": \"x-MS932_0213\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MS950-HKSCS\",\n-                                        \"value\": \"x-MS950-HKSCS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MS950-HKSCS-XP\",\n-                                        \"value\": \"x-MS950-HKSCS-XP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-mswin-936\",\n-                                        \"value\": \"x-mswin-936\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-PCK\",\n-                                        \"value\": \"x-PCK\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-SJIS_0213\",\n-                                        \"value\": \"x-SJIS_0213\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-UTF-16LE-BOM\",\n-                                        \"value\": \"x-UTF-16LE-BOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"X-UTF-32BE-BOM\",\n-                                        \"value\": \"X-UTF-32BE-BOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"X-UTF-32LE-BOM\",\n-                                        \"value\": \"X-UTF-32LE-BOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-windows-50220\",\n-                                        \"value\": \"x-windows-50220\"\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-50221\",\n-                                        \"value\": \"x-windows-50221\"\n+                                        \"displayName\": \"tar\",\n+                                        \"value\": \"tar\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-874\",\n-                                        \"value\": \"x-windows-874\"\n+                                        \"displayName\": \"zip\",\n+                                        \"value\": \"zip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-949\",\n-                                        \"value\": \"x-windows-949\"\n+                                        \"displayName\": \"flowfile-stream-v3\",\n+                                        \"value\": \"flowfile-stream-v3\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-950\",\n-                                        \"value\": \"x-windows-950\"\n+                                        \"displayName\": \"flowfile-stream-v2\",\n+                                        \"value\": \"flowfile-stream-v2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-iso2022jp\",\n-                                        \"value\": \"x-windows-iso2022jp\"\n+                                        \"displayName\": \"flowfile-tar-v1\",\n+                                        \"value\": \"flowfile-tar-v1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set that should be used to encode the textual content of the SQS message\",\n-                                \"displayName\": \"Character Set\",\n+                                \"defaultValue\": \"use mime.type attribute\",\n+                                \"description\": \"The Packaging Format used to create the file\",\n+                                \"displayName\": \"Packaging Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Packaging Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Password\": {\n+                                \"description\": \"Password used for decrypting Zip archives encrypted with ZipCrypto or AES. Configuring a password disables support for alternative Zip compression algorithms.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue URL\": {\n-                                \"description\": \"The URL of the queue to get messages from\",\n-                                \"displayName\": \"Queue URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Queue URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Receive Message Wait Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The maximum amount of time to wait on a long polling receive call. Setting this to a value of 1 second or greater will reduce the number of SQS requests and decrease fetch latency at the cost of a constantly active thread.\",\n-                                \"displayName\": \"Receive Message Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Message Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Region\": {\n+                            \"allow-stored-entries-wdd\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"zip\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Packaging Format\",\n+                                        \"propertyName\": \"Packaging Format\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"15 mins\",\n-                                \"description\": \"The amount of time after a message is received but not deleted that the message is hidden from other consumers\",\n-                                \"displayName\": \"Visibility Timeout\",\n+                                \"description\": \"Some zip archives contain stored entries with data descriptors which by spec should not happen.  If this property is true they will be read anyway.  If false and such an entry is discovered the zip will fail to process.\",\n+                                \"displayName\": \"Allow Stored Entries With Data Descriptor\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n+                                \"name\": \"allow-stored-entries-wdd\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the <Packaging Format> property is set to use mime.type attribute, this attribute is used to determine the FlowFile's MIME Type. In this case, if the attribute is set to application/tar, the TAR Packaging Format will be used. If the attribute is set to application/zip, the ZIP Packaging Format will be used. If the attribute is set to application/flowfile-v3 or application/flowfile-v2 or application/flowfile-v1, the appropriate FlowFile Packaging Format will be used. If this attribute is missing, the FlowFile will be routed to 'failure'. Otherwise, if the attribute's value is not one of those mentioned above, the FlowFile will be routed to 'success' without being unpacked. Use the File Filter property only extract files matching a specific regular expression.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Fetch\",\n-                            \"Get\",\n-                            \"Poll\",\n-                            \"Queue\",\n-                            \"SQS\"\n+                            \"Unpack\",\n+                            \"archive\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"tar\",\n+                            \"un-merge\",\n+                            \"zip\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n-                        \"typeDescription\": \"Fetches messages from an Amazon Simple Queuing Service Queue\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.processors.standard.UnpackContent\",\n+                        \"typeDescription\": \"Unpacks the content of FlowFiles that have been packaged with one of several different Packaging Formats, emitting one to many FlowFiles for each input FlowFile. Supported formats are TAR, ZIP, and FlowFile Stream packages.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Set \\\"Packaging Format\\\" value to \\\"zip\\\" or \\\"use mime.type attribute\\\".\\nSet \\\"Filename Character Set\\\" value to \\\"Cp437\\\" or \\\"IBM437\\\".\\n\",\n+                                \"description\": \"Unpack Zip containing filenames with special characters, created on Windows with filename charset 'Cp437' or 'IBM437'.\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The MD5 sum of the message\",\n-                                \"name\": \"hash.value\"\n+                                \"description\": \"If the FlowFile is successfully unpacked, its MIME Type is no longer known, so the mime.type attribute is set to application/octet-stream.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"MD5\",\n-                                \"name\": \"hash.algorithm\"\n+                                \"description\": \"All unpacked FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The unique identifier of the SQS message\",\n-                                \"name\": \"sqs.message.id\"\n+                                \"description\": \"A one-up number that indicates the ordering of the unpacked FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n                             },\n                             {\n-                                \"description\": \"The SQS Receipt Handle that is to be used to delete the message from the queue\",\n-                                \"name\": \"sqs.receipt.handle\"\n+                                \"description\": \"The number of unpacked FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile. Extensions of .tar, .zip or .pkg are removed because the MergeContent processor automatically adds those extensions if it is used to rebuild the original FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the unpacked file was last modified (tar only).\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was created. This attribute holds always the same value as file.lastModifiedTime (tar only).\",\n+                                \"name\": \"file.creationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The owner of the unpacked file (tar only)\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group owner of the unpacked file (tar only)\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the unpacked file (tar only)\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The encryption method for entries in Zip archives\",\n+                                \"name\": \"file.encryptionMethod\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -88143,1505 +84854,831 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows the user to add key/value pairs as Message Attributes by adding a property whose name will become the name of the Message Attribute and value will become the value of the Message Attribute\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a Message Attribute to add to the message\",\n-                                \"value\": \"The value of the Message Attribute\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Delay\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"The amount of time to delay the message before it becomes available to consumers\",\n-                                \"displayName\": \"Delay\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delay\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue URL\": {\n-                                \"description\": \"The URL of the queue to act upon\",\n-                                \"displayName\": \"Queue URL\",\n+                            \"counter-name\": {\n+                                \"description\": \"The name of the counter you want to set the value of - supports expression language like ${counterName}\",\n+                                \"displayName\": \"Counter Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"counter-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"deduplication-message-id\": {\n-                                \"description\": \"The token used for deduplication of sent messages\",\n-                                \"displayName\": \"Deduplication Message ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"deduplication-message-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-group-id\": {\n-                                \"description\": \"If using FIFO, the message group to which the FlowFile belongs\",\n-                                \"displayName\": \"Message Group ID\",\n+                            \"delta\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Adjusts the counter by the specified delta for each flow file received. May be a positive or negative integer.\",\n+                                \"displayName\": \"Delta\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-group-id\",\n-                                \"required\": false,\n+                                \"name\": \"delta\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.GetSQS\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The name of the counter to update/get.\",\n+                                \"name\": \"counterName\"\n+                            }\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Counter was updated/retrieved\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Publish\",\n-                            \"Put\",\n-                            \"Queue\",\n-                            \"SQS\"\n+                            \"counter\",\n+                            \"debug\",\n+                            \"instrumentation\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.sqs.PutSQS\",\n-                        \"typeDescription\": \"Publishes a message to an Amazon Simple Queuing Service Queue\",\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateCounter\",\n+                        \"typeDescription\": \"This processor allows users to set specific counters and key points in their flow. It is useful for debugging and basic counting functions.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-provenance-repository-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-prometheus-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\n+                            \"db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses.\",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-client-auth\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"prometheus-reporting-task-instance-id\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n-                                \"displayName\": \"Instance ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n-                                \"defaultValue\": \"9092\",\n-                                \"description\": \"The Port where prometheus metrics can be accessed\",\n-                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n-                                \"required\": true,\n+                                \"name\": \"db-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"record-reader\": {\n+                                \"description\": \"The service for reading incoming flow files. The reader is only used to determine the schema of the records, the actual records will not be processed.\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-ssl-context\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"prometheus\",\n-                            \"record\",\n-                            \"send\",\n-                            \"write\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusRecordSink\",\n-                        \"typeDescription\": \"Specifies a Record Sink Service that exposes data points to a Prometheus scraping service. Numeric fields are exposed as Gauges, String fields are the label values for the gauges, and all other fields are ignored.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"60 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\n+                            },\n+                            \"updatedatabasetable-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the catalog name must match the database's catalog name exactly.\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-catalog-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"updatedatabasetable-create-table\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"No Authentication\"\n-                                    },\n-                                    {\n-                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n+                                        \"description\": \"Create a table with the given schema if it does not already exist\",\n+                                        \"displayName\": \"Create If Not Exists\",\n+                                        \"value\": \"Create If Not Exists\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"description\": \"If the target does not already exist, log an error and route the flowfile to failure\",\n+                                        \"displayName\": \"Fail If Not Exists\",\n+                                        \"value\": \"Fail If Not Exists\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"Fail If Not Exists\",\n+                                \"description\": \"Specifies how to process the target table when it does not exist (create it, fail, e.g.).\",\n+                                \"displayName\": \"Create Table Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-client-auth\",\n+                                \"name\": \"updatedatabasetable-create-table\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-instance-id\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Prometheus\",\n-                                \"displayName\": \"Instance ID\",\n+                            \"updatedatabasetable-dbcp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain connection(s) to the database\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"updatedatabasetable-dbcp-service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"updatedatabasetable-primary-keys\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Create If Not Exists\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Create Table Strategy\",\n+                                        \"propertyName\": \"updatedatabasetable-create-table\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of record field names that uniquely identifies a row in the database. This property is only used if the specified table needs to be created, in which case the Primary Key Fields will be used to specify the primary keys of the newly-created table. IMPORTANT: Primary Key Fields must match the record field names exactly unless 'Quote Column Identifiers' is false and the database allows for case-insensitive column names. In practice it is best to specify Primary Key Fields that exactly match the record field names, and those will become the column names in the created table.\",\n+                                \"displayName\": \"Primary Key Fields\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-primary-keys\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-endpoint-port\": {\n-                                \"defaultValue\": \"9092\",\n-                                \"description\": \"The Port where prometheus metrics can be accessed\",\n-                                \"displayName\": \"Prometheus Metrics Endpoint Port\",\n+                            \"updatedatabasetable-query-timeout\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Sets the number of seconds the driver will wait for a query to execute. A value of 0 means no timeout. NOTE: Non-zero values may not be supported by the driver.\",\n+                                \"displayName\": \"Query Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-send-jvm\": {\n+                            \"updatedatabasetable-quoted-column-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n-                                \"displayName\": \"Send JVM metrics\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables and/or forcing the record field names to match the column names exactly.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n-                                \"required\": true,\n+                                \"name\": \"updatedatabasetable-quoted-column-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-strategy\": {\n+                            \"updatedatabasetable-quoted-table-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send rollup metrics for the entire root process group\",\n-                                        \"displayName\": \"Root Process Group\",\n-                                        \"value\": \"Root Process Group\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Send metrics for each process group\",\n-                                        \"displayName\": \"All Process Groups\",\n-                                        \"value\": \"All Process Groups\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Send metrics for each component in the system, to include processors, connections, controller services, etc.\",\n-                                        \"displayName\": \"All Components\",\n-                                        \"value\": \"All Components\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"All Components\",\n-                                \"description\": \"The granularity on which to report metrics. Options include only the root process group, all process groups, or all components\",\n-                                \"displayName\": \"Metrics Reporting Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name and/or forcing the value of the Table Name property to match the target table name exactly.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-metrics-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"updatedatabasetable-record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Update Field Names\",\n+                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile. The Record Writer should use Inherit Schema to emulate the inferred schema behavior, i.e. an explicit schema need not be defined in the writer, and will be supplied by the same logic used to infer the schema from the column types. If Create Table Strategy is set 'Create If Not Exists', the Record Writer's output format must match the Record Reader's format in order for the data to be placed in the created table location. Note that this property is only used if 'Update Field Names' is set to true and the field names do not all match the column names exactly. If no update is needed for any field names (or 'Update Field Names' is false), the Record Writer is not used and instead the input FlowFile is routed to success or failure without modification.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-ssl-context\",\n-                                \"required\": false,\n+                                \"name\": \"updatedatabasetable-record-writer\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"metrics\",\n-                            \"prometheus\",\n-                            \"reporting\",\n-                            \"time series data\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.prometheus.PrometheusReportingTask\",\n-                        \"typeDescription\": \"Reports metrics in Prometheus format by creating a /metrics HTTP(S) endpoint which can be used for external monitoring of the application. The reporting task reports a set of metrics regarding the JVM (optional) and the NiFi instance. Note that if the underlying Jetty server (i.e. the Prometheus endpoint) cannot be started (for example if two PrometheusReportingTask instances are started on the same port), this may cause a delay in shutting down NiFi while it waits for the server resources to be cleaned up.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-shared-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dbcp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            },\n-                            {\n-                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"SENSITIVE.JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Database Connection URL\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database Connection URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Driver Class Name\": {\n-                                \"description\": \"Database driver class name\",\n-                                \"displayName\": \"Database Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database Driver Class Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"updatedatabasetable-schema-name\": {\n+                                \"description\": \"The name of the database schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty. Note that if the property is set and the database is case-sensitive, the schema name must match the database's schema name exactly.\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database User\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Total Connections\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n-                                \"displayName\": \"Max Total Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Max Total Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"updatedatabasetable-table-name\": {\n+                                \"description\": \"The name of the database table to update. If the table does not exist, then it will either be created or an error thrown, depending on the value of the Create Table property.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Validation-query\": {\n-                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Validation-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"database-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"database-driver-locations\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-max-conn-lifetime\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-max-idle-conns\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n-                                \"displayName\": \"Max Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-max-idle-conns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"30 mins\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-min-idle-conns\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-min-idle-conns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-soft-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n-                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-time-between-eviction-runs\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n-                                \"displayName\": \"Time Between Eviction Runs\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-time-between-eviction-runs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"updatedatabasetable-translate-field-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the corresponding column names for the table specified, for the purposes of determining whether the field name exists as a column in the target table. NOTE: If the target table does not exist and is to be created, this property is ignored and the field names will be used as-is. If false, the field names must match the column names exactly, or the column may not be found and instead an error my be reported that the column already exists.\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n+                                \"name\": \"updatedatabasetable-translate-field-names\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"updatedatabasetable-update-field-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"This property indicates whether to update the output schema such that the field names are set to the exact column names from the specified table. This should be used if the incoming record field names may not match the table's column names in terms of upper- and lower-case. For example, this property should be set to true if the output FlowFile is destined for Oracle e.g., which expects the field names to match the column names exactly. NOTE: The value of the 'Translate Field Names' property is ignored when updating field names; instead they are updated to match the column name as returned by the database.\",\n+                                \"displayName\": \"Update Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"updatedatabasetable-update-field-names\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n-                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n+                                \"description\": \"A FlowFile containing records routed to this relationship after the record has been successfully transmitted to the database.\",\n+                                \"name\": \"success\"\n+                            },\n                             {\n-                                \"description\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register DBCPService\",\n-                                \"value\": \"The DBCPService\"\n+                                \"description\": \"A FlowFile containing records routed to this relationship if the record could not be transmitted to the database.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n+                            \"alter\",\n                             \"database\",\n-                            \"dbcp\",\n                             \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n+                            \"metadata\",\n+                            \"table\",\n+                            \"update\"\n                         ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n-                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateDatabaseTable\",\n+                        \"typeDescription\": \"This processor uses a JDBC connection and incoming records to generate any database table changes needed to support the incoming records. It expects a 'flat' record layout, meaning none of the top-level record fields has nested fields that are intended to become columns themselves.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the target table name.\",\n+                                \"name\": \"output.table\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is written on the flow files routed to the 'success' and 'failure' relationships, and contains the path on the file system to the table (or partition location if the table is partitioned).\",\n+                                \"name\": \"output.path\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the number of records in the FlowFile, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"description\": \"Allows users to specify values to use to replace fields in the record that match the RecordPath.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A RecordPath.\",\n+                                \"value\": \"The value to use to replace fields in the record that match the RecordPath\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"hikaricp-connection-url\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-connection-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-driver-classname\": {\n-                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n-                                \"displayName\": \"Database Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-driver-classname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-driver-locations\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hikaricp-kerberos-user-service\",\n-                                \"required\": false,\n+                                \"name\": \"Record Reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"hikaricp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-max-conn-lifetime\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-max-total-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n-                                \"displayName\": \"Max Total Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-max-total-conns\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-max-wait-time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"Record Writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-max-wait-time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"hikaricp-min-idle-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n+                            \"Replacement Value Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.\",\n+                                        \"displayName\": \"Literal Value\",\n+                                        \"value\": \"literal-value\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.\",\n+                                        \"displayName\": \"Record Path Value\",\n+                                        \"value\": \"record-path-value\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"literal-value\",\n+                                \"description\": \"Specifies how to interpret the configured replacement values\",\n+                                \"displayName\": \"Replacement Value Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-min-idle-conns\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Replacement Value Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"hikaricp-password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"hikaricp-username\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-validation-query\": {\n-                                \"description\": \"Validation Query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. NOTE: Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-validation-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"hikari\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"update\"\n                         ],\n-                        \"type\": \"org.apache.nifi.dbcp.HikariCPConnectionPool\",\n-                        \"typeDescription\": \"Provides Database Connection Pooling Service based on HikariCP. Connections can be asked from pool and returned after usage.\",\n-                        \"version\": \"2.0.0-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n+                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property uses the CONCAT Record Path function to concatenate multiple values together, potentially using other string literal values.\\nFor example, to combine the `title`, `firstName` and `lastName` fields into a single field named `fullName`, we add a property with the name `/fullName` and a value of `CONCAT(/title, ' ', /firstName, ' ', /lastName)`\\n\",\n+                                \"description\": \"Combine multiple fields into a single field.\",\n+                                \"keywords\": [\n+                                    \"combine\",\n+                                    \"concatenate\",\n+                                    \"recordpath\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\n    The value of the property is the explicit value to set the field to. For example, we can set any field with a name of `txId`, regardless of its level in the data's hierarchy,     to `1111-1111` by adding a property with a name of `//txId` and a value of `1111-1111`\\n\",\n+                                \"description\": \"Change the value of a record field to an explicit value.\",\n+                                \"keywords\": [\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"replace\",\n+                                    \"transform\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\n    The value of the property is a RecordPath identifying the field to copy the value from.\\n    For example, we can copy the value of `/identifiers/all/imei` to the `identifier` field at the root level, by adding a property named     `/identifier` with a value of `/identifiers/all/imei`.\\n\",\n+                                \"description\": \"Copy the value of one record field to another record field.\",\n+                                \"keywords\": [\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"copy\",\n+                                    \"recordpath\",\n+                                    \"hierarchy\",\n+                                    \"transform\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property is an Expression Language expression that references the attribute of interest. We can, for example, insert a new field name `filename` into each record by adding a property named `/filename` with a value of `${filename}`\\n\",\n+                                \"description\": \"Enrich data by injecting the value of an attribute into each Record.\",\n+                                \"keywords\": [\n+                                    \"enrich\",\n+                                    \"attribute\",\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"replace\",\n+                                    \"insert\",\n+                                    \"transform\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\nThe value is an Expression Language expression that references the `field.value` variable. For example, to change the date/time format of a field named `txDate` from `year-month-day` format to `month/day/year` format, we add a property named `/txDate` with a value of `${field.value:toDate('yyyy-MM-dd'):format('MM/dd/yyyy')}`. We could also change the timezone of a timestamp field (and insert the timezone for clarity) by using a value of `${field.value:toDate('yyyy-MM-dd HH:mm:ss', 'UTC-0400'):format('yyyy-MM-dd HH:mm:ss Z', 'UTC')}`.\\n\",\n+                                \"description\": \"Change the format of a record field's value.\",\n+                                \"keywords\": [\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"replace\",\n+                                    \"insert\",\n+                                    \"transform\",\n+                                    \"format\",\n+                                    \"date/time\",\n+                                    \"timezone\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"Use the RenameRecordField Processor in order to change a field's name.\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n+                                \"name\": \"record.index\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"db-record-sink-catalog-name\": {\n-                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Catalog Name\",\n+                            \"validate-csv-delimiter\": {\n+                                \"defaultValue\": \",\",\n+                                \"description\": \"Character used as 'delimiter' in the incoming data. Example: ,\",\n+                                \"displayName\": \"Delimiter character\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-catalog-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-dcbp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-dcbp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"db-record-sink-query-timeout\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n-                                \"displayName\": \"Max Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"db-record-sink-query-timeout\",\n+                                \"name\": \"validate-csv-delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-quoted-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n-                                \"displayName\": \"Quote Column Identifiers\",\n+                            \"validate-csv-eol\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Symbols used as 'end of line' in the incoming data. Example: \\\\n\",\n+                                \"displayName\": \"End of line symbols\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-identifiers\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-eol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-quoted-table-identifiers\": {\n+                            \"validate-csv-header\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n-                                \"displayName\": \"Quote Table Identifiers\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"True if the incoming flow file contains a header to ignore, false otherwise.\",\n+                                \"displayName\": \"Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-table-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-header\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-schema-name\": {\n-                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"validate-csv-quote\": {\n+                                \"defaultValue\": \"\\\"\",\n+                                \"description\": \"Character used as 'quote' in the incoming data. Example: \\\"\",\n+                                \"displayName\": \"Quote character\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-quote\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-table-name\": {\n-                                \"description\": \"The name of the table that the statement should affect.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"validate-csv-schema\": {\n+                                \"description\": \"The schema to be used for validation. Is expected a comma-delimited string representing the cell processors to apply. The following cell processors are allowed in the schema definition: [ParseBigDecimal, ParseBool, ParseChar, ParseDate, ParseDouble, ParseInt, ParseLong, Optional, DMinMax, Equals, ForbidSubStr, LMinMax, NotNull, Null, RequireHashCode, RequireSubStr, Strlen, StrMinMax, StrNotNullOrEmpty, StrRegEx, Unique, UniqueHashCode, IsIncludedIn]. Note: cell processors cannot be nested except with Optional.\",\n+                                \"displayName\": \"Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-table-name\",\n+                                \"name\": \"validate-csv-schema\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-translate-field-names\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-translate-field-names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-unmatched-column-behavior\": {\n+                            \"validate-csv-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n-                                        \"displayName\": \"Warn on Unmatched Columns\",\n-                                        \"value\": \"Warn on Unmatched Columns\"\n+                                        \"description\": \"In case an error is found, the input CSV file will be split into two FlowFiles: one routed to the 'valid' relationship containing all the correct lines and one routed to the 'invalid' relationship containing all the incorrect lines. Take care if choosing this option while using Unique cell processors in schema definition:the first occurrence will be considered valid and the next ones as invalid.\",\n+                                        \"displayName\": \"Line by line validation\",\n+                                        \"value\": \"Line by line validation\"\n                                     },\n                                     {\n-                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n-                                        \"displayName\": \"Fail on Unmatched Columns\",\n-                                        \"value\": \"Fail on Unmatched Columns\"\n+                                        \"description\": \"As soon as an error is found in the CSV file, the validation will stop and the whole flow file will be routed to the 'invalid' relationship. This option offers best performances.\",\n+                                        \"displayName\": \"FlowFile validation\",\n+                                        \"value\": \"FlowFile validation\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Fail on Unmatched Columns\",\n-                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"defaultValue\": \"FlowFile validation\",\n+                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n+                                \"displayName\": \"Validation strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-unmatched-column-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-unmatched-field-behavior\": {\n+                            \"validate-csv-violations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail on Unmatched Fields\",\n-                                        \"value\": \"Fail on Unmatched Fields\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the validation.error.message attribute would include the list of all the violations for the first invalid line. Note that setting this property to true would slightly decrease the performances as all columns would be validated. If false, a line is invalid as soon as a column is found violating the specified constraint and only this violation for the first invalid line will be included in the validation.error.message attribute.\",\n+                                \"displayName\": \"Include all violations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-unmatched-field-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-violations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"db\",\n-                            \"jdbc\",\n-                            \"record\"\n+                            \"csv\",\n+                            \"schema\",\n+                            \"validation\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n-                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"app-config-file\": {\n-                                \"description\": \"Full path of an App config JSON file. See Additional Details for more information.\",\n-                                \"displayName\": \"App Config File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"app-config-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateCsv\",\n+                        \"typeDescription\": \"Validates the contents of FlowFiles against a user-specified CSV schema. Take a look at the additional documentation of this processor for some schema examples.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n+                                \"name\": \"count.valid.lines\"\n                             },\n-                            \"app-config-json\": {\n-                                \"description\": \"The raw JSON containing an App config. See Additional Details for more information.\",\n-                                \"displayName\": \"App Config JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"app-config-json\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                            {\n+                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n+                                \"name\": \"count.invalid.lines\"\n                             },\n-                            \"box-account-id\": {\n-                                \"description\": \"The ID of the Box account who owns the accessed resource. Same as 'User Id' under 'App Info' in the App 'General Settings'.\",\n-                                \"displayName\": \"Account ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"box-account-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"If line by line validation, total number of lines in the source data\",\n+                                \"name\": \"count.total.lines\"\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-box-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n+                                \"name\": \"validation.error.message\"\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"box\",\n-                            \"client\",\n-                            \"provider\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.box.controllerservices.JsonConfigBasedBoxClientService\",\n-                        \"typeDescription\": \"Provides Box client objects through which Box API calls can be used.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jetty-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cdc-mysql-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cdc-mysql-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -89651,794 +85688,1132 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n                                 \"requiredPermission\": \"reference remote resources\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n+                            \"JSON Schema\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PREFERRED\",\n-                                            \"VERIFY_IDENTITY\",\n-                                            \"REQUIRED\"\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SSL Mode\",\n-                                        \"propertyName\": \"SSL Mode\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"SSL Context Service supporting encrypted socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"A URL or file path to the JSON schema or the actual JSON schema content\",\n+                                \"displayName\": \"JSON Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"JSON Schema\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"JSON Schema Registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_NAME_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the JSON Schema Registry\",\n+                                \"displayName\": \"JSON Schema Registry\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JSON Schema Registry\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"SSL Mode\": {\n+                            \"JSON Schema Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Connect without TLS\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS when server support enabled, otherwise connect without TLS\",\n-                                        \"displayName\": \"PREFERRED\",\n-                                        \"value\": \"PREFERRED\"\n+                                        \"description\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled. Verify server hostname matches presented X.509 certificate names or fail when not matched\",\n-                                        \"displayName\": \"VERIFY_IDENTITY\",\n-                                        \"value\": \"VERIFY_IDENTITY\"\n+                                        \"description\": \"Draft Version 2019-09\",\n+                                        \"displayName\": \"Draft 2019-09\",\n+                                        \"value\": \"DRAFT_2019_09\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Draft Version 2020-12\",\n+                                        \"displayName\": \"Draft 2020-12\",\n+                                        \"value\": \"DRAFT_2020_12\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"description\": \"SSL Mode used when SSL Context Service configured supporting certificate verification options\",\n-                                \"displayName\": \"SSL Mode\",\n+                                \"defaultValue\": \"DRAFT_2020_12\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The JSON schema specification\",\n+                                \"displayName\": \"JSON Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Mode\",\n+                                \"name\": \"JSON Schema Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-db-name-pattern\": {\n-                                \"description\": \"A regular expression (regex) for matching databases (or schemas, depending on your RDBMS' terminology) against the list of CDC events. The regex must match the database name as it is stored in the RDBMS. If the property is not set, the database name will not be used to filter the CDC events. NOTE: DDL events, even if they affect different databases, are associated with the database used by the session to execute the DDL. This means if a connection is made to one database, but the DDL is issued against another, then the connected database will be the one matched against the specified pattern.\",\n-                                \"displayName\": \"Database/Schema Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-db-name-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-dist-map-cache-client\": {\n-                                \"description\": \"This is a legacy property that is no longer used to store table information, the processor will handle the table information (column names, types, etc.)\",\n-                                \"displayName\": \"Distributed Map Cache Client - unused\",\n+                            \"Schema Access Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured JSON Schema Registry Service.\",\n+                                        \"displayName\": \"Schema Name Property\",\n+                                        \"value\": \"SCHEMA_NAME_PROPERTY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A URL or file path to the JSON schema or the actual JSON schema is specified by the 'JSON Schema' Property. No matter how the JSON schema is specified, it must be a valid JSON schema\",\n+                                        \"displayName\": \"JSON Schema Property\",\n+                                        \"value\": \"SCHEMA_CONTENT_PROPERTY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SCHEMA_CONTENT_PROPERTY\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-dist-map-cache-client\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"capture-change-mysql-driver-class\": {\n-                                \"defaultValue\": \"com.mysql.jdbc.Driver\",\n-                                \"description\": \"The class name of the MySQL database driver class\",\n-                                \"displayName\": \"MySQL Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-driver-class\",\n+                                \"name\": \"Schema Access Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the MySQL driver JAR and its dependencies (if any). For example '/var/tmp/mysql-connector-java-5.1.38-bin.jar'\",\n-                                \"displayName\": \"MySQL Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-driver-locations\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-hosts\": {\n-                                \"description\": \"A list of hostname (and optional port) entries corresponding to nodes in a MySQL cluster. The entries should be comma separated using a colon (if the port is to be specified) such as host1:port,host2:port,....  For example mysql.myhost.com:3306. The port need not be specified, when omitted the default MySQL port value of 3306 will be used. This processor will attempt to connect to the hosts in the list in order. If one node goes down and failover is enabled for the cluster, then the processor will connect to the active node (assuming its node entry is specified in this property).\",\n-                                \"displayName\": \"MySQL Nodes\",\n+                            \"Schema Name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_NAME_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Schema Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n                             },\n-                            \"capture-change-mysql-include-begin-commit\": {\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Validating JSON requires reading FlowFile content into memory\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"JSON\",\n+                            \"schema\",\n+                            \"validation\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateJson\",\n+                        \"typeDescription\": \"Validates the contents of FlowFiles against a configurable JSON Schema. See json-schema.org for specification standards. This Processor does not support input containing multiple JSON objects, such as newline-delimited JSON. If the input FlowFile contains newline-delimited JSON, only the first line will be validated.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the flow file is routed to the invalid relationship , this attribute will contain the error message resulting from the validation failure.\",\n+                                \"name\": \"json.validation.errors\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"allow-extra-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to emit events corresponding to a BEGIN or COMMIT event in the binary log. Set to true if the BEGIN/COMMIT events are necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n-                                \"displayName\": \"Include Begin/Commit Events\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If the incoming data has fields that are not present in the schema, this property determines whether or not the Record is valid. If true, the Record is still valid. If false, the Record will be invalid due to the extra fields.\",\n+                                \"displayName\": \"Allow Extra Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-begin-commit\",\n+                                \"name\": \"allow-extra-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-include-ddl-events\": {\n+                            \"coerce-types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to emit events corresponding to Data Definition Language (DDL) events such as ALTER TABLE, TRUNCATE TABLE, e.g. in the binary log. Set to true if the DDL events are desired/necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n-                                \"displayName\": \"Include DDL Events\",\n+                                \"description\": \"If enabled, the processor will coerce every field to the type specified in the Reader's schema. If the value of a field cannot be coerced to the type, the field will be skipped (will not be read from the input data), thus will not appear in the output. If not enabled, then every field will appear in the output but their types may differ from what is specified in the schema. For details please see the Additional Details page of the processor's Help. This property controls how the data is read by the specified Record Reader.\",\n+                                \"displayName\": \"Force Types From Reader's Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-ddl-events\",\n+                                \"name\": \"coerce-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-init-binlog-filename\": {\n-                                \"description\": \"Specifies an initial binlog filename to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used along with Initial Binlog Position to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the environment properties.\",\n-                                \"displayName\": \"Initial Binlog Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-binlog-filename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-init-binlog-position\": {\n-                                \"description\": \"Specifies an initial offset into a binlog (specified by Initial Binlog Filename) to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is false, this property is ignored. This can be used along with Initial Binlog Filename to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the environment properties.\",\n-                                \"displayName\": \"Initial Binlog Position\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-binlog-position\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-init-gtid\": {\n-                                \"description\": \"Specifies an initial GTID to use if this processor's State does not have a current GTID. If a GTID is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the environment properties.\",\n-                                \"displayName\": \"Initial Binlog GTID\",\n+                            \"invalid-record-writer\": {\n+                                \"description\": \"If specified, this Controller Service will be used to write out any records that are invalid. If not specified, the writer specified by the \\\"Record Writer\\\" property will be used with the schema used to read the input records. This is useful, for example, when the configured Record Writer cannot write data that does not adhere to its schema (as is the case with Avro) or when it is desirable to keep invalid records in their original format while converting valid records to another format.\",\n+                                \"displayName\": \"Record Writer for Invalid Records\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-gtid\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"invalid-record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"capture-change-mysql-init-seq-id\": {\n-                                \"description\": \"Specifies an initial sequence identifier to use if this processor's State does not have a current sequence identifier. If a sequence identifier is present in the processor's State, this property is ignored. Sequence identifiers are monotonically increasing integers that record the order of flow files generated by the processor. They can be used with the EnforceOrder processor to guarantee ordered delivery of CDC events.\",\n-                                \"displayName\": \"Initial Sequence ID\",\n+                            \"maximum-validation-details-length\": {\n+                                \"defaultValue\": \"1024\",\n+                                \"description\": \"Specifies the maximum number of characters that validation details value can have. Any characters beyond the max will be truncated. This property is only used if 'Validation Details Attribute Name' is set\",\n+                                \"displayName\": \"Maximum Validation Details Length\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-seq-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"maximum-validation-details-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-max-wait-time\": {\n-                                \"defaultValue\": \"30 seconds\",\n-                                \"description\": \"The maximum amount of time allowed for a connection to be established, zero means there is effectively no limit.\",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-max-wait-time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"capture-change-mysql-name-pattern\": {\n-                                \"description\": \"A regular expression (regex) for matching CDC events affecting matching tables. The regex must match the table name as it is stored in the database. If the property is not set, no events will be filtered based on table name.\",\n-                                \"displayName\": \"Table Name Pattern\",\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records. Regardless of the Controller Service schema access configuration, the schema that is used to validate record is used to write the valid results.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-name-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"capture-change-mysql-password\": {\n-                                \"description\": \"Password to access the MySQL cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"capture-change-mysql-retrieve-all-records\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"The schema to validate the data against is determined by asking the configured Record Reader for its schema\",\n+                                        \"displayName\": \"Use Reader's Schema\",\n+                                        \"value\": \"reader-schema\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Name' Property and looking up the schema in the configured Schema Registry\",\n+                                        \"displayName\": \"Use Schema Name Property\",\n+                                        \"value\": \"schema-name-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Text' Property and parsing the schema as an Avro schema\",\n+                                        \"displayName\": \"Use Schema Text Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether to get all available CDC events, regardless of the current binlog filename and/or position. If binlog filename and position values are present in the processor's State, this property's value is ignored. This allows for 4 different configurations: 1) If binlog data is available in processor State, that is used to determine the start location and the value of Retrieve All Records is ignored. 2) If no binlog data is in processor State, then Retrieve All Records set to true means start at the beginning of the binlog history. 3) If no binlog data is in processor State and Initial Binlog Filename/Position are not set, then Retrieve All Records set to false means start at the end of the binlog history. 4) If no binlog data is in processor State and Initial Binlog Filename/Position are set, then Retrieve All Records set to false means start at the specified initial binlog file/position. To reset the behavior, clear the processor state (refer to the State Management section of the processor's documentation).\",\n-                                \"displayName\": \"Retrieve All Records\",\n+                                \"defaultValue\": \"reader-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-server-id\": {\n-                                \"description\": \"The client connecting to the MySQL replication group is actually a simplified replica (server), and the Server ID value must be unique across the whole replication group (i.e. different from any other Server ID being used by any primary or replica). Thus, each instance of CaptureChangeMySQL must have a Server ID unique across the replication group. If the Server ID is not specified, it defaults to 65535.\",\n-                                \"displayName\": \"Server ID\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-server-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-state-update-interval\": {\n-                                \"defaultValue\": \"0 seconds\",\n-                                \"description\": \"DEPRECATED. This property is no longer used and exists solely for backward compatibility purposes. Indicates how often to update the processor's state with binlog file/position values. A value of zero means that state will only be updated when the processor is stopped or shutdown. If at some point the processor state does not contain the desired binlog values, the last flow file emitted will contain the last observed values, and the processor can be returned to that state by using the Initial Binlog File, Initial Binlog Position, and Initial Sequence ID properties.\",\n-                                \"displayName\": \"State Update Interval\",\n+                            \"schema-registry\": {\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry. This is necessary only if the Schema Access Strategy is set to \\\"Use 'Schema Name' Property\\\".\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-state-update-interval\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-use-gtid\": {\n+                            \"strict-type-checking\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use Global Transaction ID (GTID) for binlog tracking. If set to true, processor's state of binlog file name and position is ignored. The main benefit of using GTID is to have much reliable failover than using binlog filename/position.\",\n-                                \"displayName\": \"Use Binlog GTID\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n+                                \"displayName\": \"Strict Type Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-use-gtid\",\n+                                \"name\": \"strict-type-checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-username\": {\n-                                \"description\": \"Username to access the MySQL cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"validation-details-attribute-name\": {\n+                                \"description\": \"If specified, when a validation error occurs, this attribute name will be used to leave the details. The number of characters will be limited by the property 'Maximum Validation Details Length'.\",\n+                                \"displayName\": \"Validation Details Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"validation-details-attribute-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"events-per-flowfile-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy causes at most the number of events specified in the 'Number of Events Per FlowFile' property to be written per FlowFile. If the processor is stopped before the specified number of events has been written (or the event queue becomes empty), the fewer number of events will still be written as a FlowFile before stopping.\",\n-                                        \"displayName\": \"Max Events Per FlowFile\",\n-                                        \"value\": \"MAX_EVENTS_PER_FLOWFILE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy causes each event from a transaction (from BEGIN to COMMIT) to be written to a FlowFile\",\n-                                        \"displayName\": \"One Transaction Per FlowFile\",\n-                                        \"value\": \"ONE_TRANSACTION_PER_FLOWFILE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MAX_EVENTS_PER_FLOWFILE\",\n-                                \"description\": \"Specifies the strategy to use when writing events to FlowFile(s), such as 'Max Events Per FlowFile'\",\n-                                \"displayName\": \"Event Processing Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"events-per-flowfile-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"number-of-events-per-flowfile\": {\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"MAX_EVENTS_PER_FLOWFILE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Event Processing Strategy\",\n-                                        \"propertyName\": \"events-per-flowfile-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how many events should be written to a single FlowFile. If the processor is stopped before the specified number of events has been written,the events will still be written as a FlowFile before stopping.\",\n-                                \"displayName\": \"Events Per FlowFile\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"number-of-events-per-flowfile\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Information such as a 'pointer' to the current CDC event in the database is stored by this processor, such that it can continue from the same location if restarted.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cdc\",\n-                            \"event\",\n-                            \"jdbc\",\n-                            \"mysql\",\n-                            \"sql\",\n-                            \"transaction\"\n+                            \"record\",\n+                            \"schema\",\n+                            \"validate\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.cdc.mysql.processors.CaptureChangeMySQL\",\n-                        \"typeDescription\": \"Retrieves Change Data Capture (CDC) events from a MySQL database. CDC Events include INSERT, UPDATE, DELETE operations. Events are output as either a group of a specified number of events (the default is 1 so each event becomes its own flow file) or grouped as a full transaction (BEGIN to COMMIT). All events are ordered by the time at which the operation occurred. NOTE: If the processor is stopped before the specified number of events have been written to a flow file, the partial flow file will be output in order to maintain the consistency of the event stream.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateRecord\",\n+                        \"typeDescription\": \"Validates the Records of an incoming FlowFile against a given schema. All records that adhere to the schema are routed to the \\\"valid\\\" relationship while records that do not adhere to the schema are routed to the \\\"invalid\\\" relationship. It is therefore possible for a single incoming FlowFile to be split into two individual FlowFiles if some records are valid according to the schema and others are not. Any FlowFile that is routed to the \\\"invalid\\\" relationship will emit a ROUTE Provenance Event with the Details field populated to explain why records were invalid. In addition, to gain further explanation of why records were invalid, DEBUG-level logging can be enabled for the \\\"org.apache.nifi.processors.standard.ValidateRecord\\\" logger.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n-                                \"name\": \"cdc.sequence.id\"\n-                            },\n-                            {\n-                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n-                                \"name\": \"cdc.event.type\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The processor outputs flow file content in JSON format, and sets the mime.type attribute to application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n+                                \"explanation\": \"Schema configuration can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Schema File\": {\n+                                \"description\": \"The file path or URL to the XSD Schema file that is to be used for validation. If this property is blank, only XML syntax/structure will be validated.\",\n+                                \"displayName\": \"Schema File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Keytab\",\n-                                \"required\": true,\n+                                \"name\": \"Schema File\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"URL\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"XML Source Attribute\": {\n+                                \"description\": \"The name of the attribute containing XML to be validated. If this property is blank, the FlowFile content will be validated.\",\n+                                \"displayName\": \"XML Source Attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": true,\n+                                \"name\": \"XML Source Attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"FlowFiles that are successfully validated against the schema, if provided, or verified to be well-formed XML are routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema or contain invalid XML are routed to this relationship\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n-                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Keytab\",\n-                            \"Principal\",\n-                            \"Security\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.kerberos.KeytabCredentialsService\",\n-                        \"typeDescription\": \"Provides a mechanism for specifying a Keytab and a Principal that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-github-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-gcp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n-                                \"requiredPermission\": \"access environment credentials\"\n+                                \"description\": \"While this processor supports processing XML within attributes, it is strongly discouraged to hold large amounts of data in attributes. In general, attribute values should be as small as possible and hold no more than a couple hundred characters.\",\n+                                \"resource\": \"MEMORY\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"application-default-credentials\": {\n+                        \"tags\": [\n+                            \"schema\",\n+                            \"validation\",\n+                            \"xml\",\n+                            \"xsd\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateXml\",\n+                        \"typeDescription\": \"Validates XML contained in a FlowFile. By default, the XML is contained in the FlowFile content. If the 'XML Source Attribute' property is set, the XML to be validated is contained in the specified attribute. It is not recommended to use attributes to hold large XML documents; doing so could adversely affect system performance. Full schema validation is performed if the processor is configured with the XSD schema details. Otherwise, the only validation performed is to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n+                                \"name\": \"validatexml.invalid.error\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"attribute-copy-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"When cached attributes are copied onto released FlowFiles, they replace any matching attributes.\",\n+                                        \"displayName\": \"Replace if present\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Google Application Default Credentials, which checks the GOOGLE_APPLICATION_CREDENTIALS environment variable for a filepath to a service account JSON key, the config generated by the gcloud sdk, the App Engine service account, and the Compute Engine service account.\",\n-                                \"displayName\": \"Use Application Default Credentials\",\n+                                \"defaultValue\": \"keeporiginal\",\n+                                \"description\": \"Specifies how to handle attributes copied from FlowFiles entering the Notify processor\",\n+                                \"displayName\": \"Attribute Copy Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"application-default-credentials\",\n+                                \"name\": \"attribute-copy-mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to check for release signals from a corresponding Notify processor\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"expiration-duration\": {\n+                                \"defaultValue\": \"10 min\",\n+                                \"description\": \"Indicates the duration after which waiting FlowFiles will be routed to the 'expired' relationship\",\n+                                \"displayName\": \"Expiration Duration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"expiration-duration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"releasable-flowfile-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"A value, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the releasable FlowFile count. This specifies how many FlowFiles can be released when a target count reaches target signal count. Zero (0) has a special meaning, any number of FlowFiles can be released as long as signal count matches target.\",\n+                                \"displayName\": \"Releasable FlowFile Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"releasable-flowfile-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"release-signal-id\": {\n+                                \"description\": \"A value that specifies the key to a specific release signal cache. To decide whether the FlowFile that is being processed by the Wait processor should be sent to the 'success' or the 'wait' relationship, the processor checks the signals in the cache specified by this key.\",\n+                                \"displayName\": \"Release Signal Identifier\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"release-signal-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"signal-counter-name\": {\n+                                \"description\": \"Within the cache (specified by the Release Signal Identifier) the signals may belong to different counters. If this property is specified, the processor checks the number of signals in the cache that belong to this particular counter. If not specified, the processor checks the total number of signals in the cache.\",\n+                                \"displayName\": \"Signal Counter Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"signal-counter-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compute-engine-credentials\": {\n+                            \"target-signal-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The number of signals that need to be in the cache (specified by the Release Signal Identifier) in order for the FlowFile processed by the Wait processor to be sent to the \\u2018success\\u2019 relationship. If the number of signals in the cache has reached this number, the FlowFile is routed to the 'success' relationship and the number of signals in the cache is decreased by this value. If Signal Counter Name is specified, this processor checks a particular counter, otherwise checks against the total number of signals in the cache.\",\n+                                \"displayName\": \"Target Signal Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"target-signal-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"wait-buffer-count\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specify the maximum number of incoming FlowFiles that can be buffered to check whether it can move forward. The more buffer can provide the better performance, as it reduces the number of interactions with cache service by grouping FlowFiles by signal identifier. Only a signal identifier can be processed at a processor execution.\",\n+                                \"displayName\": \"Wait Buffer Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"wait-buffer-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"wait-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Transfer a FlowFile to the 'wait' relationship when whose release signal has not been notified yet. This mode allows other incoming FlowFiles to be enqueued by moving FlowFiles into the wait relationship. It is recommended to set a prioritizer (for instance First In First Out) on the 'wait' relationship.\",\n+                                        \"displayName\": \"Transfer to wait relationship\",\n+                                        \"value\": \"wait\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Transfer a FlowFile to the upstream connection where it comes from when whose release signal has not been notified yet. This mode helps keeping upstream connection being full so that the upstream source processor will not be scheduled while back-pressure is active and limit incoming FlowFiles. \",\n+                                        \"displayName\": \"Keep in the upstream connection\",\n+                                        \"value\": \"keep\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"wait\",\n+                                \"description\": \"Specifies how to handle a FlowFile waiting for a notify signal\",\n+                                \"displayName\": \"Wait Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"wait-mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"wait-penalty-duration\": {\n+                                \"description\": \"If configured, after a signal identifier got processed but did not meet the release criteria, the signal identifier is penalized and FlowFiles having the signal identifier will not be processed again for the specified period of time, so that the signal identifier will not block others to be processed. This can be useful for use cases where a Wait processor is expected to process multiple signal identifiers, and each signal identifier has multiple FlowFiles, and also the order of releasing FlowFiles is important within a signal identifier. The FlowFile order can be configured with Prioritizers. IMPORTANT: There is a limitation of number of queued signals can be processed, and Wait processor may not be able to check all queued signal ids. See additional details for the best practice.\",\n+                                \"displayName\": \"Wait Penalty Duration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"wait-penalty-duration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.Notify\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile that has exceeded the configured Expiration Duration will be routed to this relationship\",\n+                                \"name\": \"expired\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with a matching release signal in the cache will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with no matching release signal in the cache will be routed to this relationship\",\n+                                \"name\": \"wait\"\n+                            },\n+                            {\n+                                \"description\": \"When the cache cannot be reached, or if the Release Signal Identifier evaluates to null or empty, FlowFiles will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"hold\",\n+                            \"map\",\n+                            \"release\",\n+                            \"signal\",\n+                            \"wait\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.Wait\",\n+                        \"typeDescription\": \"Routes incoming FlowFiles to the 'wait' relationship until a matching release signal is stored in the distributed cache from a corresponding Notify processor. When a matching release signal is identified, a waiting FlowFile is routed to the 'success' relationship. The release signal entry is then removed from the cache. The attributes of the FlowFile that produced the release signal are copied to the waiting FlowFile if the Attribute Cache Regex property of the corresponding Notify processor is set properly. If there are multiple release signals in the cache identified by the Release Signal Identifier, and the Notify processor is configured to copy the FlowFile attributes to the cache, then the FlowFile passing the Wait processor receives the union of the attributes of the FlowFiles that produced the release signals in the cache (identified by Release Signal Identifier). Waiting FlowFiles will be routed to 'expired' if they exceed the Expiration Duration. If you need to wait for more than one signal, specify the desired number of signals via the 'Target Signal Count' property. This is particularly useful with processors that split a source FlowFile into multiple fragments, such as SplitText. In order to wait for all fragments to be processed, connect the 'original' relationship to a Wait processor, and the 'splits' relationship to a corresponding Notify processor. Configure the Notify and Wait processors to use the '${fragment.identifier}' as the value of 'Release Signal Identifier', and specify '${fragment.count}' as the value of 'Target Signal Count' in the Wait processor.It is recommended to use a prioritizer (for instance First In First Out) when using the 'wait' relationship as a loop.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles will have an attribute 'wait.start.timestamp', which sets the initial epoch timestamp when the file first entered this processor.  This is used to determine the expiration time of the FlowFile.  This attribute is not written when the FlowFile is transferred to failure, expired or success\",\n+                                \"name\": \"wait.start.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The name of each counter for which at least one signal has been present in the cache since the last time the cache was empty gets copied to the current FlowFile as an attribute.\",\n+                                \"name\": \"wait.counter.<counterName>\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Show Deltas\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Google Compute Engine Credentials of the Compute Engine VM Instance which NiFi is running on.\",\n-                                \"displayName\": \"Use Compute Engine Credentials\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not to show the difference in values between the current status and the previous status\",\n+                                \"displayName\": \"Show Deltas\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compute-engine-credentials\",\n-                                \"required\": false,\n+                                \"name\": \"Show Deltas\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"reporting-granularity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n+                                        \"displayName\": \"Five Minutes\",\n+                                        \"value\": \"five-minutes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n+                                        \"displayName\": \"One Second\",\n+                                        \"value\": \"one-second\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"five-minutes\",\n+                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n+                                \"displayName\": \"Reporting Granularity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"reporting-granularity\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"service-account-json\": {\n-                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n-                                \"displayName\": \"Service Account JSON\",\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"log\",\n+                            \"stats\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.controller.ControllerStatusReportingTask\",\n+                        \"typeDescription\": \"Logs the 5-minute stats that are shown in the NiFi Summary Page for Processors and Connections, as well optionally logging the deltas between the previous iteration and the current iteration. Processors' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Processors logger, while Connections' stats are logged using the org.apache.nifi.controller.ControllerStatusReportingTask.Connections logger. These can be configured in the NiFi logging configuration to log to different files, if desired.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Directory Display Name\": {\n+                                \"defaultValue\": \"Un-Named\",\n+                                \"description\": \"The name to display for the directory in alerts.\",\n+                                \"displayName\": \"Directory Display Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"service-account-json\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Directory Display Name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-account-json-file\": {\n-                                \"description\": \"Path to a file containing a Service Account key file in JSON format.\",\n-                                \"displayName\": \"Service Account JSON File\",\n+                            \"Directory Location\": {\n+                                \"description\": \"The directory path of the partition to be monitored.\",\n+                                \"displayName\": \"Directory Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-account-json-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Directory Location\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Threshold\": {\n+                                \"defaultValue\": \"80%\",\n+                                \"description\": \"The threshold at which a bulletin will be generated to indicate that the disk usage of the partition on which the directory found is of concern\",\n+                                \"displayName\": \"Threshold\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Threshold\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"credentials\",\n-                            \"gcp\",\n-                            \"provider\"\n+                            \"disk\",\n+                            \"monitoring\",\n+                            \"repo\",\n+                            \"storage\",\n+                            \"warning\"\n                         ],\n-                        \"type\": \"org.apache.nifi.processors.gcp.credentials.service.GCPCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Google Cloud Platform processors. Uses Application Default credentials without configuration. Application Default credentials support environmental variable (GOOGLE_APPLICATION_CREDENTIALS) pointing to a credential file, the config generated by `gcloud auth application-default login`, AppEngine/Compute Engine service accounts, etc.\",\n+                        \"type\": \"org.apache.nifi.controller.MonitorDiskUsage\",\n+                        \"typeDescription\": \"Checks the amount of storage space available for the specified directory and warns (via a log message and a System-Level Bulletin) if the partition on which it lives exceeds some configurable threshold of storage space\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Memory Pool\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"G1 Eden Space\",\n+                                        \"value\": \"G1 Eden Space\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"G1 Old Gen\",\n+                                        \"value\": \"G1 Old Gen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"G1 Survivor Space\",\n+                                        \"value\": \"G1 Survivor Space\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"G1 Old Gen\",\n+                                \"description\": \"The name of the JVM Memory Pool to monitor. The allowed values for Memory Pools are platform and JVM dependent and may vary for different versions of Java and from published documentation. This reporting task will become invalidated if configured to use a Memory Pool that is not available on the currently running host platform and JVM\",\n+                                \"displayName\": \"Memory Pool\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Memory Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Name\",\n+                            \"Reporting Interval\": {\n+                                \"description\": \"Indicates how often this reporting task should report bulletins while the memory utilization exceeds the configured threshold\",\n+                                \"displayName\": \"Reporting Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Reporting Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Usage Threshold\": {\n+                                \"defaultValue\": \"65%\",\n+                                \"description\": \"Indicates the threshold at which warnings should be generated. This can be a percentage or a Data Size\",\n+                                \"displayName\": \"Usage Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Usage Threshold\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"gcs\",\n-                            \"resource\"\n+                            \"garbage collection\",\n+                            \"gc\",\n+                            \"heap\",\n+                            \"jvm\",\n+                            \"memory\",\n+                            \"monitor\",\n+                            \"warning\"\n                         ],\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.GCSFileResourceService\",\n-                        \"typeDescription\": \"Provides a Google Compute Storage (GCS) file resource for other components.\",\n+                        \"type\": \"org.apache.nifi.controller.MonitorMemory\",\n+                        \"typeDescription\": \"Checks the amount of Java Heap available in the JVM for a particular JVM Memory Pool. If the amount of space used exceeds some configurable threshold, will warn (via a log message and System-Level Bulletin) that the memory pool is exceeding this threshold.\",\n                         \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The fully-qualified name of the host on which Ganglia is running\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8649\",\n+                                \"description\": \"The Port on which Ganglia is listening for incoming connections\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression matching on the 'group-name' label value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' label value that matches this Regex will not be fetched.\",\n-                                \"displayName\": \"Group Name Pattern\",\n+                            \"Send JVM Metrics\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n+                                \"displayName\": \"Send JVM Metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"group-name-pattern\",\n+                                \"name\": \"Send JVM Metrics\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"manager\",\n-                            \"secret\"\n+                            \"ganglia\",\n+                            \"stats\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parameter.gcp.GcpSecretManagerParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from GCP Secret Manager.  Each secret becomes a Parameter, which can be mapped to a Parameter Group by adding a GCP label named 'group-name'.\",\n+                        \"type\": \"org.apache.nifi.reporting.ganglia.StandardGangliaReporter\",\n+                        \"typeDescription\": \"Reports metrics to Ganglia so that Ganglia can be used for external monitoring of the application. Metrics reported include JVM Metrics (optional); the following 5-minute NiFi statistics: FlowFiles Received, Bytes Received, FlowFiles Sent, Bytes Sent, Bytes Read, Bytes Written, Total Task Duration; and the current values for FlowFiles Queued, Bytes Queued, and number of Active Threads.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n-                ],\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hl7-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90451,204 +86826,459 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Character Encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"bigquery-api-endpoint\": {\n-                                \"defaultValue\": \"bigquerystorage.googleapis.com:443\",\n-                                \"description\": \"Can be used to override the default BigQuery endpoint. Default is bigquerystorage.googleapis.com:443. Format must be hostname:port.\",\n-                                \"displayName\": \"BigQuery API Endpoint\",\n+                            \"hl7-input-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"autodetect\",\n+                                        \"value\": \"autodetect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.2\",\n+                                        \"value\": \"2.2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.3\",\n+                                        \"value\": \"2.3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.3.1\",\n+                                        \"value\": \"2.3.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.4\",\n+                                        \"value\": \"2.4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.5\",\n+                                        \"value\": \"2.5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.5.1\",\n+                                        \"value\": \"2.5.1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2.6\",\n+                                        \"value\": \"2.6\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"autodetect\",\n+                                \"description\": \"The HL7 version to use for parsing and validation\",\n+                                \"displayName\": \"HL7 Input Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bigquery-api-endpoint\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hl7-input-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.append.record.count\": {\n-                                \"defaultValue\": \"20\",\n-                                \"description\": \"The number of records to be appended to the write stream at once. Applicable for both batch and stream types\",\n-                                \"displayName\": \"Append Record Count\",\n+                            \"parse-segment-fields\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to parse HL7 segment fields into attributes\",\n+                                \"displayName\": \"Parse Segment Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.append.record.count\",\n+                                \"name\": \"parse-segment-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.dataset\": {\n-                                \"defaultValue\": \"${bq.dataset}\",\n-                                \"description\": \"BigQuery dataset name (Note - The dataset must exist in GCP)\",\n-                                \"displayName\": \"Dataset\",\n+                            \"skip-validation\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to validate HL7 message values\",\n+                                \"displayName\": \"Skip Validation\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"skip-validation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.record.reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data.\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"use-segment-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not to use HL7 segment names in attributes\",\n+                                \"displayName\": \"Use Segment Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.record.reader\",\n+                                \"name\": \"use-segment-names\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it is properly parsed as HL7 and its attributes extracted\",\n+                                \"name\": \"success\"\n                             },\n-                            \"bq.skip.invalid.rows\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Sets whether to insert all valid rows of a request, even if invalid rows exist. If not set the entire insert request will fail if it contains an invalid row.\",\n-                                \"displayName\": \"Skip Invalid Rows\",\n+                            {\n+                                \"description\": \"A FlowFile is routed to this relationship if it cannot be mapped to FlowFile Attributes. This would happen if the FlowFile does not contain valid HL7 data\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"HL7\",\n+                            \"attributes\",\n+                            \"extract\",\n+                            \"health level 7\",\n+                            \"healthcare\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.hl7.ExtractHL7Attributes\",\n+                        \"typeDescription\": \"Extracts information from an HL7 (Health Level 7) formatted FlowFile and adds the information as FlowFile Attributes. The attributes are named as <Segment Name> <dot> <Field Index>. If the segment is repeating, the naming will be <Segment Name> <underscore> <Segment Index> <dot> <Field Index>. For example, we may have an attribute named \\\"MHS.12\\\" with a value of \\\"2.1\\\" and an attribute named \\\"OBX_11.3\\\" with a value of \\\"93000^CPT4\\\".\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If a FlowFile matches the query, it will be routed to a relationship with the name of the property\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Name of a Relationship\",\n+                                \"value\": \"An HL7 Query Language query\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Character Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Encoding that is used to encode the HL7 data\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"bq.skip.invalid.rows\",\n+                                \"name\": \"Character Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that cannot be parsed as HL7 will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\n+                            {\n+                                \"description\": \"The original FlowFile that comes into this processor will be routed to this relationship, unless it is routed to 'failure'\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"HL7\",\n+                            \"Health Level 7\",\n+                            \"healthcare\",\n+                            \"route\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.hl7.RouteHL7\",\n+                        \"typeDescription\": \"Routes incoming HL7 data according to user-defined queries. To add a query, add a new property to the processor. The name of the property will become a new relationship for the processor, and the value is an HL7 Query Language query. If a FlowFile matches the query, a copy of the FlowFile will be routed to the associated relationship.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the relationship to which the FlowFile was routed\",\n+                                \"name\": \"RouteHL7.Route\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leaves the file as-is.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Moves the file to the specified directory on the remote system. This option cannot be used when DFS is enabled on 'SMB Client Provider Service'.\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"MOVE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the file from the remote system.\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"DELETE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been processed. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.transfer.type\": {\n+                            \"Create Destination Directory\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use streaming record handling strategy\",\n-                                        \"displayName\": \"STREAM\",\n-                                        \"value\": \"STREAM\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Use batching record handling strategy\",\n-                                        \"displayName\": \"BATCH\",\n-                                        \"value\": \"BATCH\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"STREAM\",\n-                                \"description\": \"Defines the preferred transfer type streaming or batching\",\n-                                \"displayName\": \"Transfer Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"MOVE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Completion Strategy\",\n+                                        \"propertyName\": \"Completion Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Destination Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bq.transfer.type\",\n+                                \"name\": \"Create Destination Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Destination Directory\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"MOVE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Completion Strategy\",\n+                                        \"propertyName\": \"Completion Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been processed.\",\n+                                \"displayName\": \"Destination Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Destination Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"remote-file\": {\n+                                \"defaultValue\": \"${path}/${filename}\",\n+                                \"description\": \"The full path of the file to be retrieved from the remote server. Expression language is supported.\",\n+                                \"displayName\": \"Remote File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"remote-file\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"smb-client-provider-service\": {\n+                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n+                                \"displayName\": \"SMB Client Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"smb-client-provider-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-smb-client-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched file.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"A FlowFile will be routed here when failed to fetch its content.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bigquery\",\n-                            \"bq\",\n-                            \"google\",\n-                            \"google cloud\"\n+                            \"cifs\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"samba\",\n+                            \"smb\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to a Google BigQuery table. The processor is record based so the schema that is used is driven by the RecordReader. Attributes that are not matched to the target schema are skipped. Exactly once delivery semantics are achieved via stream offsets.\",\n+                        \"type\": \"org.apache.nifi.processors.smb.FetchSmb\",\n+                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\n+                                \"description\": \"The error code returned by SMB when the fetch of a file fails.\",\n+                                \"name\": \"error.code\"\n+                            },\n+                            {\n+                                \"description\": \"The error message returned by SMB when the fetch of a file fails.\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90657,335 +87287,383 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Folder ID\\\" property should be set to the ID of the Google Drive folder that files reside in.     See processor documentation / additional details for more information on how to determine a Google Drive folder's ID.\\n    If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GOOGLE_DRIVE_FOLDER_ID}`.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the folder.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGoogleDrive.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"File ID\\\" = \\\"${drive.id}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve all files in a Google Drive folder\",\n-                                \"keywords\": [\n-                                    \"google\",\n-                                    \"drive\",\n-                                    \"google cloud\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Google Doc Export Type\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of files to pull in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2].\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Domain\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"File Filter\": {\n+                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n+                                \"displayName\": \"File Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The network host to which files should be written.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Plain Text\",\n-                                        \"value\": \"text/plain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Microsoft Word\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument\",\n-                                        \"value\": \"application/vnd.oasis.opendocument.text\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Rich Text\",\n-                                        \"value\": \"application/rtf\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Web Page (HTML)\",\n-                                        \"value\": \"application/zip\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EPUB\",\n-                                        \"value\": \"application/epub+zip\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Documents cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Document, this property specifies the MIME Type to export the document to.\",\n-                                \"displayName\": \"Google Doc Export Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Doc Export Type\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Drawing Export Type\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PNG\",\n-                                        \"value\": \"image/png\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n+                                \"displayName\": \"Keep Source File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keep Source File\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Path Filter\": {\n+                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Path Filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Polling Interval\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n+                                \"displayName\": \"Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Recurse Subdirectories\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JPEG\",\n-                                        \"value\": \"image/jpeg\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SVG\",\n-                                        \"value\": \"image/svg+xml\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Drawings cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Drawing, this property specifies the MIME Type to export the drawing to.\",\n-                                \"displayName\": \"Google Drawing Export Type\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Drawing Export Type\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Presentation Export Type\": {\n+                            \"Share\": {\n+                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n+                                \"displayName\": \"Share\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Share\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Share Access Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Microsoft PowerPoint\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Plain Text\",\n-                                        \"value\": \"text/plain\"\n+                                        \"displayName\": \"read, delete\",\n+                                        \"value\": \"read, delete\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument Presentation\",\n-                                        \"value\": \"application/vnd.oasis.opendocument.presentation\"\n-                                    },\n+                                        \"displayName\": \"read, write, delete\",\n+                                        \"value\": \"read, write, delete\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Indicates which shared access are granted on the file during the read. None is the most restrictive, but the safest setting to prevent corruption.\",\n+                                \"displayName\": \"Share Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Share Access Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dfs\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PNG (first slide only)\",\n-                                        \"value\": \"image/png\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JPEG (first slide only)\",\n-                                        \"value\": \"image/jpeg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Scalable Vector Graphics. Only the first slide will be exported.\",\n-                                        \"displayName\": \"SVG (first slide only)\",\n-                                        \"value\": \"image/svg+xml\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Presentations cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Presentation, this property specifies the MIME Type to export the presentation to.\",\n-                                \"displayName\": \"Google Presentation Export Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n+                                \"displayName\": \"Enable DFS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Presentation Export Type\",\n+                                \"name\": \"enable-dfs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Spreadsheet Export Type\": {\n+                            \"smb-dialect\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Comma-separated values. Only the first sheet will be exported.\",\n-                                        \"displayName\": \"CSV (first sheet only)\",\n-                                        \"value\": \"text/csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n                                     },\n                                     {\n-                                        \"description\": \"Tab-separate values. Only the first sheet will be exported.\",\n-                                        \"displayName\": \"TSV (first sheet only)\",\n-                                        \"value\": \"text/tab-separated-values\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Web Page (HTML)\",\n-                                        \"value\": \"text/html\"\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument Spreadsheet\",\n-                                        \"value\": \"application/x-vnd.oasis.opendocument.spreadsheet\"\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"text/csv\",\n-                                \"description\": \"Google Spreadsheets cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Spreadsheet, this property specifies the MIME Type to export the spreadsheet to.\",\n-                                \"displayName\": \"Google Spreadsheet Export Type\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Spreadsheet Export Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"drive-file-id\": {\n-                                \"defaultValue\": \"${drive.id}\",\n-                                \"description\": \"The Drive ID of the File to fetch. Please see Additional Details for information on how to obtain the Drive ID.\",\n-                                \"displayName\": \"File ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"drive-file-id\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"use-encryption\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"use-encryption\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"All files are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"fetch\",\n-                            \"google\",\n-                            \"storage\"\n+                            \"samba, smb, cifs, files, get\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                        \"typeDescription\": \"Fetches files from a Google Drive Folder. Designed to be used in tandem with ListGoogleDrive. Please see Additional Details to set up access to Google Drive.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n+                                \"description\": \"The filename is set to the name of the file on the network share\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n+                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n+                                \"name\": \"file.creationTime\"\n                             },\n                             {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n+                                \"name\": \"file.lastModifiedTime\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Google Drive\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Google Drive\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The full path from where a file was picked up. This includes the hostname and the share name\",\n+                                \"name\": \"absolute.path\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90998,56 +87676,48 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n+                            \"directory\": {\n+                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n+                                \"displayName\": \"Input Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n                                         \"displayName\": \"Tracking Time Window\",\n                                         \"value\": \"window\"\n                                     },\n                                     {\n                                         \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n                                         \"displayName\": \"All Available\",\n                                         \"value\": \"all\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-state-cache\",\n                                 \"required\": false,\n@@ -91057,117 +87727,101 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n                             \"et-time-window\": {\n                                 \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"folder-id\": {\n-                                \"description\": \"The ID of the folder from which to pull list of files. Please see Additional Details to set up access to Google Drive and obtain Folder ID. WARNING: Unauthorized access to the folder is treated as if the folder was empty. This results in the processor not creating outgoing FlowFiles. No additional error message is provided.\",\n-                                \"displayName\": \"Folder ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"file-name-suffix-filter\": {\n+                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n+                                \"displayName\": \"File Name Suffix Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"file-name-suffix-filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n                             \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n                                         \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n                                         \"displayName\": \"Tracking Entities\",\n                                         \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n-                                        \"displayName\": \"Time Window\",\n-                                        \"value\": \"time-window\"\n-                                    },\n-                                    {\n                                         \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n                                         \"displayName\": \"No Tracking\",\n                                         \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"timestamps\",\n                                 \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n                                 \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                            \"max-file-age\": {\n+                                \"description\": \"Any file older than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-file-age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-file-size\": {\n+                                \"description\": \"Any file larger than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-file-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"min-file-age\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n                                 \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"min-file-age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"min-file-size\": {\n+                                \"description\": \"Any file smaller than the given value will be omitted.\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"min-file-size\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n                             \"record-writer\": {\n                                 \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n@@ -91177,45 +87831,72 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"recursive-search\": {\n+                            \"smb-client-provider-service\": {\n+                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n+                                \"displayName\": \"SMB Client Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smb-client-provider-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When 'true', will include list of files from concrete sub-folders (ignores shortcuts). Otherwise, will return only files that have the defined 'Folder ID' as their parent directly. WARNING: The listing may fail if there are too many sub-folders (500+).\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"All FlowFiles that are received are routed to success\",\n@@ -91227,51 +87908,70 @@\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"storage\"\n+                            \"list\",\n+                            \"samba, smb, cifs, files\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n-                        \"typeDescription\": \"Performs a listing of concrete files (shortcuts are ignored) in a Google Drive folder. If the 'Record Writer' property is set, a single Output FlowFile is created, and each file in the listing is written as a single record to the output file. Otherwise, for each file in the listing, an individual FlowFile is created, the metadata being written as FlowFile attributes. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Please see Additional Details to set up access to Google Drive.\",\n+                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n+                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The short name of the file that was read from filesystem.\",\n+                                \"name\": \"shortName\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n+                                \"description\": \"The SMB URL of the share.\",\n+                                \"name\": \"serviceLocation\"\n                             },\n                             {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"creationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"changeTime\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file in bytes.\",\n+                                \"name\": \"size\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes allocated for the file on the server.\",\n+                                \"name\": \"allocationSize\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -91284,562 +87984,769 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"chunked-upload-size\": {\n-                                \"defaultValue\": \"10 MB\",\n-                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. Minimum allowed chunk size is 256 KB, maximum allowed chunk size is 1 GB.\",\n-                                \"displayName\": \"Chunked Upload Size\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to put in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Conflict Resolution Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"replace\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Missing Directories\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n+                                \"displayName\": \"Create Missing Directories\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Create Missing Directories\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"100 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n+                            \"Domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n+                                \"name\": \"Domain\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"Hostname\": {\n+                                \"description\": \"The network host to which files should be written.\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password used for authentication. Required if Username is set.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Share\": {\n+                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n+                                \"displayName\": \"Share\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Share\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Share Access Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, delete\",\n+                                        \"value\": \"read, delete\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, write, delete\",\n+                                        \"value\": \"read, write, delete\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Google Drive folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n+                                \"displayName\": \"Share Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"Share Access Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n-                                \"displayName\": \"Filename\",\n+                            \"Temporary Suffix\": {\n+                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n+                                \"displayName\": \"Temporary Suffix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Temporary Suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"enable-dfs\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n+                                \"displayName\": \"Enable DFS\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"enable-dfs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"folder-id\": {\n-                                \"description\": \"The ID of the shared folder. Please see Additional Details to set up access to Google Drive and obtain Folder ID.\",\n-                                \"displayName\": \"Folder ID\",\n+                            \"smb-dialect\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"use-encryption\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"use-encryption\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Google Drive object.\",\n+                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n                                 \"name\": \"filename\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n+                                \"description\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to Google Drive for some reason are transferred to this relationship.\",\n+                                \"description\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"samba, smb, cifs, files, put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as a file in Google Drive.\",\n+                        \"type\": \"org.apache.nifi.processors.smb.PutSmbFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The error code returned by Google Drive\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by Google Drive\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n-                    },\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Request Header to add\",\n+                                \"value\": \"The value of the Header\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"api-key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"API_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n+                                    }\n+                                ],\n+                                \"description\": \"Encoded API key.\",\n+                                \"displayName\": \"API Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"api-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"api-key-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"API_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n+                                    }\n+                                ],\n+                                \"description\": \"Unique identifier of the API key.\",\n+                                \"displayName\": \"API Key ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"api-key-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"authorization-scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"No authorization scheme.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Mutual TLS with PKI certificate authorization scheme.\",\n+                                        \"displayName\": \"PKI\",\n+                                        \"value\": \"PKI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Basic authorization scheme.\",\n+                                        \"displayName\": \"Basic\",\n+                                        \"value\": \"BASIC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"API key authorization scheme.\",\n+                                        \"displayName\": \"API Key\",\n+                                        \"value\": \"API_KEY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"BASIC\",\n+                                \"description\": \"Authorization Scheme used for optional authentication to Elasticsearch.\",\n+                                \"displayName\": \"Authorization Scheme\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"authorization-scheme\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"api-endpoint\": {\n-                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n-                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n-                                \"displayName\": \"API Endpoint\",\n+                            \"el-cs-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The charset to use for interpreting the response from Elasticsearch.\",\n+                                \"displayName\": \"Charset\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-endpoint\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"el-cs-connect-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when trying to connect.\",\n+                                \"displayName\": \"Connect timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-connect-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size Threshold\",\n+                            \"el-cs-enable-compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether the REST client should compress requests using gzip content encoding and add the \\\"Accept-Encoding: gzip\\\" header to receive compressed responses\",\n+                                \"displayName\": \"Enable Compression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"el-cs-enable-compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-subscription\": {\n-                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n-                                \"displayName\": \"Subscription\",\n+                            \"el-cs-http-hosts\": {\n+                                \"description\": \"A comma-separated list of HTTP hosts that host Elasticsearch query nodes. Note that the Host is included in requests as a header (typically including domain and port, e.g. elasticsearch:9200).\",\n+                                \"displayName\": \"HTTP Hosts\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n+                                \"name\": \"el-cs-http-hosts\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"el-cs-node-selector\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n+                                        \"displayName\": \"Any\",\n+                                        \"value\": \"ANY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n+                                        \"displayName\": \"Skip Dedicated Masters\",\n+                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ANY\",\n+                                \"description\": \"Selects Elasticsearch nodes that can receive requests. Used to keep requests away from dedicated Elasticsearch master nodes\",\n+                                \"displayName\": \"Node Selector\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"pubsub\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub subscription. If the 'Batch Size' is set, the configured number of messages will be pulled in a single request, else only one message will be pulled.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n-                                \"name\": \"gcp.pubsub.ackId\"\n-                            },\n-                            {\n-                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n-                                \"name\": \"gcp.pubsub.messageSize\"\n-                            },\n-                            {\n-                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n-                                \"name\": \"gcp.pubsub.attributesCount\"\n+                                \"name\": \"el-cs-node-selector\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Timestamp value when the message was published\",\n-                                \"name\": \"gcp.pubsub.publishTime\"\n+                            \"el-cs-password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n+                                    }\n+                                ],\n+                                \"description\": \"The password to use with XPack security.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"el-cs-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n-                                \"name\": \"Dynamic Attributes\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub message\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Attribute name\",\n-                                \"value\": \"Value to be set to the attribute\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"el-cs-path-prefix\": {\n+                                \"description\": \"Sets the path's prefix for every request used by the http client. For example, if this is set to \\\"/my/path\\\", then any client request will become \\\"/my/path/\\\" + endpoint. In essence, every request's endpoint is prefixed by this pathPrefix. The path prefix is useful for when Elasticsearch is behind a proxy that provides a base path or a proxy that requires all paths to start with '/'; it is not intended for other purposes and it should not be supplied in other scenarios\",\n+                                \"displayName\": \"Path Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"el-cs-path-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Input Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n-                                \"displayName\": \"Input Batch Size\",\n+                            \"el-cs-send-meta-header\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether to send a \\\"X-Elastic-Client-Meta\\\" header that describes the runtime environment. It contains information that is similar to what could be found in User-Agent. Using a separate header allows applications to use User-Agent for their own needs, e.g. to identify application version or other environment information\",\n+                                \"displayName\": \"Send Meta Header\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Input Batch Size\",\n+                                \"name\": \"el-cs-send-meta-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Message Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"dependencies\": [\n+                            \"el-cs-sniff-cluster-nodes\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum size of a Google PubSub message in bytes. Defaults to 1 MB (1048576 bytes)\",\n-                                \"displayName\": \"Maximum Message Size\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Periodically sniff for nodes within the Elasticsearch cluster via the Elasticsearch Node Info API. If Elasticsearch security features are enabled (default to \\\"true\\\" for 8.x+), the Elasticsearch user must have the \\\"monitor\\\" or \\\"manage\\\" cluster privilege to use this API.Note that all HTTP Hosts (and those that may be discovered within the cluster using the Sniffer) must use the same protocol, e.g. http or https, and be contactable using the same client settings. Finally the Elasticsearch \\\"network.publish_host\\\" must match one of the \\\"network.bind_host\\\" list entries see https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html for more information\",\n+                                \"displayName\": \"Sniff Cluster Nodes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Message Size\",\n+                                \"name\": \"el-cs-sniff-cluster-nodes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Derivation Strategy\": {\n+                            \"el-cs-sniff-failure\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Each incoming FlowFile is sent as a Google Cloud PubSub message\",\n-                                        \"displayName\": \"FlowFile Oriented\",\n-                                        \"value\": \"FLOWFILE_ORIENTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Each incoming FlowFile is parsed into NiFi records, which are each sent as a Google Cloud PubSub message\",\n-                                        \"displayName\": \"Record Oriented\",\n-                                        \"value\": \"RECORD_ORIENTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n-                                \"description\": \"The strategy used to publish the incoming FlowFile to the Google Cloud PubSub endpoint.\",\n-                                \"displayName\": \"Message Derivation Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enable sniffing on failure, meaning that after each failure the Elasticsearch nodes list gets updated straightaway rather than at the following ordinary sniffing round\",\n+                                \"displayName\": \"Sniff on Failure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Derivation Strategy\",\n+                                \"name\": \"el-cs-sniff-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n+                            \"el-cs-sniffer-failure-delay\": {\n+                                \"defaultValue\": \"1 min\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"propertyDisplayName\": \"Sniff on Failure\",\n+                                        \"propertyName\": \"el-cs-sniff-failure\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                                \"description\": \"Delay between an Elasticsearch request failure and updating available Cluster nodes using the Sniffer\",\n+                                \"displayName\": \"Sniffer Failure Delay\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"el-cs-sniffer-failure-delay\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n+                            \"el-cs-sniffer-interval\": {\n+                                \"defaultValue\": \"5 mins\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to GCPubSub endpoint\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"Interval between Cluster sniffer operations\",\n+                                \"displayName\": \"Sniffer Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"el-cs-sniffer-interval\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"api-endpoint\": {\n-                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n-                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n-                                \"displayName\": \"API Endpoint\",\n+                            \"el-cs-sniffer-request-timeout\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                    }\n+                                ],\n+                                \"description\": \"Cluster sniffer timeout for node info requests\",\n+                                \"displayName\": \"Sniffer Request Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-endpoint\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-sniffer-request-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-batch-bytes\": {\n-                                \"defaultValue\": \"3 MB\",\n-                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n-                                \"displayName\": \"Batch Bytes Threshold\",\n+                            \"el-cs-socket-timeout\": {\n+                                \"defaultValue\": \"60000\",\n+                                \"description\": \"Controls the amount of time, in milliseconds, before a timeout occurs when waiting for a response.\",\n+                                \"displayName\": \"Read timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-batch-bytes\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-socket-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"el-cs-ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections. This service only applies if the Elasticsearch endpoint(s) have been secured with TLS/SSL.\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-ssl-context-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"gcp-pubsub-publish-batch-delay\": {\n-                                \"defaultValue\": \"100 millis\",\n-                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n-                                \"displayName\": \"Batch Delay Threshold\",\n+                            \"el-cs-strict-deprecation\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether the REST client should return any response containing at least one warning header as a failure\",\n+                                \"displayName\": \"Strict Deprecation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"name\": \"el-cs-strict-deprecation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size Threshold\",\n+                            \"el-cs-suppress-nulls\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will be written out as a null/empty value\",\n+                                        \"displayName\": \"Never Suppress\",\n+                                        \"value\": \"never-suppress\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"always-suppress\",\n+                                \"description\": \"Specifies how the writer should handle null and empty fields (including objects and arrays)\",\n+                                \"displayName\": \"Suppress Null/Empty Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"el-cs-suppress-nulls\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-topic\": {\n-                                \"description\": \"Name of the Google Cloud PubSub Topic\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"el-cs-username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n+                                    }\n+                                ],\n+                                \"description\": \"The username to use with XPack security.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-topic\",\n-                                \"required\": true,\n+                                \"name\": \"el-cs-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n@@ -91847,522 +88754,331 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails but attempting the operation again may succeed.\",\n-                                \"name\": \"retry\"\n+                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"client\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\",\n-                        \"typeDescription\": \"Publishes the content of the incoming flowfile to the configured Google Cloud PubSub topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"Count of pubsub messages published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.count.records\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n-                                \"name\": \"gcp.pubsub.topic\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientServiceImpl\",\n+                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client, using the Elasticsearch (low-level) REST Client.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Retrieves an object using JSONPath from the result document and places it in the return Record at the specified Record Path.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A JSONPath expression\",\n+                                \"value\": \"A Record Path expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"gcp-bytes-outstanding\": {\n-                                \"defaultValue\": \"10 MB\",\n-                                \"description\": \"The number of quota bytes that may be outstanding to the client.\",\n-                                \"displayName\": \"Bytes Outstanding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-bytes-outstanding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-messages-outstanding\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The number of messages that may be outstanding to the client.\",\n-                                \"displayName\": \"Messages Outstanding\",\n+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-messages-outstanding\",\n+                                \"name\": \"el-lookup-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-subscription\": {\n-                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription. Example: projects/8476107443/locations/europe-west1-d/subscriptions/my-lite-subscription\",\n-                                \"displayName\": \"Subscription\",\n+                            \"el-lookup-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n-                                \"required\": true,\n+                                \"name\": \"el-lookup-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"pubsub\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"If non-empty, identifies related messages for which publish order should be respected. If a 'Subscription' has 'enable_message_ordering' set to 'true', messages published with the same non-empty 'ordering_key' value will be delivered to subscribers in the order in which they are received by the Pub/Sub system. All 'PubsubMessage's published in a given 'PublishRequest' must specify the same 'ordering_key' value.\",\n-                                \"name\": \"gcp.pubsub.ordering.key\"\n-                            },\n-                            {\n-                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n-                                \"name\": \"gcp.pubsub.attributesCount\"\n-                            },\n-                            {\n-                                \"description\": \"Timestamp value when the message was published\",\n-                                \"name\": \"gcp.pubsub.publishTime\"\n                             },\n-                            {\n-                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n-                                \"name\": \"Dynamic Attributes\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub Lite message\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Attribute name\",\n-                                \"value\": \"Value to be set to the attribute\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"gcp-batch-bytes\": {\n-                                \"defaultValue\": \"3 MB\",\n-                                \"description\": \"Publish request gets triggered based on this Batch Bytes Threshold property and the Batch Size Threshold property, whichever condition is met first.\",\n-                                \"displayName\": \"Batch Bytes Threshold\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n+                                        \"displayName\": \"Use 'Schema Text' Property\",\n+                                        \"value\": \"schema-text-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"infer\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-batch-bytes\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-ordering-key\": {\n-                                \"description\": \"Messages with the same ordering key will always get published to the same partition. When this property is not set, messages can get published to different partitions if more than one partition exists for the topic.\",\n-                                \"displayName\": \"Ordering Key\",\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n+                                \"displayName\": \"Schema Branch\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcp-ordering-key\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-delay\": {\n-                                \"defaultValue\": \"100 millis\",\n-                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n-                                \"displayName\": \"Batch Delay Threshold\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-size\": {\n-                                \"defaultValue\": \"15\",\n-                                \"description\": \"Indicates the number of messages the cloud service should bundle together in a batch. If not set and left empty, only one message will be used in a batch\",\n-                                \"displayName\": \"Batch Size Threshold\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n-                                \"required\": true,\n+                                \"name\": \"schema-registry\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-topic\": {\n-                                \"description\": \"Name of the Google Cloud PubSub Topic. Example: projects/8476107443/locations/europe-west1-d/topics/my-lite-topic\",\n-                                \"displayName\": \"Topic Name\",\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n+                                \"displayName\": \"Schema Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-topic\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"The entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"lookup\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\",\n-                        \"typeDescription\": \"Publishes the content of the incoming FlowFile to the configured Google Cloud PubSub Lite topic. The processor supports dynamic properties. If any dynamic properties are present, they will be sent along with the message in the form of 'attributes'.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n-                                \"name\": \"gcp.pubsub.messageId\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n-                                \"name\": \"gcp.pubsub.topic\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchLookupService\",\n+                        \"typeDescription\": \"Lookup a record from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"name\": \"el-lookup-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-generation\": {\n-                                \"description\": \"The generation of the object to be deleted. If null, will use latest version of the object.\",\n-                                \"displayName\": \"Generation\",\n+                            \"el-lookup-type\": {\n+                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching)\",\n+                                \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"el-lookup-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"el-rest-client-service\": {\n+                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                        \"typeDescription\": \"Deletes objects from a Google Cloud Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchStringLookupService\",\n+                        \"typeDescription\": \"Lookup a string value from Elasticsearch Server associated with the specified document ID. The coordinates that are passed to the lookup must contain the key 'id'.\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -92372,142 +89088,44 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the GCS bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GCS_SOURCE_BUCKET}`.\\nConfigure the \\\"Project ID\\\" property to reflect the ID of your Google Compute Cloud Project.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGCSObject.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${gcs.bucket}\\\"\\n\\\"Name\\\" = \\\"${filename}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve all files in a Google Compute Storage (GCS) bucket\",\n-                                \"keywords\": [\n-                                    \"gcp\",\n-                                    \"gcs\",\n-                                    \"google cloud\",\n-                                    \"google compute storage\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-generation\": {\n-                                \"description\": \"The generation of the Object to download. If not set, the latest generation will be downloaded.\",\n-                                \"displayName\": \"Object Generation\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Key\",\n+                            \"file\": {\n+                                \"defaultValue\": \"${dropbox.id}\",\n+                                \"description\": \"The Dropbox identifier or path of the Dropbox file to fetch. The 'File' should match the following regular expression pattern: /.*|id:.* . When ListDropbox is used for input, either '${dropbox.id}' (identifying files by Dropbox id) or '${path}/${filename}' (identifying files by path) can be used as 'File' value.\",\n+                                \"displayName\": \"File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"name\": \"file\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-object-range-length\": {\n-                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n-                                \"displayName\": \"Range Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-range-length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-object-range-start\": {\n-                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n-                                \"displayName\": \"Range Start\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-range-start\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-server-side-encryption-key\": {\n-                                \"description\": \"An AES256 Key (encoded in base64) which the object has been encrypted in.\",\n-                                \"displayName\": \"Server Side Encryption Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-server-side-encryption-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n                             \"proxy-configuration-service\": {\n                                 \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n@@ -92515,166 +89133,85 @@\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n+                            \"dropbox\",\n                             \"fetch\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n                             \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                        \"typeDescription\": \"Fetches a file from a Google Cloud Bucket. Designed to be used in tandem with ListGCSBucket.\",\n+                        \"type\": \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                        \"typeDescription\": \"Fetches files from Dropbox. Designed to be used in tandem with ListDropbox.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n-                            },\n-                            {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n                             },\n                             {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -92687,27 +89224,27 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n                             \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n@@ -92751,135 +89288,98 @@\n                                 ],\n                                 \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-state-cache\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n                             \"et-time-window\": {\n                                 \"defaultValue\": \"3 hours\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"window\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n-                                        \"propertyName\": \"et-initial-listing-target\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n                                 \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"et-time-window\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-bucket\": {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcs-bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-prefix\": {\n-                                \"description\": \"The prefix used to filter the object list. In most cases, it should end with a forward slash ('/').\",\n-                                \"displayName\": \"Prefix\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"The Dropbox identifier or path of the folder from which to pull list of files. 'Folder' should match the following regular expression pattern: /.*|id:.* . Example for folder identifier: id:odTlUvbpIEAAAAAAAAAGGQ. Example for folder path: /Team1/Task1.\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcs-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-use-generations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use GCS Generations, if applicable.  If false, only the latest version of each object will be returned.\",\n-                                \"displayName\": \"Use Generations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-use-generations\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n                                         \"displayName\": \"Tracking Timestamps\",\n                                         \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n                                         \"displayName\": \"Tracking Entities\",\n                                         \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy lists all entities without any tracking. The same entities will be listed each time this processor is scheduled. It is recommended to change the default run schedule value. Any property that relates to the persisting state will be ignored.\",\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n                                         \"displayName\": \"No Tracking\",\n                                         \"value\": \"none\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"timestamps\",\n                                 \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n                                 \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age a file must be in order to be considered; any files newer than this will be ignored.\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"proxy-configuration-service\": {\n                                 \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n@@ -92904,167 +89404,104 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n+                            \"recursive-search\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subfolders of the Dropbox folder.\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"recursive-search\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\n+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"After performing a listing of keys, the timestamp of the newest key is stored, along with the keys that share that same timestamp. This allows the Processor to list only keys that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"list\",\n+                            \"dropbox\",\n                             \"storage\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\",\n-                        \"typeDescription\": \"Retrieves a listing of objects from a GCS bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchGCSObject. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                        \"typeDescription\": \"Retrieves a listing of files from Dropbox (shortcuts are ignored). Each listed file may result in one FlowFile, the metadata being written as FlowFile attributes. When the 'Record Writer' property is set, the entire result is written as records to a single FlowFile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n-                            },\n-                            {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93072,278 +89509,105 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows user-defined metadata to be added to the GCS object as key/value pairs\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a User-Defined Metadata field to add to the GCS Object\",\n-                                \"value\": \"The value of a User-Defined Metadata field to add to the GCS Object\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Resource Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"GCP Credentials Provider Service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Resource Transfer Source\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n-                                        \"displayName\": \"FlowFile Content\",\n-                                        \"value\": \"FLOWFILE_CONTENT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The File Resource Service provides the source for transfer\",\n-                                        \"displayName\": \"File Resource Service\",\n-                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\n+                            \"chunked-upload-size\": {\n+                                \"defaultValue\": \"8 MB\",\n+                                \"description\": \"Defines the size of a chunk. Used when a FlowFile's size exceeds 'Chunked Upload Threshold' and content is uploaded in smaller chunks. It is recommended to specify chunked upload size smaller than 'Chunked Upload Threshold' and as multiples of 4 MB. Maximum allowed value is 150 MB.\",\n+                                \"displayName\": \"Chunked Upload Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resource Transfer Source\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"chunked-upload-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-retry-count\": {\n-                                \"defaultValue\": \"6\",\n-                                \"description\": \"How many retry attempts should be made before routing to the failure relationship.\",\n-                                \"displayName\": \"Number of retries\",\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"150 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Maximum allowed value is 150 MB.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n-                                \"required\": true,\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-content-disposition-type\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Indicates that the object should be loaded and rendered within the browser.\",\n-                                        \"displayName\": \"Inline\",\n-                                        \"value\": \"inline\"\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"Indicates that the object should be saved (using a Save As... dialog) rather than opened directly within the browser\",\n-                                        \"displayName\": \"Attachment\",\n-                                        \"value\": \"attachment\"\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of RFC-6266 Content Disposition to be attached to the object\",\n-                                \"displayName\": \"Content Disposition Type\",\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Dropbox folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-content-disposition-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-content-type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n-                                \"description\": \"Content Type for the file, i.e. text/plain\",\n-                                \"displayName\": \"Content Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-content-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-object-acl\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER and WRITER permissions. All other permissions are removed.\",\n-                                        \"displayName\": \"All Authenticated Users\",\n-                                        \"value\": \"ALL_AUTHENTICATED_USERS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all authenticated Google account holders READER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Authenticated Read\",\n-                                        \"value\": \"AUTHENTICATED_READ\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the object and bucket owners OWNER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Bucket Owner Full Control\",\n-                                        \"value\": \"BUCKET_OWNER_FULL_CONTROL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the object owner OWNER permission, and gives the bucket owner READER permission. All other permissions are removed.\",\n-                                        \"displayName\": \"Bucket Owner Read Only\",\n-                                        \"value\": \"BUCKET_OWNER_READ\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission for a bucket or object, and removes all other access permissions.\",\n-                                        \"displayName\": \"Private\",\n-                                        \"value\": \"PRIVATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives permission to the project team based on their roles. Anyone who is part of the team has READER permission. Project owners and project editors have OWNER permission. This is the default ACL for newly created buckets. This is also the default ACL for newly created objects unless the default object ACL for that bucket has been changed.\",\n-                                        \"displayName\": \"Project Private\",\n-                                        \"value\": \"PROJECT_PRIVATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Gives the bucket or object owner OWNER permission, and gives all users, both authenticated and anonymous, READER permission. When you apply this to an object, anyone on the Internet can read the object without authenticating.\",\n-                                        \"displayName\": \"Public Read Only\",\n-                                        \"value\": \"PUBLIC_READ\"\n-                                    }\n-                                ],\n-                                \"description\": \"Access Control to be attached to the object uploaded. Not providing this will revert to bucket defaults.\",\n-                                \"displayName\": \"Object ACL\",\n+                            \"dropbox-credential-service\": {\n+                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n+                                \"displayName\": \"Dropbox Credential Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-object-acl\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"dropbox-credential-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"gcs-object-crc32c\": {\n-                                \"description\": \"CRC32C Checksum (encoded in Base64, big-Endian order) of the file for server-side validation.\",\n-                                \"displayName\": \"CRC32C Checksum\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The full name of the file to upload.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-crc32c\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-overwrite-object\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n-                                \"displayName\": \"Overwrite Object\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-overwrite-object\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-server-side-encryption-key\": {\n-                                \"description\": \"An AES256 Encryption Key (encoded in base64) for server-side encryption of the object.\",\n-                                \"displayName\": \"Server Side Encryption Key\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"The path of the Dropbox folder to upload files to. The folder will be created if it does not exist yet.\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-server-side-encryption-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gzip.content.enabled\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n-                                \"displayName\": \"GZIP Compression Enabled\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gzip.content.enabled\",\n-                                \"required\": false,\n+                                \"name\": \"folder\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n                                 \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n                                 \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n@@ -93353,372 +89617,336 @@\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"storage-api-url\": {\n-                                \"description\": \"Overrides the default storage URL. Configuring an alternative Storage API URL also overrides the HTTP Host header on requests as described in the Google documentation for Private Service Connections.\",\n-                                \"displayName\": \"Storage API URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox object.\",\n                                 \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Uses the FlowFile's MIME type as the content-type for the GCS object\",\n-                                \"name\": \"mime.type\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.DeleteGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\",\n-                            \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Files that could not be written to Dropbox for some reason are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"put\"\n+                            \"dropbox\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.PutGCSObject\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as an object in a Google Cloud Storage.\",\n+                        \"type\": \"org.apache.nifi.processors.dropbox.PutDropbox\",\n+                        \"typeDescription\": \"Puts content to a Dropbox folder.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n                             },\n                             {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n-                            },\n-                            {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n-                            },\n-                            {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n-                            },\n-                            {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n-                            },\n-                            {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-github-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The properties that are set following Java Beans convention where a property name is derived from the 'set*' method of the vendor specific ConnectionFactory's implementation. For example, 'com.ibm.mq.jms.MQConnectionFactory.setChannel(String)' would imply 'channel' property and 'com.ibm.mq.jms.MQConnectionFactory.setTransportType(int)' would imply 'transportType' property.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"broker\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cf\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"integration\",\n+                            \"jms\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                        \"typeDescription\": \"Provides a generic service to create vendor specific javax.jms.ConnectionFactory implementations. The Connection Factory can be served once this service is configured successfully.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"In order to perform a JNDI Lookup, an Initial Context must be established. When this is done, an Environment can be established for the context. Any dynamic/user-defined property that is added to this Controller Service will be added as an Environment configuration/variable to this Context.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a JNDI Initial Context environment variable.\",\n+                                \"value\": \"The value of the JNDI Initial Context environment variable.\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"connection.factory.name\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.factory.initial\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n-                                \"name\": \"operationKey\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.provider.url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"java.naming.security.credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"integration\",\n+                            \"jms\",\n+                            \"jndi\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.jms.cf.JndiJmsConnectionFactoryProvider\",\n+                        \"typeDescription\": \"Provides a service to lookup an existing JMS ConnectionFactory using the Java Naming and Directory Interface (JNDI).\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93726,112 +89954,525 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Acknowledgement Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically acknowledges a client's receipt of a message, regardless if NiFi session has been commited. Can result in data loss in the event where NiFi abruptly stopped before session was commited.\",\n+                                        \"displayName\": \"AUTO_ACKNOWLEDGE (1)\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"(DEFAULT) Manually acknowledges a client's receipt of a message after NiFi Session was commited, thus ensuring no data loss\",\n+                                        \"displayName\": \"CLIENT_ACKNOWLEDGE (2)\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages. May result in both data duplication and data loss while achieving the best throughput.\",\n+                                        \"displayName\": \"DUPS_OK_ACKNOWLEDGE (3)\",\n+                                        \"value\": \"3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"The JMS Acknowledgement Mode. Using Auto Acknowledge can cause messages to be lost on restart of NiFi but may provide better performance than Client Acknowledge.\",\n+                                \"displayName\": \"Acknowledgement Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Acknowledgement Mode\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Client ID\": {\n+                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n+                                \"displayName\": \"Connection Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Connection Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Factory Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n+                                \"displayName\": \"Connection Factory Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Factory Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"json-payload\": {\n-                                \"defaultValue\": \"{\\n    \\\"requests\\\": [\\n        {\\n            \\\"inputConfig\\\": {\\n                \\\"gcsSource\\\": {\\n                    \\\"uri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n                },\\n                \\\"mimeType\\\": \\\"application/pdf\\\"\\n            },\\n            \\\"features\\\": [{\\n                    \\\"type\\\": \\\"${vision-feature-type}\\\",\\n                    \\\"maxResults\\\": 4\\n                }],\\n            \\\"outputConfig\\\": {\\n                \\\"gcsDestination\\\": {\\n                    \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n                },\\n                \\\"batchSize\\\": 2\\n            }\\n        }]\\n}\",\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n+                                \"displayName\": \"Destination Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOPIC\",\n+                                        \"value\": \"TOPIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"QUEUE\",\n+                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n+                                \"displayName\": \"Destination Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Durable subscription\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If destination is Topic if present then make it the consumer durable. @see https://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createDurableConsumer-jakarta.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Durable Subscription\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Durable subscription\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"output-bucket\": {\n-                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n-                                \"displayName\": \"Output Bucket\",\n+                            \"Error Queue Name\": {\n+                                \"description\": \"The name of a JMS Queue where - if set - unprocessed messages will be routed. Usually provided by the administrator (e.g., 'queue://myErrorQueue' or 'myErrorQueue').Only applicable if 'Destination Type' is set to 'QUEUE'\",\n+                                \"displayName\": \"Error Queue Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n+                                \"name\": \"Error Queue Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"vision-feature-type\": {\n-                                \"defaultValue\": \"TEXT_DETECTION\",\n-                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n-                                \"displayName\": \"Vision Feature Type\",\n+                            \"Message Selector\": {\n+                                \"description\": \"The JMS Message Selector to filter the messages that the processor will receive\",\n+                                \"displayName\": \"Message Selector\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Selector\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Shared subscription\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createSharedConsumer-jakarta.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Shared Subscription\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Shared subscription\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Subscription Name\": {\n+                                \"description\": \"The name of the subscription to use if destination is Topic and is shared or durable.\",\n+                                \"displayName\": \"Subscription Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Subscription Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Timeout\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"description\": \"How long to wait to consume a message from the remote broker before giving up.\",\n+                                \"displayName\": \"Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"User Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"broker\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cf\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"connection.factory.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.factory.initial\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.provider.url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"java.naming.security.credentials\",\n                                 \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"output-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Write only the message to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the additional attributes into the FlowFile record on a separate leaf. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the additional attributes into the FlowFile record prefixed with \\\"_\\\". (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Appender\",\n+                                        \"value\": \"USE_APPENDER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The format used to output the JMS message into a FlowFile record.\",\n+                                \"displayName\": \"Output Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"output-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing received JMS Messages into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Writer to use for serializing Records before writing them to a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"consume\",\n+                            \"get\",\n+                            \"jms\",\n+                            \"message\",\n+                            \"receive\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateFilesOperation\",\n-                        \"typeDescription\": \"Trigger a Vision operation on file input. It should be followed by GetGcpVisionAnnotateFilesOperationStatus processor in order to monitor operation status.\",\n+                        \"type\": \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                        \"typeDescription\": \"Consumes JMS Message of type BytesMessage, TextMessage, ObjectMessage, MapMessage or StreamMessage transforming its content to a FlowFile and transitioning it to 'success' relationship. JMS attributes such as headers and properties will be copied as FlowFile attributes. MapMessages will be transformed into JSONs and then into byte arrays. The other types will have their raw contents as byte array transferred into the flowfile.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"description\": \"The JMSDeliveryMode from the message header.\",\n+                                \"name\": \"jms_deliveryMode\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSExpiration from the message header.\",\n+                                \"name\": \"jms_expiration\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSPriority from the message header.\",\n+                                \"name\": \"jms_priority\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSRedelivered from the message header.\",\n+                                \"name\": \"jms_redelivered\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSTimestamp from the message header.\",\n+                                \"name\": \"jms_timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSCorrelationID from the message header.\",\n+                                \"name\": \"jms_correlationId\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSMessageID from the message header.\",\n+                                \"name\": \"jms_messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSType from the message header.\",\n+                                \"name\": \"jms_type\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSReplyTo from the message header.\",\n+                                \"name\": \"jms_replyTo\"\n+                            },\n+                            {\n+                                \"description\": \"The JMSDestination from the message header.\",\n+                                \"name\": \"jms_destination\"\n+                            },\n+                            {\n+                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n+                                \"name\": \"jms.messagetype\"\n+                            },\n+                            {\n+                                \"description\": \"Each message property is written to an attribute.\",\n+                                \"name\": \"other attributes\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93839,3661 +90480,5298 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Additional configuration property for the Connection Factory. It can be used when the Connection Factory is being configured via the 'JNDI *' or the 'JMS *'properties of the processor. For more information, see the Additional Details page.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"The name of a Connection Factory configuration property.\",\n+                                \"value\": \"The value of a given Connection Factory configuration property.\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\n+                            \"Connection Client ID\": {\n+                                \"description\": \"The client id to be set on the connection, if set. For durable non shared consumer this is mandatory, for all others it is optional, typically with shared consumers it is undesirable to be set. Please see JMS spec for further details\",\n+                                \"displayName\": \"Connection Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Connection Client ID\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Factory Service\": {\n+                                \"description\": \"The Controller Service that is used to obtain Connection Factory. Alternatively, the 'JNDI *' or the 'JMS *' properties can also be be used to configure the Connection Factory.\",\n+                                \"displayName\": \"Connection Factory Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"Connection Factory Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"json-payload\": {\n-                                \"defaultValue\": \"{\\n    \\\"requests\\\": [{\\n        \\\"image\\\": {\\n            \\\"source\\\": {\\n                \\\"imageUri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n            }\\n        },\\n        \\\"features\\\": [{\\n            \\\"type\\\": \\\"${vision-feature-type}\\\",\\n            \\\"maxResults\\\": 4\\n        }]\\n    }],\\n    \\\"outputConfig\\\": {\\n        \\\"gcsDestination\\\": {\\n            \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n        },\\n        \\\"batchSize\\\": 2\\n    }\\n}\",\n-                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n-                                \"displayName\": \"JSON Payload\",\n+                            \"Destination Name\": {\n+                                \"description\": \"The name of the JMS Destination. Usually provided by the administrator (e.g., 'topic://myTopic' or 'myTopic').\",\n+                                \"displayName\": \"Destination Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOPIC\",\n+                                        \"value\": \"TOPIC\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"QUEUE\",\n+                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n+                                \"displayName\": \"Destination Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"JMS SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"output-bucket\": {\n-                                \"description\": \"Name of the GCS bucket where the output of the Vision job will be persisted. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${output-bucket}\",\n-                                \"displayName\": \"Output Bucket\",\n+                            \"allow-illegal-chars-in-jms-header-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n+                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"attributes-to-send-as-jms-headers-regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"Specifies the Regular Expression that determines the names of FlowFile attributes that should be sent as JMS Headers\",\n+                                \"displayName\": \"Attributes to Send as JMS Headers (Regex)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"broker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"vision-feature-type\": {\n-                                \"defaultValue\": \"TEXT_DETECTION\",\n-                                \"description\": \"Type of GCP Vision Feature. The value of this property applies when the JSON Payload property is configured. The JSON Payload property value can use Expression Language to reference the value of ${vision-feature-type}\",\n-                                \"displayName\": \"Vision Feature Type\",\n+                            \"cf\": {\n+                                \"description\": \"The fully qualified name of the JMS ConnectionFactory implementation class (eg. org.apache.activemq.ActiveMQConnectionFactory).\",\n+                                \"displayName\": \"JMS Connection Factory Implementation Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cf\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"cflib\": {\n+                                \"description\": \"Path to the directory with additional resources (eg. JARs, configuration files etc.) to be added to the classpath (defined as a comma separated list of values). Such resources typically represent target JMS client libraries for the ConnectionFactory implementation.\",\n+                                \"displayName\": \"JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set to use to construct or interpret TextMessages\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"connection.factory.name\": {\n+                                \"description\": \"The name of the JNDI Object to lookup for the Connection Factory.\",\n+                                \"displayName\": \"JNDI Name of the Connection Factory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"connection.factory.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"java.naming.factory.initial\": {\n+                                \"description\": \"The fully qualified class name of the JNDI Initial Context Factory Class (java.naming.factory.initial).\",\n+                                \"displayName\": \"JNDI Initial Context Factory Class\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.factory.initial\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.provider.url\": {\n+                                \"description\": \"The URL of the JNDI Provider to use as the value for java.naming.provider.url. See additional details documentation for allowed URL schemes.\",\n+                                \"displayName\": \"JNDI Provider URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.provider.url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"java.naming.security.credentials\": {\n+                                \"description\": \"The Credentials to use when authenticating with JNDI (java.naming.security.credentials).\",\n+                                \"displayName\": \"JNDI Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"java.naming.security.credentials\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"java.naming.security.principal\": {\n+                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n+                                \"displayName\": \"JNDI Principal\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-body-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bytes\",\n+                                        \"value\": \"bytes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"bytes\",\n+                                \"description\": \"The type of JMS message body to construct.\",\n+                                \"displayName\": \"Message Body Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-body-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"naming.factory.libraries\": {\n+                                \"description\": \"Specifies jar files and/or directories to add to the ClassPath in order to load the JNDI / JMS client libraries. This should be a comma-separated list of files, directories, and/or URLs. If a directory is given, any files in that directory will be included, but subdirectories will not be included (i.e., it is not recursive).\",\n+                                \"displayName\": \"JNDI / JMS Client Libraries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for parsing the incoming FlowFile into Records.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n+                                \"name\": \"jms_deliveryMode\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be a long.\",\n+                                \"name\": \"jms_expiration\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSPriority message header. Must be an integer.\",\n+                                \"name\": \"jms_priority\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSRedelivered message header.\",\n+                                \"name\": \"jms_redelivered\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSTimestamp message header. Must be a long.\",\n+                                \"name\": \"jms_timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSCorrelationID message header.\",\n+                                \"name\": \"jms_correlationId\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSType message header. Must be an integer.\",\n+                                \"name\": \"jms_type\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSReplyTo message header. Must be an integer.\",\n+                                \"name\": \"jms_replyTo\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute becomes the JMSDestination message header. Must be an integer.\",\n+                                \"name\": \"jms_destination\"\n+                            },\n+                            {\n+                                \"description\": \"All other attributes that do not start with jms_ are added as message properties.\",\n+                                \"name\": \"other attributes\"\n+                            },\n+                            {\n+                                \"description\": \"When an attribute will be added as a message property, a second attribute of the same name but with an extra `.type` at the end will cause the message property to be sent using that strong type. For example, attribute `delay` with value `12000` and another attribute `delay.type` with value `integer` will cause a JMS message property `delay` to be sent as an Integer rather than a String. Supported types are boolean, byte, short, integer, long, float, double, and string (which is the default).\",\n+                                \"name\": \"other attributes .type\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"All FlowFiles that cannot be sent to JMS destination are routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"jms\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"put\",\n+                            \"send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.vision.StartGcpVisionAnnotateImagesOperation\",\n-                        \"typeDescription\": \"Trigger a Vision operation on image input. It should be followed by GetGcpVisionAnnotateImagesOperationStatus processor in order to monitor operation status.\",\n+                        \"type\": \"org.apache.nifi.jms.processors.PublishJMS\",\n+                        \"typeDescription\": \"Creates a JMS Message from the contents of a FlowFile and sends it to a JMS Destination (queue or topic) as JMS BytesMessage or TextMessage. FlowFile attributes will be added as JMS headers and/or properties to the outgoing JMS message.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-splunk-nar\",\n+            \"artifact\": \"nifi-snmp-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application\": {\n-                                \"description\": \"The Splunk Application to query.\",\n-                                \"displayName\": \"Application\",\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for connection to the Splunk server.\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"snmp-authentication-protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Earliest Time\": {\n-                                \"description\": \"The value to use for the earliest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n-                                \"displayName\": \"Earliest Time\",\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Earliest Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Hostname\": {\n+                            \"snmp-hostname\": {\n                                 \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Latest Time\": {\n-                                \"description\": \"The value to use for the latest time when querying. Only used with a Time Range Strategy of Provided. See Splunk's documentation on Search Time Modifiers for guidance in populating this field.\",\n-                                \"displayName\": \"Latest Time\",\n+                            \"snmp-oid\": {\n+                                \"description\": \"Each OID (object identifier) identifies a variable that can be read or set via SNMP. This value is not taken into account for an input flowfile and will be omitted. Can be set to emptystring when the OIDs are provided through flowfile.\",\n+                                \"displayName\": \"OID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Latest Time\",\n+                                \"name\": \"snmp-oid\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Mode\": {\n+                            \"snmp-port\": {\n+                                \"defaultValue\": \"161\",\n+                                \"description\": \"Port of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-private-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ATOM\",\n-                                        \"value\": \"ATOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CSV\",\n-                                        \"value\": \"CSV\"\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON\",\n-                                        \"value\": \"JSON\"\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON_COLS\",\n-                                        \"value\": \"JSON_COLS\"\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON_ROWS\",\n-                                        \"value\": \"JSON_ROWS\"\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"JSON\",\n-                                \"description\": \"The output mode for the results.\",\n-                                \"displayName\": \"Output Mode\",\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Mode\",\n+                                \"name\": \"snmp-private-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"snmp-retries\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8089\",\n-                                \"description\": \"The port of the Splunk server.\",\n-                                \"displayName\": \"Port\",\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Query\": {\n-                                \"defaultValue\": \"search * | head 100\",\n-                                \"description\": \"The query to execute. Typically beginning with a <search> command followed by a search clause, such as <search source=\\\"tcp:7689\\\"> to search for messages received on TCP port 7689.\",\n-                                \"displayName\": \"Query\",\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Query\",\n+                                \"name\": \"snmp-security-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Read Timeout\": {\n-                                \"defaultValue\": \"15 secs\",\n-                                \"description\": \"Max wait time for response from the Splunk server.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"snmp-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of a variable. A response with the current value returned.\",\n+                                        \"displayName\": \"GET\",\n+                                        \"value\": \"GET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of multiple variables. Snmp WALK also traverses all subnodes under the specified OID.\",\n+                                        \"displayName\": \"WALK\",\n+                                        \"value\": \"WALK\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GET\",\n+                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n+                                \"displayName\": \"SNMP Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Read Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"snmp-textual-oid\": {\n+                                \"description\": \"The textual form of the numeric OID to request. This property is user defined, not processed and appended to the outgoing flowfile.\",\n+                                \"displayName\": \"Textual OID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"snmp-textual-oid\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n+                            \"snmp-version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"Time Field Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Search based on the time of the event which may be different than when the event was indexed.\",\n-                                        \"displayName\": \"Event Time\",\n-                                        \"value\": \"Event Time\"\n-                                    },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"get\",\n+                            \"oid\",\n+                            \"snmp\",\n+                            \"walk\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.snmp.processors.GetSNMP\",\n+                        \"typeDescription\": \"Retrieves information from SNMP Agent with SNMP Get request and outputs a FlowFile with information in attributes and without any content\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n+                                \"name\": \"snmp$<OID>\"\n+                            },\n+                            {\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n+                            },\n+                            {\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n+                            },\n+                            {\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n+                            },\n+                            {\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n+                                \"name\": \"snmp$textualOid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n-                                        \"displayName\": \"Index Time\",\n-                                        \"value\": \"Index Time\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Event Time\",\n-                                \"description\": \"Indicates whether to search by the time attached to the event, or by the time the event was indexed in Splunk.\",\n-                                \"displayName\": \"Time Field Strategy\",\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Field Strategy\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-manager-port\": {\n+                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n+                                \"displayName\": \"SNMP Manager Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-manager-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Range Strategy\": {\n+                            \"snmp-security-level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The processor will manage the date ranges of the query starting from the beginning of time.\",\n-                                        \"displayName\": \"Managed from Beginning\",\n-                                        \"value\": \"Managed from Beginning\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"The processor will manage the date ranges of the query starting from the current time.\",\n-                                        \"displayName\": \"Managed from Current\",\n-                                        \"value\": \"Managed from Current\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"The the time range provided through the Earliest Time and Latest Time properties will be used.\",\n-                                        \"displayName\": \"Provided\",\n-                                        \"value\": \"Provided\"\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Provided\",\n-                                \"description\": \"Indicates how to apply time ranges to each execution of the query. Selecting a managed option allows the processor to apply a time range from the last execution time to the current execution time. When using <Managed from Beginning>, an earliest time will not be applied on the first execution, and thus all records searched. When using <Managed from Current> the earliest time of the first execution will be the initial execution time. When using <Provided>, the time range will come from the Earliest Time and Latest Time properties, or no time range will be applied if these properties are left blank.\",\n-                                \"displayName\": \"Time Range Strategy\",\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Range Strategy\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Zone\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Abidjan\",\n-                                        \"value\": \"Africa/Abidjan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Accra\",\n-                                        \"value\": \"Africa/Accra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Addis_Ababa\",\n-                                        \"value\": \"Africa/Addis_Ababa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Algiers\",\n-                                        \"value\": \"Africa/Algiers\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmara\",\n-                                        \"value\": \"Africa/Asmara\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmera\",\n-                                        \"value\": \"Africa/Asmera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bamako\",\n-                                        \"value\": \"Africa/Bamako\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bangui\",\n-                                        \"value\": \"Africa/Bangui\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Banjul\",\n-                                        \"value\": \"Africa/Banjul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bissau\",\n-                                        \"value\": \"Africa/Bissau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Blantyre\",\n-                                        \"value\": \"Africa/Blantyre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Brazzaville\",\n-                                        \"value\": \"Africa/Brazzaville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bujumbura\",\n-                                        \"value\": \"Africa/Bujumbura\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Cairo\",\n-                                        \"value\": \"Africa/Cairo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Casablanca\",\n-                                        \"value\": \"Africa/Casablanca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ceuta\",\n-                                        \"value\": \"Africa/Ceuta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Conakry\",\n-                                        \"value\": \"Africa/Conakry\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Dakar\",\n-                                        \"value\": \"Africa/Dakar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n-                                        \"value\": \"Africa/Dar_es_Salaam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Djibouti\",\n-                                        \"value\": \"Africa/Djibouti\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Douala\",\n-                                        \"value\": \"Africa/Douala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/El_Aaiun\",\n-                                        \"value\": \"Africa/El_Aaiun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Freetown\",\n-                                        \"value\": \"Africa/Freetown\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Gaborone\",\n-                                        \"value\": \"Africa/Gaborone\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Harare\",\n-                                        \"value\": \"Africa/Harare\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Johannesburg\",\n-                                        \"value\": \"Africa/Johannesburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Juba\",\n-                                        \"value\": \"Africa/Juba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kampala\",\n-                                        \"value\": \"Africa/Kampala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Khartoum\",\n-                                        \"value\": \"Africa/Khartoum\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kigali\",\n-                                        \"value\": \"Africa/Kigali\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kinshasa\",\n-                                        \"value\": \"Africa/Kinshasa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lagos\",\n-                                        \"value\": \"Africa/Lagos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Libreville\",\n-                                        \"value\": \"Africa/Libreville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lome\",\n-                                        \"value\": \"Africa/Lome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Luanda\",\n-                                        \"value\": \"Africa/Luanda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lubumbashi\",\n-                                        \"value\": \"Africa/Lubumbashi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lusaka\",\n-                                        \"value\": \"Africa/Lusaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Malabo\",\n-                                        \"value\": \"Africa/Malabo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maputo\",\n-                                        \"value\": \"Africa/Maputo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maseru\",\n-                                        \"value\": \"Africa/Maseru\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mbabane\",\n-                                        \"value\": \"Africa/Mbabane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mogadishu\",\n-                                        \"value\": \"Africa/Mogadishu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Monrovia\",\n-                                        \"value\": \"Africa/Monrovia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nairobi\",\n-                                        \"value\": \"Africa/Nairobi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ndjamena\",\n-                                        \"value\": \"Africa/Ndjamena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Niamey\",\n-                                        \"value\": \"Africa/Niamey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nouakchott\",\n-                                        \"value\": \"Africa/Nouakchott\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ouagadougou\",\n-                                        \"value\": \"Africa/Ouagadougou\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Porto-Novo\",\n-                                        \"value\": \"Africa/Porto-Novo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Sao_Tome\",\n-                                        \"value\": \"Africa/Sao_Tome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Timbuktu\",\n-                                        \"value\": \"Africa/Timbuktu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tripoli\",\n-                                        \"value\": \"Africa/Tripoli\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tunis\",\n-                                        \"value\": \"Africa/Tunis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Windhoek\",\n-                                        \"value\": \"Africa/Windhoek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Adak\",\n-                                        \"value\": \"America/Adak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anchorage\",\n-                                        \"value\": \"America/Anchorage\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anguilla\",\n-                                        \"value\": \"America/Anguilla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Antigua\",\n-                                        \"value\": \"America/Antigua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Araguaina\",\n-                                        \"value\": \"America/Araguaina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n-                                        \"value\": \"America/Argentina/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Catamarca\",\n-                                        \"value\": \"America/Argentina/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n-                                        \"value\": \"America/Argentina/ComodRivadavia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Cordoba\",\n-                                        \"value\": \"America/Argentina/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Jujuy\",\n-                                        \"value\": \"America/Argentina/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/La_Rioja\",\n-                                        \"value\": \"America/Argentina/La_Rioja\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Mendoza\",\n-                                        \"value\": \"America/Argentina/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n-                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Salta\",\n-                                        \"value\": \"America/Argentina/Salta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Juan\",\n-                                        \"value\": \"America/Argentina/San_Juan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Luis\",\n-                                        \"value\": \"America/Argentina/San_Luis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Tucuman\",\n-                                        \"value\": \"America/Argentina/Tucuman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Ushuaia\",\n-                                        \"value\": \"America/Argentina/Ushuaia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Aruba\",\n-                                        \"value\": \"America/Aruba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Asuncion\",\n-                                        \"value\": \"America/Asuncion\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atikokan\",\n-                                        \"value\": \"America/Atikokan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atka\",\n-                                        \"value\": \"America/Atka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia\",\n-                                        \"value\": \"America/Bahia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia_Banderas\",\n-                                        \"value\": \"America/Bahia_Banderas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Barbados\",\n-                                        \"value\": \"America/Barbados\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belem\",\n-                                        \"value\": \"America/Belem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belize\",\n-                                        \"value\": \"America/Belize\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Blanc-Sablon\",\n-                                        \"value\": \"America/Blanc-Sablon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boa_Vista\",\n-                                        \"value\": \"America/Boa_Vista\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bogota\",\n-                                        \"value\": \"America/Bogota\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boise\",\n-                                        \"value\": \"America/Boise\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Buenos_Aires\",\n-                                        \"value\": \"America/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cambridge_Bay\",\n-                                        \"value\": \"America/Cambridge_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Campo_Grande\",\n-                                        \"value\": \"America/Campo_Grande\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cancun\",\n-                                        \"value\": \"America/Cancun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Caracas\",\n-                                        \"value\": \"America/Caracas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Catamarca\",\n-                                        \"value\": \"America/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayenne\",\n-                                        \"value\": \"America/Cayenne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayman\",\n-                                        \"value\": \"America/Cayman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chicago\",\n-                                        \"value\": \"America/Chicago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chihuahua\",\n-                                        \"value\": \"America/Chihuahua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ciudad_Juarez\",\n-                                        \"value\": \"America/Ciudad_Juarez\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Coral_Harbour\",\n-                                        \"value\": \"America/Coral_Harbour\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cordoba\",\n-                                        \"value\": \"America/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Costa_Rica\",\n-                                        \"value\": \"America/Costa_Rica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Creston\",\n-                                        \"value\": \"America/Creston\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cuiaba\",\n-                                        \"value\": \"America/Cuiaba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Curacao\",\n-                                        \"value\": \"America/Curacao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Danmarkshavn\",\n-                                        \"value\": \"America/Danmarkshavn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson\",\n-                                        \"value\": \"America/Dawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson_Creek\",\n-                                        \"value\": \"America/Dawson_Creek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Denver\",\n-                                        \"value\": \"America/Denver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Detroit\",\n-                                        \"value\": \"America/Detroit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dominica\",\n-                                        \"value\": \"America/Dominica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Edmonton\",\n-                                        \"value\": \"America/Edmonton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Eirunepe\",\n-                                        \"value\": \"America/Eirunepe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/El_Salvador\",\n-                                        \"value\": \"America/El_Salvador\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ensenada\",\n-                                        \"value\": \"America/Ensenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Nelson\",\n-                                        \"value\": \"America/Fort_Nelson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Wayne\",\n-                                        \"value\": \"America/Fort_Wayne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fortaleza\",\n-                                        \"value\": \"America/Fortaleza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Glace_Bay\",\n-                                        \"value\": \"America/Glace_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Godthab\",\n-                                        \"value\": \"America/Godthab\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Goose_Bay\",\n-                                        \"value\": \"America/Goose_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grand_Turk\",\n-                                        \"value\": \"America/Grand_Turk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grenada\",\n-                                        \"value\": \"America/Grenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guadeloupe\",\n-                                        \"value\": \"America/Guadeloupe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guatemala\",\n-                                        \"value\": \"America/Guatemala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guayaquil\",\n-                                        \"value\": \"America/Guayaquil\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guyana\",\n-                                        \"value\": \"America/Guyana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Halifax\",\n-                                        \"value\": \"America/Halifax\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Havana\",\n-                                        \"value\": \"America/Havana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Hermosillo\",\n-                                        \"value\": \"America/Hermosillo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Indianapolis\",\n-                                        \"value\": \"America/Indiana/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Knox\",\n-                                        \"value\": \"America/Indiana/Knox\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Marengo\",\n-                                        \"value\": \"America/Indiana/Marengo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Petersburg\",\n-                                        \"value\": \"America/Indiana/Petersburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Tell_City\",\n-                                        \"value\": \"America/Indiana/Tell_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vevay\",\n-                                        \"value\": \"America/Indiana/Vevay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vincennes\",\n-                                        \"value\": \"America/Indiana/Vincennes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Winamac\",\n-                                        \"value\": \"America/Indiana/Winamac\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indianapolis\",\n-                                        \"value\": \"America/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Inuvik\",\n-                                        \"value\": \"America/Inuvik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Iqaluit\",\n-                                        \"value\": \"America/Iqaluit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jamaica\",\n-                                        \"value\": \"America/Jamaica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jujuy\",\n-                                        \"value\": \"America/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Juneau\",\n-                                        \"value\": \"America/Juneau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Louisville\",\n-                                        \"value\": \"America/Kentucky/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Monticello\",\n-                                        \"value\": \"America/Kentucky/Monticello\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Knox_IN\",\n-                                        \"value\": \"America/Knox_IN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kralendijk\",\n-                                        \"value\": \"America/Kralendijk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/La_Paz\",\n-                                        \"value\": \"America/La_Paz\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lima\",\n-                                        \"value\": \"America/Lima\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Los_Angeles\",\n-                                        \"value\": \"America/Los_Angeles\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Louisville\",\n-                                        \"value\": \"America/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lower_Princes\",\n-                                        \"value\": \"America/Lower_Princes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Maceio\",\n-                                        \"value\": \"America/Maceio\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Managua\",\n-                                        \"value\": \"America/Managua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Manaus\",\n-                                        \"value\": \"America/Manaus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Marigot\",\n-                                        \"value\": \"America/Marigot\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Martinique\",\n-                                        \"value\": \"America/Martinique\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Matamoros\",\n-                                        \"value\": \"America/Matamoros\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mazatlan\",\n-                                        \"value\": \"America/Mazatlan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mendoza\",\n-                                        \"value\": \"America/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Menominee\",\n-                                        \"value\": \"America/Menominee\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Merida\",\n-                                        \"value\": \"America/Merida\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Metlakatla\",\n-                                        \"value\": \"America/Metlakatla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mexico_City\",\n-                                        \"value\": \"America/Mexico_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Miquelon\",\n-                                        \"value\": \"America/Miquelon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Moncton\",\n-                                        \"value\": \"America/Moncton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Monterrey\",\n-                                        \"value\": \"America/Monterrey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montevideo\",\n-                                        \"value\": \"America/Montevideo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montreal\",\n-                                        \"value\": \"America/Montreal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montserrat\",\n-                                        \"value\": \"America/Montserrat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nassau\",\n-                                        \"value\": \"America/Nassau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/New_York\",\n-                                        \"value\": \"America/New_York\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nipigon\",\n-                                        \"value\": \"America/Nipigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nome\",\n-                                        \"value\": \"America/Nome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Noronha\",\n-                                        \"value\": \"America/Noronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Beulah\",\n-                                        \"value\": \"America/North_Dakota/Beulah\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Center\",\n-                                        \"value\": \"America/North_Dakota/Center\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/New_Salem\",\n-                                        \"value\": \"America/North_Dakota/New_Salem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nuuk\",\n-                                        \"value\": \"America/Nuuk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ojinaga\",\n-                                        \"value\": \"America/Ojinaga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Panama\",\n-                                        \"value\": \"America/Panama\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Pangnirtung\",\n-                                        \"value\": \"America/Pangnirtung\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Paramaribo\",\n-                                        \"value\": \"America/Paramaribo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Phoenix\",\n-                                        \"value\": \"America/Phoenix\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port-au-Prince\",\n-                                        \"value\": \"America/Port-au-Prince\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port_of_Spain\",\n-                                        \"value\": \"America/Port_of_Spain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Acre\",\n-                                        \"value\": \"America/Porto_Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Velho\",\n-                                        \"value\": \"America/Porto_Velho\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Puerto_Rico\",\n-                                        \"value\": \"America/Puerto_Rico\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Punta_Arenas\",\n-                                        \"value\": \"America/Punta_Arenas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rainy_River\",\n-                                        \"value\": \"America/Rainy_River\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rankin_Inlet\",\n-                                        \"value\": \"America/Rankin_Inlet\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Recife\",\n-                                        \"value\": \"America/Recife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Regina\",\n-                                        \"value\": \"America/Regina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Resolute\",\n-                                        \"value\": \"America/Resolute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rio_Branco\",\n-                                        \"value\": \"America/Rio_Branco\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rosario\",\n-                                        \"value\": \"America/Rosario\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santa_Isabel\",\n-                                        \"value\": \"America/Santa_Isabel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santarem\",\n-                                        \"value\": \"America/Santarem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santiago\",\n-                                        \"value\": \"America/Santiago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santo_Domingo\",\n-                                        \"value\": \"America/Santo_Domingo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sao_Paulo\",\n-                                        \"value\": \"America/Sao_Paulo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Scoresbysund\",\n-                                        \"value\": \"America/Scoresbysund\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Shiprock\",\n-                                        \"value\": \"America/Shiprock\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sitka\",\n-                                        \"value\": \"America/Sitka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Barthelemy\",\n-                                        \"value\": \"America/St_Barthelemy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Johns\",\n-                                        \"value\": \"America/St_Johns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Kitts\",\n-                                        \"value\": \"America/St_Kitts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Lucia\",\n-                                        \"value\": \"America/St_Lucia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Thomas\",\n-                                        \"value\": \"America/St_Thomas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Vincent\",\n-                                        \"value\": \"America/St_Vincent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Swift_Current\",\n-                                        \"value\": \"America/Swift_Current\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tegucigalpa\",\n-                                        \"value\": \"America/Tegucigalpa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thule\",\n-                                        \"value\": \"America/Thule\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thunder_Bay\",\n-                                        \"value\": \"America/Thunder_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tijuana\",\n-                                        \"value\": \"America/Tijuana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Toronto\",\n-                                        \"value\": \"America/Toronto\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tortola\",\n-                                        \"value\": \"America/Tortola\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Vancouver\",\n-                                        \"value\": \"America/Vancouver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Virgin\",\n-                                        \"value\": \"America/Virgin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Whitehorse\",\n-                                        \"value\": \"America/Whitehorse\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Winnipeg\",\n-                                        \"value\": \"America/Winnipeg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yakutat\",\n-                                        \"value\": \"America/Yakutat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yellowknife\",\n-                                        \"value\": \"America/Yellowknife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Casey\",\n-                                        \"value\": \"Antarctica/Casey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Davis\",\n-                                        \"value\": \"Antarctica/Davis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/DumontDUrville\",\n-                                        \"value\": \"Antarctica/DumontDUrville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Macquarie\",\n-                                        \"value\": \"Antarctica/Macquarie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Mawson\",\n-                                        \"value\": \"Antarctica/Mawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/McMurdo\",\n-                                        \"value\": \"Antarctica/McMurdo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Palmer\",\n-                                        \"value\": \"Antarctica/Palmer\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Rothera\",\n-                                        \"value\": \"Antarctica/Rothera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/South_Pole\",\n-                                        \"value\": \"Antarctica/South_Pole\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Syowa\",\n-                                        \"value\": \"Antarctica/Syowa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Troll\",\n-                                        \"value\": \"Antarctica/Troll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Vostok\",\n-                                        \"value\": \"Antarctica/Vostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Arctic/Longyearbyen\",\n-                                        \"value\": \"Arctic/Longyearbyen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aden\",\n-                                        \"value\": \"Asia/Aden\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Almaty\",\n-                                        \"value\": \"Asia/Almaty\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Amman\",\n-                                        \"value\": \"Asia/Amman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Anadyr\",\n-                                        \"value\": \"Asia/Anadyr\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtau\",\n-                                        \"value\": \"Asia/Aqtau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtobe\",\n-                                        \"value\": \"Asia/Aqtobe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashgabat\",\n-                                        \"value\": \"Asia/Ashgabat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashkhabad\",\n-                                        \"value\": \"Asia/Ashkhabad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Atyrau\",\n-                                        \"value\": \"Asia/Atyrau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baghdad\",\n-                                        \"value\": \"Asia/Baghdad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bahrain\",\n-                                        \"value\": \"Asia/Bahrain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baku\",\n-                                        \"value\": \"Asia/Baku\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bangkok\",\n-                                        \"value\": \"Asia/Bangkok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Barnaul\",\n-                                        \"value\": \"Asia/Barnaul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Beirut\",\n-                                        \"value\": \"Asia/Beirut\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bishkek\",\n-                                        \"value\": \"Asia/Bishkek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Brunei\",\n-                                        \"value\": \"Asia/Brunei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Calcutta\",\n-                                        \"value\": \"Asia/Calcutta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chita\",\n-                                        \"value\": \"Asia/Chita\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Choibalsan\",\n-                                        \"value\": \"Asia/Choibalsan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chongqing\",\n-                                        \"value\": \"Asia/Chongqing\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chungking\",\n-                                        \"value\": \"Asia/Chungking\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Colombo\",\n-                                        \"value\": \"Asia/Colombo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dacca\",\n-                                        \"value\": \"Asia/Dacca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Damascus\",\n-                                        \"value\": \"Asia/Damascus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dhaka\",\n-                                        \"value\": \"Asia/Dhaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dili\",\n-                                        \"value\": \"Asia/Dili\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dubai\",\n-                                        \"value\": \"Asia/Dubai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dushanbe\",\n-                                        \"value\": \"Asia/Dushanbe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Famagusta\",\n-                                        \"value\": \"Asia/Famagusta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Gaza\",\n-                                        \"value\": \"Asia/Gaza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Harbin\",\n-                                        \"value\": \"Asia/Harbin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hebron\",\n-                                        \"value\": \"Asia/Hebron\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n-                                        \"value\": \"Asia/Ho_Chi_Minh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hong_Kong\",\n-                                        \"value\": \"Asia/Hong_Kong\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hovd\",\n-                                        \"value\": \"Asia/Hovd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Irkutsk\",\n-                                        \"value\": \"Asia/Irkutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Istanbul\",\n-                                        \"value\": \"Asia/Istanbul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jakarta\",\n-                                        \"value\": \"Asia/Jakarta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jayapura\",\n-                                        \"value\": \"Asia/Jayapura\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jerusalem\",\n-                                        \"value\": \"Asia/Jerusalem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kabul\",\n-                                        \"value\": \"Asia/Kabul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kamchatka\",\n-                                        \"value\": \"Asia/Kamchatka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Karachi\",\n-                                        \"value\": \"Asia/Karachi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kashgar\",\n-                                        \"value\": \"Asia/Kashgar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kathmandu\",\n-                                        \"value\": \"Asia/Kathmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Katmandu\",\n-                                        \"value\": \"Asia/Katmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Khandyga\",\n-                                        \"value\": \"Asia/Khandyga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kolkata\",\n-                                        \"value\": \"Asia/Kolkata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Krasnoyarsk\",\n-                                        \"value\": \"Asia/Krasnoyarsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n-                                        \"value\": \"Asia/Kuala_Lumpur\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuching\",\n-                                        \"value\": \"Asia/Kuching\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuwait\",\n-                                        \"value\": \"Asia/Kuwait\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macao\",\n-                                        \"value\": \"Asia/Macao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macau\",\n-                                        \"value\": \"Asia/Macau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Magadan\",\n-                                        \"value\": \"Asia/Magadan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Makassar\",\n-                                        \"value\": \"Asia/Makassar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Manila\",\n-                                        \"value\": \"Asia/Manila\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Muscat\",\n-                                        \"value\": \"Asia/Muscat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Nicosia\",\n-                                        \"value\": \"Asia/Nicosia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novokuznetsk\",\n-                                        \"value\": \"Asia/Novokuznetsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novosibirsk\",\n-                                        \"value\": \"Asia/Novosibirsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Omsk\",\n-                                        \"value\": \"Asia/Omsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Oral\",\n-                                        \"value\": \"Asia/Oral\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Phnom_Penh\",\n-                                        \"value\": \"Asia/Phnom_Penh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pontianak\",\n-                                        \"value\": \"Asia/Pontianak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pyongyang\",\n-                                        \"value\": \"Asia/Pyongyang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qatar\",\n-                                        \"value\": \"Asia/Qatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qostanay\",\n-                                        \"value\": \"Asia/Qostanay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qyzylorda\",\n-                                        \"value\": \"Asia/Qyzylorda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Rangoon\",\n-                                        \"value\": \"Asia/Rangoon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Riyadh\",\n-                                        \"value\": \"Asia/Riyadh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Saigon\",\n-                                        \"value\": \"Asia/Saigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Sakhalin\",\n-                                        \"value\": \"Asia/Sakhalin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Samarkand\",\n-                                        \"value\": \"Asia/Samarkand\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Seoul\",\n-                                        \"value\": \"Asia/Seoul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Shanghai\",\n-                                        \"value\": \"Asia/Shanghai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Singapore\",\n-                                        \"value\": \"Asia/Singapore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Srednekolymsk\",\n-                                        \"value\": \"Asia/Srednekolymsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Taipei\",\n-                                        \"value\": \"Asia/Taipei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tashkent\",\n-                                        \"value\": \"Asia/Tashkent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tbilisi\",\n-                                        \"value\": \"Asia/Tbilisi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tehran\",\n-                                        \"value\": \"Asia/Tehran\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tel_Aviv\",\n-                                        \"value\": \"Asia/Tel_Aviv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimbu\",\n-                                        \"value\": \"Asia/Thimbu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimphu\",\n-                                        \"value\": \"Asia/Thimphu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tokyo\",\n-                                        \"value\": \"Asia/Tokyo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tomsk\",\n-                                        \"value\": \"Asia/Tomsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ujung_Pandang\",\n-                                        \"value\": \"Asia/Ujung_Pandang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulaanbaatar\",\n-                                        \"value\": \"Asia/Ulaanbaatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulan_Bator\",\n-                                        \"value\": \"Asia/Ulan_Bator\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Urumqi\",\n-                                        \"value\": \"Asia/Urumqi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ust-Nera\",\n-                                        \"value\": \"Asia/Ust-Nera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vientiane\",\n-                                        \"value\": \"Asia/Vientiane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vladivostok\",\n-                                        \"value\": \"Asia/Vladivostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yakutsk\",\n-                                        \"value\": \"Asia/Yakutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yangon\",\n-                                        \"value\": \"Asia/Yangon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yekaterinburg\",\n-                                        \"value\": \"Asia/Yekaterinburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yerevan\",\n-                                        \"value\": \"Asia/Yerevan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Azores\",\n-                                        \"value\": \"Atlantic/Azores\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Bermuda\",\n-                                        \"value\": \"Atlantic/Bermuda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Canary\",\n-                                        \"value\": \"Atlantic/Canary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Cape_Verde\",\n-                                        \"value\": \"Atlantic/Cape_Verde\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faeroe\",\n-                                        \"value\": \"Atlantic/Faeroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faroe\",\n-                                        \"value\": \"Atlantic/Faroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n-                                        \"value\": \"Atlantic/Jan_Mayen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Madeira\",\n-                                        \"value\": \"Atlantic/Madeira\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Reykjavik\",\n-                                        \"value\": \"Atlantic/Reykjavik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/South_Georgia\",\n-                                        \"value\": \"Atlantic/South_Georgia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/St_Helena\",\n-                                        \"value\": \"Atlantic/St_Helena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Stanley\",\n-                                        \"value\": \"Atlantic/Stanley\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/ACT\",\n-                                        \"value\": \"Australia/ACT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Adelaide\",\n-                                        \"value\": \"Australia/Adelaide\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Brisbane\",\n-                                        \"value\": \"Australia/Brisbane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Broken_Hill\",\n-                                        \"value\": \"Australia/Broken_Hill\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Canberra\",\n-                                        \"value\": \"Australia/Canberra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Currie\",\n-                                        \"value\": \"Australia/Currie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Darwin\",\n-                                        \"value\": \"Australia/Darwin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Eucla\",\n-                                        \"value\": \"Australia/Eucla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Hobart\",\n-                                        \"value\": \"Australia/Hobart\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/LHI\",\n-                                        \"value\": \"Australia/LHI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lindeman\",\n-                                        \"value\": \"Australia/Lindeman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lord_Howe\",\n-                                        \"value\": \"Australia/Lord_Howe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Melbourne\",\n-                                        \"value\": \"Australia/Melbourne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/NSW\",\n-                                        \"value\": \"Australia/NSW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/North\",\n-                                        \"value\": \"Australia/North\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Perth\",\n-                                        \"value\": \"Australia/Perth\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Queensland\",\n-                                        \"value\": \"Australia/Queensland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/South\",\n-                                        \"value\": \"Australia/South\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Sydney\",\n-                                        \"value\": \"Australia/Sydney\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Tasmania\",\n-                                        \"value\": \"Australia/Tasmania\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Victoria\",\n-                                        \"value\": \"Australia/Victoria\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/West\",\n-                                        \"value\": \"Australia/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Yancowinna\",\n-                                        \"value\": \"Australia/Yancowinna\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/Acre\",\n-                                        \"value\": \"Brazil/Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/DeNoronha\",\n-                                        \"value\": \"Brazil/DeNoronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/East\",\n-                                        \"value\": \"Brazil/East\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/West\",\n-                                        \"value\": \"Brazil/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CET\",\n-                                        \"value\": \"CET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CST6CDT\",\n-                                        \"value\": \"CST6CDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Atlantic\",\n-                                        \"value\": \"Canada/Atlantic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Central\",\n-                                        \"value\": \"Canada/Central\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Eastern\",\n-                                        \"value\": \"Canada/Eastern\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Mountain\",\n-                                        \"value\": \"Canada/Mountain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Newfoundland\",\n-                                        \"value\": \"Canada/Newfoundland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Pacific\",\n-                                        \"value\": \"Canada/Pacific\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Saskatchewan\",\n-                                        \"value\": \"Canada/Saskatchewan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Yukon\",\n-                                        \"value\": \"Canada/Yukon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/Continental\",\n-                                        \"value\": \"Chile/Continental\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/EasterIsland\",\n-                                        \"value\": \"Chile/EasterIsland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Cuba\",\n-                                        \"value\": \"Cuba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EET\",\n-                                        \"value\": \"EET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EST5EDT\",\n-                                        \"value\": \"EST5EDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Egypt\",\n-                                        \"value\": \"Egypt\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Eire\",\n-                                        \"value\": \"Eire\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT\",\n-                                        \"value\": \"Etc/GMT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+0\",\n-                                        \"value\": \"Etc/GMT+0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+1\",\n-                                        \"value\": \"Etc/GMT+1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+10\",\n-                                        \"value\": \"Etc/GMT+10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+11\",\n-                                        \"value\": \"Etc/GMT+11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+12\",\n-                                        \"value\": \"Etc/GMT+12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+2\",\n-                                        \"value\": \"Etc/GMT+2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+3\",\n-                                        \"value\": \"Etc/GMT+3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+4\",\n-                                        \"value\": \"Etc/GMT+4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+5\",\n-                                        \"value\": \"Etc/GMT+5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+6\",\n-                                        \"value\": \"Etc/GMT+6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+7\",\n-                                        \"value\": \"Etc/GMT+7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+8\",\n-                                        \"value\": \"Etc/GMT+8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+9\",\n-                                        \"value\": \"Etc/GMT+9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-0\",\n-                                        \"value\": \"Etc/GMT-0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-1\",\n-                                        \"value\": \"Etc/GMT-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-10\",\n-                                        \"value\": \"Etc/GMT-10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-11\",\n-                                        \"value\": \"Etc/GMT-11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-12\",\n-                                        \"value\": \"Etc/GMT-12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-13\",\n-                                        \"value\": \"Etc/GMT-13\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-14\",\n-                                        \"value\": \"Etc/GMT-14\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-2\",\n-                                        \"value\": \"Etc/GMT-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-3\",\n-                                        \"value\": \"Etc/GMT-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-4\",\n-                                        \"value\": \"Etc/GMT-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-5\",\n-                                        \"value\": \"Etc/GMT-5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-6\",\n-                                        \"value\": \"Etc/GMT-6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-7\",\n-                                        \"value\": \"Etc/GMT-7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-8\",\n-                                        \"value\": \"Etc/GMT-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-9\",\n-                                        \"value\": \"Etc/GMT-9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT0\",\n-                                        \"value\": \"Etc/GMT0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Greenwich\",\n-                                        \"value\": \"Etc/Greenwich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UCT\",\n-                                        \"value\": \"Etc/UCT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UTC\",\n-                                        \"value\": \"Etc/UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Universal\",\n-                                        \"value\": \"Etc/Universal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Zulu\",\n-                                        \"value\": \"Etc/Zulu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Amsterdam\",\n-                                        \"value\": \"Europe/Amsterdam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Andorra\",\n-                                        \"value\": \"Europe/Andorra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Astrakhan\",\n-                                        \"value\": \"Europe/Astrakhan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Athens\",\n-                                        \"value\": \"Europe/Athens\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belfast\",\n-                                        \"value\": \"Europe/Belfast\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belgrade\",\n-                                        \"value\": \"Europe/Belgrade\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Berlin\",\n-                                        \"value\": \"Europe/Berlin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bratislava\",\n-                                        \"value\": \"Europe/Bratislava\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Brussels\",\n-                                        \"value\": \"Europe/Brussels\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bucharest\",\n-                                        \"value\": \"Europe/Bucharest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Budapest\",\n-                                        \"value\": \"Europe/Budapest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Busingen\",\n-                                        \"value\": \"Europe/Busingen\"\n-                                    },\n+                            \"snmp-usm-security-names\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Chisinau\",\n-                                        \"value\": \"Europe/Chisinau\"\n+                                        \"dependentValues\": [\n+                                            \"usm-security-names\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Copenhagen\",\n-                                        \"value\": \"Europe/Copenhagen\"\n+                                        \"dependentValues\": [\n+                                            \"noAuthNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Dublin\",\n-                                        \"value\": \"Europe/Dublin\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"SNMP Users Security Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-security-names\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-usm-users-file-path\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Gibraltar\",\n-                                        \"value\": \"Europe/Gibraltar\"\n+                                        \"dependentValues\": [\n+                                            \"usm-json-file-path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Guernsey\",\n-                                        \"value\": \"Europe/Guernsey\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The path of the json file containing the user credentials for SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"USM Users JSON File Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-users-file-path\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-usm-users-json-content\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Helsinki\",\n-                                        \"value\": \"Europe/Helsinki\"\n+                                        \"dependentValues\": [\n+                                            \"usm-json-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Isle_of_Man\",\n-                                        \"value\": \"Europe/Isle_of_Man\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"USM Users JSON content\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-users-json-content\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-usm-users-source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Istanbul\",\n-                                        \"value\": \"Europe/Istanbul\"\n+                                        \"description\": \"The JSON containing the USM users\",\n+                                        \"displayName\": \"Json Content\",\n+                                        \"value\": \"usm-json-content\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Jersey\",\n-                                        \"value\": \"Europe/Jersey\"\n+                                        \"description\": \"The path of the JSON file containing the USM users\",\n+                                        \"displayName\": \"Json File Path\",\n+                                        \"value\": \"usm-json-file-path\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kaliningrad\",\n-                                        \"value\": \"Europe/Kaliningrad\"\n-                                    },\n+                                        \"description\": \"In case of noAuthNoPriv security level - the list of security names separated by commas\",\n+                                        \"displayName\": \"Security Names\",\n+                                        \"value\": \"usm-security-names\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kiev\",\n-                                        \"value\": \"Europe/Kiev\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ways to provide USM User data\",\n+                                \"displayName\": \"USM Users Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-users-source\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kirov\",\n-                                        \"value\": \"Europe/Kirov\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kyiv\",\n-                                        \"value\": \"Europe/Kyiv\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Lisbon\",\n-                                        \"value\": \"Europe/Lisbon\"\n-                                    },\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"listen\",\n+                            \"snmp\",\n+                            \"trap\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.snmp.processors.ListenTrapSNMP\",\n+                        \"typeDescription\": \"Receives information from SNMP Agent and outputs a FlowFile with information in attributes and without any content\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Attributes retrieved from the SNMP response. It may include: snmp$errorIndex, snmp$errorStatus, snmp$errorStatusText, snmp$nonRepeaters, snmp$requestID, snmp$type, snmp$variableBindings\",\n+                                \"name\": \"snmp$*\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Ljubljana\",\n-                                        \"value\": \"Europe/Ljubljana\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-authentication-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/London\",\n-                                        \"value\": \"Europe/London\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Luxembourg\",\n-                                        \"value\": \"Europe/Luxembourg\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Madrid\",\n-                                        \"value\": \"Europe/Madrid\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Malta\",\n-                                        \"value\": \"Europe/Malta\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Mariehamn\",\n-                                        \"value\": \"Europe/Mariehamn\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Minsk\",\n-                                        \"value\": \"Europe/Minsk\"\n-                                    },\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Monaco\",\n-                                        \"value\": \"Europe/Monaco\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Moscow\",\n-                                        \"value\": \"Europe/Moscow\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Nicosia\",\n-                                        \"value\": \"Europe/Nicosia\"\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Oslo\",\n-                                        \"value\": \"Europe/Oslo\"\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Paris\",\n-                                        \"value\": \"Europe/Paris\"\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Podgorica\",\n-                                        \"value\": \"Europe/Podgorica\"\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Prague\",\n-                                        \"value\": \"Europe/Prague\"\n-                                    },\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Riga\",\n-                                        \"value\": \"Europe/Riga\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-private-protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Rome\",\n-                                        \"value\": \"Europe/Rome\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-retries\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Samara\",\n-                                        \"value\": \"Europe/Samara\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/San_Marino\",\n-                                        \"value\": \"Europe/San_Marino\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Sarajevo\",\n-                                        \"value\": \"Europe/Sarajevo\"\n-                                    },\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Saratov\",\n-                                        \"value\": \"Europe/Saratov\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Simferopol\",\n-                                        \"value\": \"Europe/Simferopol\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-agent-address\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Skopje\",\n-                                        \"value\": \"Europe/Skopje\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The address where the SNMP Manager sends the trap.\",\n+                                \"displayName\": \"SNMP Trap Agent Address\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-agent-address\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-enterprise-oid\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Sofia\",\n-                                        \"value\": \"Europe/Sofia\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enterprise is the vendor identification (OID) for the network management sub-system that generated the trap.\",\n+                                \"displayName\": \"Enterprise OID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-enterprise-oid\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-generic-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Stockholm\",\n-                                        \"value\": \"Europe/Stockholm\"\n+                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n+                                        \"displayName\": \"Cold Start\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tallinn\",\n-                                        \"value\": \"Europe/Tallinn\"\n+                                        \"description\": \"A warmStart trap signifies that the sending protocol entity is reinitializing itself such that neither the agent configuration nor the protocol entity implementation is altered.\",\n+                                        \"displayName\": \"Warm Start\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tirane\",\n-                                        \"value\": \"Europe/Tirane\"\n+                                        \"description\": \"A linkDown trap signifies that the sending protocol entity recognizes a failure in one of the communication links represented in the agent's configuration.\",\n+                                        \"displayName\": \"Link Down\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tiraspol\",\n-                                        \"value\": \"Europe/Tiraspol\"\n+                                        \"description\": \"A linkUp trap signifies that the sending protocol entity recognizes that one of the communication links represented in the agent's configuration has come up.\",\n+                                        \"displayName\": \"Link Up\",\n+                                        \"value\": \"3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Ulyanovsk\",\n-                                        \"value\": \"Europe/Ulyanovsk\"\n+                                        \"description\": \"An authenticationFailure trap signifies that the sending protocol entity is the addressee of a protocol message that is not properly authenticated. While implementations of the SNMP must be capable of generating this trap, they must also be capable of suppressing the emission of such traps via an implementation- specific mechanism.\",\n+                                        \"displayName\": \"Authentication Failure\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Uzhgorod\",\n-                                        \"value\": \"Europe/Uzhgorod\"\n+                                        \"description\": \"An egpNeighborLoss trap signifies that an EGP neighbor for whom the sending protocol entity was an EGP peer has been marked down and the peer relationship no longer obtains\",\n+                                        \"displayName\": \"EGP Neighborloss\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vaduz\",\n-                                        \"value\": \"Europe/Vaduz\"\n+                                        \"description\": \"An enterpriseSpecific trap signifies that a particular enterprise-specific trap has occurred which can be defined in the Specific Trap Type field.\",\n+                                        \"displayName\": \"Enterprise Specific\",\n+                                        \"value\": \"6\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vatican\",\n-                                        \"value\": \"Europe/Vatican\"\n-                                    },\n+                                        \"description\": \"Provide the Generic Trap Type with the \\\"generic-trap-type\\\" flowfile attribute.\",\n+                                        \"displayName\": \"With \\\"generic-trap-type\\\" FlowFile Attribute\",\n+                                        \"value\": \"generic-trap-type\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vienna\",\n-                                        \"value\": \"Europe/Vienna\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Generic trap type is an integer in the range of 0 to 6. See processor usage for details.\",\n+                                \"displayName\": \"Generic Trap Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-trap-generic-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-manager-host\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The host of the SNMP Manager where the trap is sent.\",\n+                                \"displayName\": \"SNMP Manager Host\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-manager-host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-manager-port\": {\n+                                \"description\": \"The port of the SNMP Manager where the trap is sent.\",\n+                                \"displayName\": \"SNMP Manager Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-manager-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-oid-value\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Vilnius\",\n-                                        \"value\": \"Europe/Vilnius\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The value of the trap OID.\",\n+                                \"displayName\": \"Trap OID Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-oid-value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-specific-type\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Volgograd\",\n-                                        \"value\": \"Europe/Volgograd\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Warsaw\",\n-                                        \"value\": \"Europe/Warsaw\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"6\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Generic Trap Type\",\n+                                        \"propertyName\": \"snmp-trap-generic-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specific trap type is a number that further specifies the nature of the event that generated the trap in the case of traps of generic type 6 (enterpriseSpecific). The interpretation of this code is vendor-specific.\",\n+                                \"displayName\": \"Specific Trap Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-specific-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zagreb\",\n-                                        \"value\": \"Europe/Zagreb\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zaporozhye\",\n-                                        \"value\": \"Europe/Zaporozhye\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zurich\",\n-                                        \"value\": \"Europe/Zurich\"\n-                                    },\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"send\",\n+                            \"snmp\",\n+                            \"trap\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.snmp.processors.SendTrapSNMP\",\n+                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB\",\n-                                        \"value\": \"GB\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n+                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-authentication-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB-Eire\",\n-                                        \"value\": \"GB-Eire\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT\",\n-                                        \"value\": \"GMT\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT0\",\n-                                        \"value\": \"GMT0\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Greenwich\",\n-                                        \"value\": \"Greenwich\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Hongkong\",\n-                                        \"value\": \"Hongkong\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iceland\",\n-                                        \"value\": \"Iceland\"\n-                                    },\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Antananarivo\",\n-                                        \"value\": \"Indian/Antananarivo\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n+                                \"displayName\": \"SNMP Authentication Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Chagos\",\n-                                        \"value\": \"Indian/Chagos\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMPv1 and SNMPv2 use communities to establish trust between managers and agents. Most agents support three community names, one each for read-only, read-write and trap. These three community strings control different types of activities. The read-only community applies to get requests. The read-write community string applies to set requests. The trap community string applies to receipt of traps.\",\n+                                \"displayName\": \"SNMP Community\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-hostname\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-port\": {\n+                                \"defaultValue\": \"161\",\n+                                \"description\": \"Port of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Christmas\",\n-                                        \"value\": \"Indian/Christmas\"\n+                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"DES\",\n+                                        \"value\": \"DES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Cocos\",\n-                                        \"value\": \"Indian/Cocos\"\n+                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n+                                        \"displayName\": \"3DES\",\n+                                        \"value\": \"3DES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Comoro\",\n-                                        \"value\": \"Indian/Comoro\"\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES128\",\n+                                        \"value\": \"AES128\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Kerguelen\",\n-                                        \"value\": \"Indian/Kerguelen\"\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES192\",\n+                                        \"value\": \"AES192\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mahe\",\n-                                        \"value\": \"Indian/Mahe\"\n-                                    },\n+                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Maldives\",\n-                                        \"value\": \"Indian/Maldives\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n+                                \"displayName\": \"SNMP Privacy Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-private-protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mauritius\",\n-                                        \"value\": \"Indian/Mauritius\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n+                                    }\n+                                ],\n+                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n+                                \"displayName\": \"SNMP Privacy Passphrase\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Set the number of retries when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Number of Retries\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-retries\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Mayotte\",\n-                                        \"value\": \"Indian/Mayotte\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Reunion\",\n-                                        \"value\": \"Indian/Reunion\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iran\",\n-                                        \"value\": \"Iran\"\n-                                    },\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Israel\",\n-                                        \"value\": \"Israel\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Jamaica\",\n-                                        \"value\": \"Jamaica\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-timeout\": {\n+                                \"defaultValue\": \"5000\",\n+                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n+                                \"displayName\": \"Timeout (ms)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Japan\",\n-                                        \"value\": \"Japan\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Kwajalein\",\n-                                        \"value\": \"Kwajalein\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Libya\",\n-                                        \"value\": \"Libya\"\n-                                    },\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SNMPv1\",\n+                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n+                                \"displayName\": \"SNMP Version\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"oid\",\n+                            \"set\",\n+                            \"snmp\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.snmp.processors.SetSNMP\",\n+                        \"typeDescription\": \"Based on incoming FlowFile attributes, the processor will execute SNMP Set requests. When finding attributes with the name snmp$<OID>, the processor will attempt to set the value of the attribute to the corresponding OID given in the attribute name.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n+                                \"name\": \"snmp$<OID>\"\n+                            },\n+                            {\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n+                            },\n+                            {\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n+                            },\n+                            {\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n+                            },\n+                            {\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"key-password\": {\n+                                \"description\": \"Password used for decrypting Private Keys\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Secret Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"keyring-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"Key\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"Private\",\n+                            \"RFC 4880\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPrivateKeyService\",\n+                        \"typeDescription\": \"PGP Private Key Service provides Private Keys loaded from files or properties\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Public Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Public Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"keyring-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"Key\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"Private\",\n+                            \"RFC 4880\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.pgp.service.standard.StandardPGPPublicKeyService\",\n+                        \"typeDescription\": \"PGP Public Key Service providing Public Keys loaded from files\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credential-configuration-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MET\",\n-                                        \"value\": \"MET\"\n+                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n+                                        \"displayName\": \"Default Credential\",\n+                                        \"value\": \"default-credential\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MST7MDT\",\n-                                        \"value\": \"MST7MDT\"\n-                                    },\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"managed-identity\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default-credential\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Credential Configuration Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credential-configuration-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaNorte\",\n-                                        \"value\": \"Mexico/BajaNorte\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"managed-identity\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credential Configuration Strategy\",\n+                                        \"propertyName\": \"credential-configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"credentials\",\n+                            \"provider\",\n+                            \"security\",\n+                            \"session\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.StandardAzureCredentialsControllerService\",\n+                        \"typeDescription\": \"Provide credentials to use with an Azure client.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azure-cosmos-db-consistency-level\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaSur\",\n-                                        \"value\": \"Mexico/BajaSur\"\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Mexico/General\",\n-                                        \"value\": \"Mexico/General\"\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NZ\",\n-                                        \"value\": \"NZ\"\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NZ-CHAT\",\n-                                        \"value\": \"NZ-CHAT\"\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Navajo\",\n-                                        \"value\": \"Navajo\"\n-                                    },\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-key\": {\n+                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n+                                \"displayName\": \"Cosmos DB Access Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"azure-cosmos-db-uri\": {\n+                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n+                                \"displayName\": \"Cosmos DB URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cosmos\",\n+                            \"document\",\n+                            \"service\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.cosmos.document.AzureCosmosDBClientService\",\n+                        \"typeDescription\": \"Provides a controller service that configures a connection to Cosmos DB (Core SQL API)  and provides access to that connection to other Cosmos DB-related components.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application Client ID\": {\n+                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n+                                \"displayName\": \"Application Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Client ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Application Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PRC\",\n-                                        \"value\": \"PRC\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Key for Authentication\",\n+                                \"displayName\": \"Application Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Application Tenant ID\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PST8PDT\",\n-                                        \"value\": \"PST8PDT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n+                                \"displayName\": \"Application Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Tenant ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Apia\",\n-                                        \"value\": \"Pacific/Apia\"\n+                                        \"description\": \"Azure Application Registration with Application Key\",\n+                                        \"displayName\": \"Application Credentials\",\n+                                        \"value\": \"APPLICATION_CREDENTIALS\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Auckland\",\n-                                        \"value\": \"Pacific/Auckland\"\n-                                    },\n+                                        \"description\": \"Azure Managed Identity\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MANAGED_IDENTITY\",\n+                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n+                                \"displayName\": \"Authentication Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Authentication Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cluster URI\": {\n+                                \"description\": \"Azure Data Explorer Cluster URI\",\n+                                \"displayName\": \"Cluster URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cluster URI\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoIngestService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\",\n+                            \"azure\",\n+                            \"ingest\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoIngestService\",\n+                        \"typeDescription\": \"Sends batches of flowfile content or stream flowfile content to an Azure ADX cluster.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application Client ID\": {\n+                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n+                                \"displayName\": \"Application Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Client ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Application Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Bougainville\",\n-                                        \"value\": \"Pacific/Bougainville\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Key for Authentication\",\n+                                \"displayName\": \"Application Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Application Tenant ID\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Chatham\",\n-                                        \"value\": \"Pacific/Chatham\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n+                                \"displayName\": \"Application Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Tenant ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Chuuk\",\n-                                        \"value\": \"Pacific/Chuuk\"\n+                                        \"description\": \"Azure Application Registration with Application Key\",\n+                                        \"displayName\": \"Application Credentials\",\n+                                        \"value\": \"APPLICATION_CREDENTIALS\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Easter\",\n-                                        \"value\": \"Pacific/Easter\"\n-                                    },\n+                                        \"description\": \"Azure Managed Identity\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MANAGED_IDENTITY\",\n+                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n+                                \"displayName\": \"Authentication Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Authentication Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Cluster URI\": {\n+                                \"description\": \"Azure Data Explorer Cluster URI\",\n+                                \"displayName\": \"Cluster URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cluster URI\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoQueryService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoQueryService\",\n+                        \"typeDescription\": \"Standard implementation of Kusto Query Service for Azure Data Explorer\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Efate\",\n-                                        \"value\": \"Pacific/Efate\"\n+                                        \"description\": \"Azure Event Hub shared access key\",\n+                                        \"displayName\": \"Shared Access Key\",\n+                                        \"value\": \"SHARED_ACCESS_KEY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Enderbury\",\n-                                        \"value\": \"Pacific/Enderbury\"\n-                                    },\n+                                        \"description\": \"The Default Azure Credential will read credentials from standard environment variables and will also attempt to read Managed Identity credentials when running in Microsoft Azure environments\",\n+                                        \"displayName\": \"Default Azure Credential\",\n+                                        \"value\": \"DEFAULT_AZURE_CREDENTIAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n+                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n+                                \"displayName\": \"Authentication Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Authentication Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Provides the Event Hub Name for connections\",\n+                                \"displayName\": \"Event Hub Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Provides provides the host for connecting to Azure Event Hubs\",\n+                                \"displayName\": \"Event Hub Namespace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Partition Key\": {\n+                                \"description\": \"A hint for Azure Event Hub message broker how to distribute messages across one or more partitions\",\n+                                \"displayName\": \"Partition Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Partition Key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Fakaofo\",\n-                                        \"value\": \"Pacific/Fakaofo\"\n+                                        \"description\": \"Default Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Fiji\",\n-                                        \"value\": \"Pacific/Fiji\"\n+                                        \"description\": \"China Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Funafuti\",\n-                                        \"value\": \"Pacific/Funafuti\"\n+                                        \"description\": \"Germany Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Galapagos\",\n-                                        \"value\": \"Pacific/Galapagos\"\n-                                    },\n+                                        \"description\": \"United States Government Endpoint\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"Provides the domain for connecting to Azure Event Hubs\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Gambier\",\n-                                        \"value\": \"Pacific/Gambier\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SHARED_ACCESS_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of the shared access policy. This policy must have Send claims\",\n+                                \"displayName\": \"Shared Access Policy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Guadalcanal\",\n-                                        \"value\": \"Pacific/Guadalcanal\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SHARED_ACCESS_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The primary or secondary key of the shared access policy\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Guam\",\n-                                        \"value\": \"Pacific/Guam\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Honolulu\",\n-                                        \"value\": \"Pacific/Honolulu\"\n-                                    },\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-sink-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-sink-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.eventhub.AzureEventHubRecordSink\",\n+                        \"typeDescription\": \"Format and send Records to Azure Event Hubs\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credentials-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Johnston\",\n-                                        \"value\": \"Pacific/Johnston\"\n+                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n+                                        \"displayName\": \"Account Key\",\n+                                        \"value\": \"ACCOUNT_KEY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kanton\",\n-                                        \"value\": \"Pacific/Kanton\"\n+                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n+                                        \"displayName\": \"SAS Token\",\n+                                        \"value\": \"SAS_TOKEN\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kiritimati\",\n-                                        \"value\": \"Pacific/Kiritimati\"\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kosrae\",\n-                                        \"value\": \"Pacific/Kosrae\"\n-                                    },\n+                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n+                                        \"displayName\": \"Service Principal\",\n+                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SAS_TOKEN\",\n+                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n+                                \"displayName\": \"Credentials Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credentials-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kwajalein\",\n-                                        \"value\": \"Pacific/Kwajalein\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Majuro\",\n-                                        \"value\": \"Pacific/Majuro\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\",\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"service-principal-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Marquesas\",\n-                                        \"value\": \"Pacific/Marquesas\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-client-secret\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Midway\",\n-                                        \"value\": \"Pacific/Midway\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password of the Client/Application.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-tenant-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Nauru\",\n-                                        \"value\": \"Pacific/Nauru\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-tenant-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Niue\",\n-                                        \"value\": \"Pacific/Niue\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"ACCOUNT_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token, Managed Identity or Service Principal instead for fine-grained control with policies. There are certain risks in allowing the account key to be stored as a FlowFile attribute. While it does provide for a more flexible flow by allowing the account key to be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name. There are certain risks in allowing the account name to be stored as a FlowFile attribute. While it does provide for a more flexible flow by allowing the account name to be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"dfs.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Norfolk\",\n-                                        \"value\": \"Pacific/Norfolk\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SAS_TOKEN\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Shared Access Signature token (the leading '?' may be included) There are certain risks in allowing the SAS token to be stored as a FlowFile attribute. While it does provide for a more flexible flow by allowing the SAS token to be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). In addition, the provenance repositories may be put on encrypted disk partitions.\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"adls\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerService\",\n+                        \"typeDescription\": \"Defines credentials for ADLS processors.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'adls.credentials.name' attribute contains the name of the dynamic property, then the ADLSCredentialsService (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register ADLSCredentialsService\",\n+                                \"value\": \"The ADLSCredentialsService\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"adls\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerServiceLookup\",\n+                        \"typeDescription\": \"Provides an ADLSCredentialsService that can be used to dynamically select another ADLSCredentialsService. This service requires an attribute named 'adls.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'adls.credentials.name' will be used to select the ADLSCredentialsService that has been registered with that name. This will allow multiple ADLSCredentialsServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'adls.credentials.name' attribute.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"container-name\": {\n+                                \"defaultValue\": \"${azure.container}\",\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"file\",\n+                            \"microsoft\",\n+                            \"resource\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureBlobStorageFileResourceService\",\n+                        \"typeDescription\": \"Provides an Azure Blob Storage file resource for other components.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"directory-name\": {\n+                                \"defaultValue\": \"${azure.directory}\",\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"defaultValue\": \"${azure.filesystem}\",\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"file\",\n+                            \"microsoft\",\n+                            \"resource\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureDataLakeStorageFileResourceService\",\n+                        \"typeDescription\": \"Provides an Azure Data Lake Storage (ADLS) file resource for other components.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register AzureStorageCredentialsService_v12\",\n+                                \"value\": \"The AzureStorageCredentialsService_v12\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerServiceLookup_v12\",\n+                        \"typeDescription\": \"Provides an AzureStorageCredentialsService_v12 that can be used to dynamically select another AzureStorageCredentialsService_v12. This service requires an attribute named 'azure.storage.credentials.name' to be passed in, and will throw an exception if the attribute is missing. The value of 'azure.storage.credentials.name' will be used to select the AzureStorageCredentialsService_v12 that has been registered with that name. This will allow multiple AzureStorageCredentialsServices_v12 to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'azure.storage.credentials.name' attribute.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credentials-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Noumea\",\n-                                        \"value\": \"Pacific/Noumea\"\n+                                        \"description\": \"The primary or secondary Account Key of the storage account that provides full access to the resources in the account\",\n+                                        \"displayName\": \"Account Key\",\n+                                        \"value\": \"ACCOUNT_KEY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pago_Pago\",\n-                                        \"value\": \"Pacific/Pago_Pago\"\n+                                        \"description\": \"SAS (Shared Access Signature) Token generated for accessing resources in the storage account\",\n+                                        \"displayName\": \"SAS Token\",\n+                                        \"value\": \"SAS_TOKEN\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Palau\",\n-                                        \"value\": \"Pacific/Palau\"\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pitcairn\",\n-                                        \"value\": \"Pacific/Pitcairn\"\n-                                    },\n+                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n+                                        \"displayName\": \"Service Principal\",\n+                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SAS_TOKEN\",\n+                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n+                                \"displayName\": \"Credentials Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credentials-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pohnpei\",\n-                                        \"value\": \"Pacific/Pohnpei\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Ponape\",\n-                                        \"value\": \"Pacific/Ponape\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\",\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"service-principal-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Port_Moresby\",\n-                                        \"value\": \"Pacific/Port_Moresby\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-client-secret\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Rarotonga\",\n-                                        \"value\": \"Pacific/Rarotonga\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Password of the Client/Application.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-tenant-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Saipan\",\n-                                        \"value\": \"Pacific/Saipan\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-tenant-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Samoa\",\n-                                        \"value\": \"Pacific/Samoa\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"ACCOUNT_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended one uses Shared Access Signature (SAS) token, Managed Identity or Service Principal instead for fine-grained control with policies.\",\n+                                \"displayName\": \"Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"blob.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tahiti\",\n-                                        \"value\": \"Pacific/Tahiti\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SAS_TOKEN\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Shared Access Signature token (the leading '?' may be included)\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"credentials\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12\",\n+                        \"typeDescription\": \"Provides credentials for Azure Storage processors using Azure Storage client library v12.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azure-credentials-service\": {\n+                                \"description\": \"Controller service used to obtain Azure credentials to be used with Key Vault client.\",\n+                                \"displayName\": \"Azure Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"group-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression matching on the 'group-name' tag value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' tag value that matches this Regex will not be fetched.\",\n+                                \"displayName\": \"Group Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"group-name-pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-vault-uri\": {\n+                                \"description\": \"Vault URI of the Key Vault that contains the secrets\",\n+                                \"displayName\": \"Key Vault URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-vault-uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"key\",\n+                            \"keyvault\",\n+                            \"secrets\",\n+                            \"vault\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.azure.AzureKeyVaultSecretsParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from Azure Key Vault Secrets.  Each secret becomes a Parameter, which map to a Parameter Group byadding a secret tag named 'group-name'.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tarawa\",\n-                                        \"value\": \"Pacific/Tarawa\"\n+                                        \"description\": \"Conflicting records will not be inserted, and FlowFile will not be routed to failure\",\n+                                        \"displayName\": \"Ignore\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tongatapu\",\n-                                        \"value\": \"Pacific/Tongatapu\"\n-                                    },\n+                                        \"description\": \"Conflicting records will be upserted, and FlowFile will not be routed to failure\",\n+                                        \"displayName\": \"Upsert\",\n+                                        \"value\": \"UPSERT\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"IGNORE\",\n+                                \"description\": \"Choose whether to ignore or upsert when conflict error occurs during insertion\",\n+                                \"displayName\": \"Cosmos DB Conflict Handling Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-connection-service\": {\n+                                \"description\": \"If configured, the controller service used to obtain the connection string and access key\",\n+                                \"displayName\": \"Cosmos DB Connection Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-connection-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"azure-cosmos-db-consistency-level\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Truk\",\n-                                        \"value\": \"Pacific/Truk\"\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wake\",\n-                                        \"value\": \"Pacific/Wake\"\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wallis\",\n-                                        \"value\": \"Pacific/Wallis\"\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Yap\",\n-                                        \"value\": \"Pacific/Yap\"\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Poland\",\n-                                        \"value\": \"Poland\"\n-                                    },\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-container-id\": {\n+                                \"description\": \"The unique identifier for the container\",\n+                                \"displayName\": \"Cosmos DB Container ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-container-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-key\": {\n+                                \"description\": \"Cosmos DB Access Key from Azure Portal (Settings->Keys). Choose a read-write key to enable database or container creation at run time\",\n+                                \"displayName\": \"Cosmos DB Access Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"azure-cosmos-db-name\": {\n+                                \"description\": \"The database name or id. This is used as the namespace for document collections or containers\",\n+                                \"displayName\": \"Cosmos DB Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-partition-key\": {\n+                                \"description\": \"The partition key used to distribute data among servers\",\n+                                \"displayName\": \"Cosmos DB Partition Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-partition-key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-uri\": {\n+                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n+                                \"displayName\": \"Cosmos DB URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-uri\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"insert-batch-size\": {\n+                                \"defaultValue\": \"20\",\n+                                \"description\": \"The number of records to group together for one single insert operation against Cosmos DB\",\n+                                \"displayName\": \"Insert Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"insert-batch-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that are written to Cosmos DB are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cosmos\",\n+                            \"insert\",\n+                            \"put\",\n+                            \"record\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.cosmos.document.PutAzureCosmosDBRecord\",\n+                        \"typeDescription\": \"This processor is a record-aware processor for inserting data into Cosmos DB with Core SQL API. It uses a configured record reader and schema to read an incoming record set from the body of a Flowfile and then inserts those records into a configured Cosmos DB Container.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Data Format\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Portugal\",\n-                                        \"value\": \"Portugal\"\n+                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec\",\n+                                        \"displayName\": \"avro\",\n+                                        \"value\": \"avro\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ROK\",\n-                                        \"value\": \"ROK\"\n+                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec.\",\n+                                        \"displayName\": \"apacheavro\",\n+                                        \"value\": \"apacheavro\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Singapore\",\n-                                        \"value\": \"Singapore\"\n+                                        \"description\": \"A text file with comma-separated values (,). For more information, see RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files.\",\n+                                        \"displayName\": \"csv\",\n+                                        \"value\": \"csv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/AST4\",\n-                                        \"value\": \"SystemV/AST4\"\n+                                        \"description\": \"A text file containing JSON objects separated by \\\\n or \\\\r\\\\n. For more information, see JSON Lines (JSONL).\",\n+                                        \"displayName\": \"json\",\n+                                        \"value\": \"json\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/AST4ADT\",\n-                                        \"value\": \"SystemV/AST4ADT\"\n+                                        \"description\": \"A text file containing a JSON array of property containers (each representing a record) or any number of property containers separated by spaces, \\\\n or \\\\r\\\\n. Each property container may be spread across multiple lines. This format is preferable to JSON unless the data is not property containers.\",\n+                                        \"displayName\": \"multijson\",\n+                                        \"value\": \"multijson\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/CST6\",\n-                                        \"value\": \"SystemV/CST6\"\n+                                        \"description\": \"An ORC file.\",\n+                                        \"displayName\": \"orc\",\n+                                        \"value\": \"orc\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/CST6CDT\",\n-                                        \"value\": \"SystemV/CST6CDT\"\n+                                        \"description\": \"A parquet file.\",\n+                                        \"displayName\": \"parquet\",\n+                                        \"value\": \"parquet\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5\",\n-                                        \"value\": \"SystemV/EST5\"\n+                                        \"description\": \"A text file with values separated by vertical bars (|).\",\n+                                        \"displayName\": \"psv\",\n+                                        \"value\": \"psv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5EDT\",\n-                                        \"value\": \"SystemV/EST5EDT\"\n+                                        \"description\": \"A text file with values separated by semicolons (;).\",\n+                                        \"displayName\": \"scsv\",\n+                                        \"value\": \"scsv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/HST10\",\n-                                        \"value\": \"SystemV/HST10\"\n+                                        \"description\": \"A text file with SOH-separated values. (SOH is the ASCII code point 1. This format is used by Hive in HDInsight).\",\n+                                        \"displayName\": \"sohsv\",\n+                                        \"value\": \"sohsv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/MST7\",\n-                                        \"value\": \"SystemV/MST7\"\n+                                        \"description\": \"A text file with tab delimited values (\\\\t).\",\n+                                        \"displayName\": \"tsv\",\n+                                        \"value\": \"tsv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/MST7MDT\",\n-                                        \"value\": \"SystemV/MST7MDT\"\n+                                        \"description\": \"A text file with tab-delimited values (\\\\t). A backslash (\\\\) is used as escape character.\",\n+                                        \"displayName\": \"tsve\",\n+                                        \"value\": \"tsve\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/PST8\",\n-                                        \"value\": \"SystemV/PST8\"\n-                                    },\n+                                        \"description\": \"A text file with lines separated by \\\\n. Empty lines are skipped\",\n+                                        \"displayName\": \"txt\",\n+                                        \"value\": \"txt\"\n+                                    }\n+                                ],\n+                                \"description\": \"The format of the data that is sent to Azure Data Explorer. Supported formats include: avro, csv, json\",\n+                                \"displayName\": \"Data Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Data Format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Name\": {\n+                                \"description\": \"Azure Data Explorer Database Name for ingesting data\",\n+                                \"displayName\": \"Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingest Mapping Name\": {\n+                                \"description\": \"The name of the mapping responsible for storing the data in the appropriate columns.\",\n+                                \"displayName\": \"Ingest Mapping Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Ingest Mapping Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingest Status Polling Interval\": {\n+                                \"defaultValue\": \"5 s\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/PST8PDT\",\n-                                        \"value\": \"SystemV/PST8PDT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n+                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                    }\n+                                ],\n+                                \"description\": \"Defines the value of interval of time to poll for ingestion status\",\n+                                \"displayName\": \"Ingest Status Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ingest Status Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingest Status Polling Timeout\": {\n+                                \"defaultValue\": \"5 m\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/YST9\",\n-                                        \"value\": \"SystemV/YST9\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n+                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                    }\n+                                ],\n+                                \"description\": \"Defines the total amount time to poll for ingestion status\",\n+                                \"displayName\": \"Ingest Status Polling Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ingest Status Polling Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingestion Ignore First Record\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SystemV/YST9YDT\",\n-                                        \"value\": \"SystemV/YST9YDT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Turkey\",\n-                                        \"value\": \"Turkey\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Defines whether ignore first record while ingestion.\",\n+                                \"displayName\": \"Ingestion Ignore First Record\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ingestion Ignore First Record\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kusto Ingest Service\": {\n+                                \"description\": \"Azure Data Explorer Kusto Ingest Service\",\n+                                \"displayName\": \"Kusto Ingest Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kusto Ingest Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoIngestService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Partially Succeeded Routing Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UCT\",\n-                                        \"value\": \"UCT\"\n+                                        \"displayName\": \"success\",\n+                                        \"value\": \"success\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Alaska\",\n-                                        \"value\": \"US/Alaska\"\n-                                    },\n+                                        \"displayName\": \"failure\",\n+                                        \"value\": \"failure\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"failure\",\n+                                \"description\": \"Defines where to route FlowFiles that resulted in a partially succeeded status.\",\n+                                \"displayName\": \"Partially Succeeded Routing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Partially Succeeded Routing Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Poll for Ingest Status\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Aleutian\",\n-                                        \"value\": \"US/Aleutian\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Arizona\",\n-                                        \"value\": \"US/Arizona\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines whether to poll on ingestion status after an ingestion to Azure Data Explorer is completed\",\n+                                \"displayName\": \"Poll for Ingest Status\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Poll for Ingest Status\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Streaming Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Central\",\n-                                        \"value\": \"US/Central\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/East-Indiana\",\n-                                        \"value\": \"US/East-Indiana\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to stream data to Azure Data Explorer.\",\n+                                \"displayName\": \"Streaming Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Streaming Enabled\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Table Name\": {\n+                                \"description\": \"Azure Data Explorer Table Name for ingesting data\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Ingest processing failed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Ingest processing succeeded\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.data.explorer.PutAzureDataExplorer\",\n+                        \"typeDescription\": \"Acts as an Azure Data Explorer sink which sends FlowFiles to the provided endpoint. Data can be sent through queued ingestion or streaming ingestion to the Azure Data Explorer cluster.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Database Name\": {\n+                                \"description\": \"Azure Data Explorer Database Name for querying\",\n+                                \"displayName\": \"Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kusto Query Service\": {\n+                                \"description\": \"Azure Data Explorer Kusto Query Service\",\n+                                \"displayName\": \"Kusto Query Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kusto Query Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoQueryService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Query\": {\n+                                \"description\": \"Query to be run against Azure Data Explorer\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Query\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles containing original input associated with a failed Query\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles containing results of a successful Query\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.data.explorer.QueryAzureDataExplorer\",\n+                        \"typeDescription\": \"Query Azure Data Explorer and stream JSON results to output FlowFiles\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Azure Data Explorer query error message on failures\",\n+                                \"name\": \"query.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Azure Data Explorer query executed\",\n+                                \"name\": \"query.executed\"\n+                            },\n+                            {\n+                                \"description\": \"Content Type set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Eastern\",\n-                                        \"value\": \"US/Eastern\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Hawaii\",\n-                                        \"value\": \"US/Hawaii\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Indiana-Starke\",\n-                                        \"value\": \"US/Indiana-Starke\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Michigan\",\n-                                        \"value\": \"US/Michigan\"\n-                                    },\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Mountain\",\n-                                        \"value\": \"US/Mountain\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Pacific\",\n-                                        \"value\": \"US/Pacific\"\n-                                    },\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"checkpoint-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Samoa\",\n-                                        \"value\": \"US/Samoa\"\n+                                        \"description\": \"Use Azure Blob Storage to store partition ownership and checkpoint information\",\n+                                        \"displayName\": \"Azure Blob Storage\",\n+                                        \"value\": \"AZURE_BLOB_STORAGE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n-                                    },\n+                                        \"description\": \"Use component state to store partition ownership and checkpoint information\",\n+                                        \"displayName\": \"Component State\",\n+                                        \"value\": \"COMPONENT_STATE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"AZURE_BLOB_STORAGE\",\n+                                \"description\": \"Specifies which strategy to use for storing and retrieving partition ownership and checkpoint information for each partition.\",\n+                                \"displayName\": \"Checkpoint Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"checkpoint-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-batch-size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The number of messages to process within a NiFi session. This parameter affects throughput and consistency. NiFi commits its session and Event Hubs checkpoints after processing this number of messages. If NiFi session is committed, but fails to create an Event Hubs checkpoint, then it is possible that the same messages will be received again. The higher number, the higher throughput, but possibly less consistent.\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-consumer-group\": {\n+                                \"defaultValue\": \"$Default\",\n+                                \"description\": \"The name of the consumer group to use.\",\n+                                \"displayName\": \"Consumer Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-consumer-group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-initial-offset\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Universal\",\n-                                        \"value\": \"Universal\"\n+                                        \"description\": \"Read from the oldest message retained in the stream.\",\n+                                        \"displayName\": \"Start of stream\",\n+                                        \"value\": \"start-of-stream\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"W-SU\",\n-                                        \"value\": \"W-SU\"\n-                                    },\n+                                        \"description\": \"Ignore old retained messages even if exist, start reading new ones from now.\",\n+                                        \"displayName\": \"End of stream\",\n+                                        \"value\": \"end-of-stream\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"end-of-stream\",\n+                                \"description\": \"Specify where to start receiving messages if offset is not yet stored in the checkpoint store.\",\n+                                \"displayName\": \"Initial Offset\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"event-hub-initial-offset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-message-receive-timeout\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"The amount of time this consumer should wait to receive the Batch Size before returning.\",\n+                                \"displayName\": \"Message Receive Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-message-receive-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-name\": {\n+                                \"description\": \"The name of the event hub to pull messages from.\",\n+                                \"displayName\": \"Event Hub Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-namespace\": {\n+                                \"description\": \"The namespace that the Azure Event Hubs is assigned to. This is generally equal to <Event Hub Names>-ns.\",\n+                                \"displayName\": \"Event Hub Namespace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-prefetch-count\": {\n+                                \"defaultValue\": \"300\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Prefetch Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-prefetch-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-shared-access-policy-name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-shared-access-policy-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-shared-access-policy-primary-key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"event-hub-shared-access-policy-primary-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WET\",\n-                                        \"value\": \"WET\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AmqpWebSockets\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for reading received messages. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Zulu\",\n-                                        \"value\": \"Zulu\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Azure Storage account key to store event hub consumer group state.\",\n+                                \"displayName\": \"Storage Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EST\",\n-                                        \"value\": \"EST\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Name of the Azure Storage account to store event hub consumer group state.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-container-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HST\",\n-                                        \"value\": \"HST\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Name of the Azure Storage container to store the event hub consumer group state. If not specified, event hub name is used.\",\n+                                \"displayName\": \"Storage Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-container-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MST\",\n-                                        \"value\": \"MST\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Azure Storage SAS token to store Event Hub consumer group state. Always starts with a ? character.\",\n+                                \"displayName\": \"Storage SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ACT\",\n-                                        \"value\": \"ACT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AET\",\n-                                        \"value\": \"AET\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-managed-identity\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Local state is used to store the client id. Cluster state is used to store partition ownership and checkpoint information when component state is configured as the checkpointing strategy.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles received from Event Hub.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\",\n+                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs with checkpointing to ensure consistent event processing. Checkpoint tracking avoids consuming a message multiple times and enables reliable resumption of processing in the event of intermittent network failures. Checkpoint tracking requires external storage and provides the preferred approach to consuming messages from Azure Event Hubs. In clustered environment, ConsumeAzureEventHub processor instances form a consumer group and the messages are distributed among the cluster nodes (each message is processed on one cluster node only).\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n+                                \"name\": \"eventhub.enqueued.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n+                                \"name\": \"eventhub.property.*\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Event Hub Consumer Group\": {\n+                                \"defaultValue\": \"$Default\",\n+                                \"description\": \"The name of the consumer group to use when pulling events\",\n+                                \"displayName\": \"Consumer Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Consumer Group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Message Enqueue Time\": {\n+                                \"description\": \"A timestamp (ISO-8601 Instant) formatted as YYYY-MM-DDThhmmss.sssZ (2016-01-01T01:01:01.000Z) from which messages should have been enqueued in the Event Hub to start reading from\",\n+                                \"displayName\": \"Message Enqueue Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Message Enqueue Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Name of Azure Event Hubs source\",\n+                                \"displayName\": \"Event Hub Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n+                                \"displayName\": \"Event Hub Namespace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Partition Receiver Timeout (millseconds)\": {\n+                                \"description\": \"The amount of time in milliseconds a Partition Receiver should wait to receive the Fetch Size before returning. The default is 60000\",\n+                                \"displayName\": \"Partition Receiver Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Partition Recivier Fetch Size\": {\n+                                \"description\": \"The number of events that a receiver should fetch from an Event Hubs partition before returning. The default is 100\",\n+                                \"displayName\": \"Partition Receiver Fetch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Partition Recivier Fetch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AGT\",\n-                                        \"value\": \"AGT\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ART\",\n-                                        \"value\": \"ART\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AST\",\n-                                        \"value\": \"AST\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BET\",\n-                                        \"value\": \"BET\"\n-                                    },\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Primary Key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BST\",\n-                                        \"value\": \"BST\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAT\",\n-                                        \"value\": \"CAT\"\n-                                    },\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CNT\",\n-                                        \"value\": \"CNT\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AmqpWebSockets\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CST\",\n-                                        \"value\": \"CST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CTT\",\n-                                        \"value\": \"CTT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-managed-identity\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully received from the event hub will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.GetAzureEventHub\",\n+                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs without reliable checkpoint tracking. In clustered environment, GetAzureEventHub processor instances work independently and all cluster nodes process all messages (unless running the processor in Primary Only mode). ConsumeAzureEventHub offers the recommended approach to receiving messages from Azure Event Hubs. This processor creates a thread pool for connections to Azure Event Hubs.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n+                                \"name\": \"eventhub.enqueued.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The Azure sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the event hub partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n+                                \"name\": \"eventhub.property.*\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Event Hub Name\": {\n+                                \"description\": \"Name of Azure Event Hubs destination\",\n+                                \"displayName\": \"Event Hub Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Event Hub Namespace\": {\n+                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n+                                \"displayName\": \"Event Hub Namespace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EAT\",\n-                                        \"value\": \"EAT\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECT\",\n-                                        \"value\": \"ECT\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IET\",\n-                                        \"value\": \"IET\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IST\",\n-                                        \"value\": \"IST\"\n-                                    },\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Send claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Primary Key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JST\",\n-                                        \"value\": \"JST\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MIT\",\n-                                        \"value\": \"MIT\"\n-                                    },\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Amqp\",\n+                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n+                                \"displayName\": \"Transport Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-batch-size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n+                                \"displayName\": \"Maximum Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"partitioning-key-attribute-name\": {\n+                                \"description\": \"If specified, the value from argument named by this field will be used as a partitioning key to be used by event hub.\",\n+                                \"displayName\": \"Partitioning Key Attribute Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioning-key-attribute-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NET\",\n-                                        \"value\": \"NET\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AmqpWebSockets\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NST\",\n-                                        \"value\": \"NST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLT\",\n-                                        \"value\": \"PLT\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n+                                \"displayName\": \"Use Azure Managed Identity\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-managed-identity\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that could not be sent to the event hub will be transferred to this Relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully sent to the event hubs will be transferred to this Relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"The Processor buffers FlowFile contents in memory before sending\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.PutAzureEventHub\",\n+                        \"typeDescription\": \"Send FlowFile contents to Azure Event Hubs\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Source Blob Name\": {\n+                                \"description\": \"The full name of the source blob\",\n+                                \"displayName\": \"Source Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Source Blob Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Source Container Name\": {\n+                                \"description\": \"Name of the Azure storage container that will be copied\",\n+                                \"displayName\": \"Source Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Source Container Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Source Storage Credentials\": {\n+                                \"description\": \"Credentials Service used to obtain Azure Blob Storage Credentials to read Source Blob information\",\n+                                \"displayName\": \"Source Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Source Storage Credentials\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"blob-name\": {\n+                                \"description\": \"The full name of the destination blob defaults to the Source Blob Name when not specified\",\n+                                \"displayName\": \"Destination Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PNT\",\n-                                        \"value\": \"PNT\"\n+                                        \"description\": \"Fail if the blob already exists\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"FAIL_RESOLUTION\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PRT\",\n-                                        \"value\": \"PRT\"\n+                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"IGNORE_RESOLUTION\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PST\",\n-                                        \"value\": \"PST\"\n-                                    },\n+                                        \"description\": \"Replace blob contents if the blob already exist\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"REPLACE_RESOLUTION\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FAIL_RESOLUTION\",\n+                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container destination defaults to the Source Container Name when not specified\",\n+                                \"displayName\": \"Destination Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"create-container\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SST\",\n-                                        \"value\": \"SST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"VST\",\n-                                        \"value\": \"VST\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTC\",\n-                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n-                                \"displayName\": \"Time Zone\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n+                                \"displayName\": \"Create Container\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Zone\",\n+                                \"name\": \"create-container\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"The token to pass to Splunk.\",\n-                                \"displayName\": \"Token\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Token\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Destination Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.GetSplunk\",\n-                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Copies a blob in Azure Blob Storage from one account/container to another. The processor uses Azure Blob Storage client library v12.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The query that performed to produce the FlowFile.\",\n-                                \"name\": \"splunk.query\"\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n-                                \"name\": \"splunk.earliest.time\"\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"The value of the latest time that was used when performing the query.\",\n-                                \"name\": \"splunk.latest.time\"\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n+                            },\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"Error code reported during blob operation\",\n+                                \"name\": \"azure.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n+                                \"name\": \"azure.ignored\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97506,165 +95784,299 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            \"container-name\": {\n+                                \"defaultValue\": \"${azure.container}\",\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Idle Connection Expiration\": {\n-                                \"defaultValue\": \"15 seconds\",\n-                                \"description\": \"The amount of time a connection should be held open without being used before closing the connection. A value of 0 seconds will disable this feature.\",\n-                                \"displayName\": \"Idle Connection Expiration\",\n+                            \"delete-snapshots-option\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Delete the blob only.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete the blob and its snapshots.\",\n+                                        \"displayName\": \"Include Snapshots\",\n+                                        \"value\": \"INCLUDE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete only the blob's snapshots.\",\n+                                        \"displayName\": \"Delete Snapshots Only\",\n+                                        \"value\": \"ONLY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the snapshot deletion options to be used when deleting a blob.\",\n+                                \"displayName\": \"Delete Snapshots Option\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delete-snapshots-option\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Deletes the specified blob from Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Delimiter\": {\n-                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n-                                \"displayName\": \"Message Delimiter\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"file\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Filesystem Object Type\",\n+                                        \"propertyName\": \"filesystem-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": false,\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"filesystem-object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"description\": \"The object to be deleted is a file.\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"file\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"description\": \"The object to be deleted is a directory.\",\n+                                        \"displayName\": \"Directory\",\n+                                        \"value\": \"directory\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TCP\",\n-                                \"description\": \"The protocol for communication.\",\n-                                \"displayName\": \"Protocol\",\n+                                \"defaultValue\": \"file\",\n+                                \"description\": \"They type of the file system object to be deleted. It can be either folder or file.\",\n+                                \"displayName\": \"Filesystem Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"filesystem-object-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the destination. Does not apply to UDP\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"logs\",\n-                            \"splunk\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n-                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Deletes the provided file from Azure Data Lake Storage\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97674,267 +96086,455 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Container Name\\\" property should be set to the name of the Blob Storage Container that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_CONTAINER}`.\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureBlobStorage_v12.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Container Name\\\" = \\\"${azure.container}\\\"\\n\\\"Blob Name\\\" = \\\"${azure.blobname}\\\"\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in an Azure Blob Storage container\",\n+                                \"keywords\": [\n+                                    \"azure\",\n+                                    \"blob\",\n+                                    \"storage\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Client-Side Encryption Key ID\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"Client-Side Encryption Key Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Client-Side Encryption disabled\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n+                            \"Client-Side Encryption Local Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Client-Side Encryption Local Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                            \"container-name\": {\n+                                \"defaultValue\": \"${azure.container}\",\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the blob, starting from the Range Start. An empty value or a value that extends beyond the end of the blob will read to the end of the blob.\",\n+                                \"displayName\": \"Range Length\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the blob. An empty value or a value of zero will start reading at the beginning of the blob.\",\n+                                \"displayName\": \"Range Start\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Retrieves the specified blob from Azure Blob Storage and writes its content to the content of the FlowFile. The processor uses Azure Blob Storage client library v12.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n+                            },\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Filesystem Name\\\" property should be set to the name of the Azure Filesystem (also known as a Container) that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_FILESYSTEM}`.\\nConfigure the \\\"Directory Name\\\" property to specify the name of the directory in the file system.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_DIRECTORY}`.\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureDataLakeStorage.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Filesystem Name\\\" = \\\"${azure.filesystem}\\\"\\n\\\"Directory Name\\\" = \\\"${azure.directory}\\\"\\n\\\"File Name\\\" = \\\"${azure.filename}\\\"\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in an Azure DataLake Storage directory\",\n+                                \"keywords\": [\n+                                    \"azure\",\n+                                    \"datalake\",\n+                                    \"adls\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"content-type\": {\n-                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n-                                \"displayName\": \"Content Type\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"content-type\",\n-                                \"required\": false,\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"host\": {\n-                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Host\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"host\",\n-                                \"required\": false,\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"index\": {\n-                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Index\",\n+                            \"number-of-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"index\",\n+                                \"name\": \"number-of-retries\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"request-channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"source\": {\n-                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source\",\n+                            \"range-length\": {\n+                                \"description\": \"The number of bytes to download from the object, starting from the Range Start. An empty value or a value that extends beyond the end of the object will read to the end of the object.\",\n+                                \"displayName\": \"Range Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"source\",\n+                                \"name\": \"range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"source-type\": {\n-                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source Type\",\n+                            \"range-start\": {\n+                                \"description\": \"The byte position at which to start reading from the object. An empty value or a value of zero will start reading at the beginning of the object.\",\n+                                \"displayName\": \"Range Start\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"source-type\",\n+                                \"name\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunkHTTP\",\n-                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Fetch the specified file from Azure Data Lake Storage\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"azure.datalake.storage.statusCode\"\n                             },\n                             {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\n+                                \"description\": \"The Azure Data Lake Storage moniker of the failed operation\",\n+                                \"name\": \"azure.datalake.storage.errorCode\"\n+                            },\n+                            {\n+                                \"description\": \"The Azure Data Lake Storage error message from the failed operation\",\n+                                \"name\": \"azure.datalake.storage.errorMessage\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97943,523 +96543,1653 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Owner\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Minimum File Age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"blob-name-prefix\": {\n+                                \"description\": \"Search prefix for listing\",\n+                                \"displayName\": \"Blob Name Prefix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"blob-name-prefix\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"http\",\n-                                        \"value\": \"http\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\n+                                \"defaultValue\": \"all\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n+                            \"et-state-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of blobs, the timestamp of the newest blob is stored if 'Tracking Timestamps' Listing Strategy is in use (by default). This allows the Processor to list only blobs that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n+                            },\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"Maximum File Age\": {\n+                                \"description\": \"The maximum age that a file must be in order to be pulled; any file older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum File Size\": {\n+                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that a file must be in order to be pulled; any file younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Age\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum File Size\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n+                                \"displayName\": \"Minimum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n+                                        \"displayName\": \"Tracking Time Window\",\n+                                        \"value\": \"window\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n+                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n+                                        \"displayName\": \"All Available\",\n+                                        \"value\": \"all\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n+                            \"et-state-cache\": {\n+                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Token\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\n+                            \"file-filter\": {\n+                                \"description\": \"Only files whose names match the given regular expression will be listed\",\n+                                \"displayName\": \"File Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"file-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-query-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n-                                \"displayName\": \"Maximum Query Size\",\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"include-temporary-files\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to include temporary files when listing the contents of configured directory paths.\",\n+                                \"displayName\": \"Include Temporary Files\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-query-size\",\n+                                \"name\": \"include-temporary-files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"path-filter\": {\n+                                \"description\": \"When 'Recurse Subdirectories' is true, then only subdirectories whose paths match the given regular expression will be scanned\",\n+                                \"displayName\": \"Path Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"request-channel\",\n-                                \"required\": true,\n+                                \"name\": \"path-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ttl\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n-                                \"displayName\": \"Maximum Waiting Time\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ttl\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"recurse-subdirectories\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n+                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"recurse-subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n-                            },\n-                            {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n-                                \"name\": \"unacknowledged\"\n+                                \"description\": \"The full path of the Azure File\",\n+                                \"name\": \"azure.filePath\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n-                                \"name\": \"undetermined\"\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"The last modification time of the Azure File\",\n+                                \"name\": \"azure.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"The ETag of the Azure File\",\n+                                \"name\": \"azure.etag\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory where the files will be moved. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created. If the original directory structure should be kept, the full directory path needs to be provided after the destination directory. e.g.: destdir/${azure.directory}\",\n+                                \"displayName\": \"Destination Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System where the files will be moved.\",\n+                                \"displayName\": \"Destination Filesystem\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"source-directory-name\": {\n+                                \"defaultValue\": \"${azure.directory}\",\n+                                \"description\": \"Name of the Azure Storage Directory from where the move should happen. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value.\",\n+                                \"displayName\": \"Source Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source-directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"source-filesystem-name\": {\n+                                \"defaultValue\": \"${azure.filesystem}\",\n+                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n+                                \"displayName\": \"Source Filesystem\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source-filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"acknowledgement\",\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\",\n-                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.MoveAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Moves content within an Azure Data Lake Storage Gen 2. After the move, files will be no longer available on source location.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hashicorp-vault-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the source Azure File System\",\n+                                \"name\": \"azure.source.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the source Azure Directory\",\n+                                \"name\": \"azure.source.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for file content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Allows any Spring Vault property keys to be specified, as described in (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). See Additional Details for more information.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"A Spring Vault configuration property name\",\n-                                \"value\": \"The property value\"\n-                            }\n-                        ],\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"configuration-strategy\": {\n+                            \"Client-Side Encryption Key ID\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client-Side Encryption Key Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use properties, including dynamic properties, configured directly in the Controller Service to configure the client\",\n-                                        \"displayName\": \"Direct Properties\",\n-                                        \"value\": \"direct-properties\"\n+                                        \"description\": \"Client-Side Encryption disabled\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n-                                        \"displayName\": \"Properties Files\",\n-                                        \"value\": \"properties-files\"\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"direct-properties\",\n-                                \"description\": \"Specifies the source of the configuration properties.\",\n-                                \"displayName\": \"Configuration Strategy\",\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"configuration-strategy\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.authentication\": {\n-                                \"allowableValues\": [\n+                            \"Client-Side Encryption Local Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOKEN\",\n-                                        \"value\": \"TOKEN\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Client-Side Encryption Local Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"File Resource Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPID\",\n-                                        \"value\": \"APPID\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n+                                \"displayName\": \"File Resource Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Resource Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Resource Transfer Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPROLE\",\n-                                        \"value\": \"APPROLE\"\n+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AWS_EC2\",\n-                                        \"value\": \"AWS_EC2\"\n-                                    },\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Resource Transfer Source\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"blob-name\": {\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AZURE\",\n-                                        \"value\": \"AZURE\"\n+                                        \"description\": \"Fail if the blob already exists\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"FAIL_RESOLUTION\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CERT\",\n-                                        \"value\": \"CERT\"\n+                                        \"description\": \"Ignore if the blob already exists; the 'azure.error' attribute will be set to the value 'BLOB_ALREADY_EXISTS'\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"IGNORE_RESOLUTION\"\n                                     },\n                                     {\n+                                        \"description\": \"Replace blob contents if the blob already exist\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"REPLACE_RESOLUTION\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FAIL_RESOLUTION\",\n+                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n+                                \"displayName\": \"Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"create-container\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CUBBYHOLE\",\n-                                        \"value\": \"CUBBYHOLE\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"KUBERNETES\",\n-                                        \"value\": \"KUBERNETES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TOKEN\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n-                                \"displayName\": \"Vault Authentication\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n+                                \"displayName\": \"Create Container\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.authentication\",\n+                                \"name\": \"create-container\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.connection.timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The connection timeout for the HashiCorp Vault client\",\n-                                \"displayName\": \"Connection Timeout\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.connection.timeout\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Storage Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"vault.properties.files\": {\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Puts content into a blob on Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n+                            },\n+                            {\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n+                            },\n+                            {\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n+                            },\n+                            {\n+                                \"description\": \"Error code reported during blob operation\",\n+                                \"name\": \"azure.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n+                                \"name\": \"azure.ignored\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"File Resource Service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"properties-files\"\n+                                            \"FILE_RESOURCE_SERVICE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n                                     }\n                                 ],\n-                                \"description\": \"A comma-separated list of files containing HashiCorp Vault configuration properties, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). All of the Spring property keys and authentication-specific property keys are supported.\",\n-                                \"displayName\": \"Vault Properties Files\",\n+                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n+                                \"displayName\": \"File Resource Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.properties.files\",\n+                                \"name\": \"File Resource Service\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"vault.read.timeout\": {\n-                                \"defaultValue\": \"15 sec\",\n-                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"Resource Transfer Source\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.read.timeout\",\n+                                \"name\": \"Resource Transfer Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.ssl.context.service\": {\n+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"adls-credentials-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"base-temporary-path\": {\n+                                \"defaultValue\": \"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"direct-properties\"\n+                                            \"WRITE_AND_RENAME\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Writing Strategy\",\n+                                        \"propertyName\": \"writing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections to the HashiCorp Vault server.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n+                                \"displayName\": \"Base Temporary Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"base-temporary-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.ssl.context.service\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"directory-name\": {\n+                                \"description\": \"Name of the Azure Storage Directory. The Directory Name cannot contain a leading '/'. The root directory can be designated by the empty string value. In case of the PutAzureDataLakeStorage processor, the directory will be created if not already existing.\",\n+                                \"displayName\": \"Directory Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-name\": {\n+                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n+                                \"displayName\": \"Filesystem Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"vault.uri\": {\n-                                \"dependencies\": [\n+                            \"writing-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"description\": \"The processor writes the Azure file into a temporary directory and then renames/moves it to the final destination. This prevents other processes from reading partially written files.\",\n+                                        \"displayName\": \"Write and Rename\",\n+                                        \"value\": \"WRITE_AND_RENAME\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The processor writes the Azure file directly to the destination. This might result in the reading of partially written files.\",\n+                                        \"displayName\": \"Simple Write\",\n+                                        \"value\": \"SIMPLE_WRITE\"\n                                     }\n                                 ],\n-                                \"description\": \"The URI of the HashiCorp Vault server (e.g., http://localhost:8200).  Required if not specified in the Bootstrap HashiCorp Vault Configuration File.\",\n-                                \"displayName\": \"Vault URI\",\n+                                \"defaultValue\": \"WRITE_AND_RENAME\",\n+                                \"description\": \"Defines the approach for writing the Azure file.\",\n+                                \"displayName\": \"Writing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"vault.uri\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"writing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"hashicorp\",\n-                            \"vault\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n-                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as a file on Azure Data Lake Storage Gen 2\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Azure File\",\n+                                \"name\": \"azure.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Primary location for file content\",\n+                                \"name\": \"azure.primaryUri\"\n+                            },\n+                            {\n+                                \"description\": \"The length of the Azure File\",\n+                                \"name\": \"azure.length\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"kv-path\": {\n-                                \"defaultValue\": \"kv\",\n-                                \"description\": \"The HashiCorp Vault path to the Key/Value Version 1 Secrets Engine\",\n-                                \"displayName\": \"Key/Value Path\",\n+                            \"Auto Delete Messages\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n+                                \"displayName\": \"Auto Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kv-path\",\n+                                \"name\": \"Auto Delete Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"secret-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression indicating which Secrets to include as parameter groups to map to Parameter Contexts by name.\",\n-                                \"displayName\": \"Secret Name Pattern\",\n+                            \"Credentials Service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n+                                \"displayName\": \"Credentials Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-name-pattern\",\n+                                \"name\": \"Credentials Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Message Batch Size\": {\n+                                \"defaultValue\": \"32\",\n+                                \"description\": \"The number of messages to be retrieved from the queue.\",\n+                                \"displayName\": \"Message Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault-client-service\": {\n-                                \"description\": \"The service used to interact with HashiCorp Vault\",\n-                                \"displayName\": \"HashiCorp Vault Client Service\",\n+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Queue Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Request Timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n+                                \"displayName\": \"Request Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault-client-service\",\n+                                \"name\": \"Request Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The duration during which the retrieved message should be invisible to other consumers.\",\n+                                \"displayName\": \"Visibility Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Visibility Timeout\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"hashicorp\",\n-                            \"secret\",\n-                            \"vault\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"dequeue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultParameterProvider\",\n-                        \"typeDescription\": \"Provides parameters from HashiCorp Vault Key/Value Version 1 Secrets.  Each Secret represents a parameter group, which will map to a Parameter Context.  The keys and values in the Secret map to Parameters.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-windows-event-log-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\",\n+                        \"typeDescription\": \"Retrieves the messages from an Azure Queue Storage. The retrieved messages will be deleted from the queue by default. If the requirement is to consume messages without deleting them, set 'Auto Delete Messages' to 'false'. Note: There might be chances of receiving duplicates in situations like when a message is received but was unable to be deleted from the queue due to some unexpected situations.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The absolute URI of the configured Azure Queue Storage\",\n+                                \"name\": \"azure.queue.uri\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message was inserted into the queue storage\",\n+                                \"name\": \"azure.queue.insertionTime\"\n+                            },\n+                            {\n+                                \"description\": \"The time when the message will expire from the queue storage\",\n+                                \"name\": \"azure.queue.expirationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The ID of the retrieved message\",\n+                                \"name\": \"azure.queue.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"The pop receipt of the retrieved message\",\n+                                \"name\": \"azure.queue.popReceipt\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-windows-event-log-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -98468,1131 +98198,1347 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"channel\": {\n-                                \"defaultValue\": \"System\",\n-                                \"description\": \"The Windows Event Log Channel to listen to.\",\n-                                \"displayName\": \"Channel\",\n+                            \"Credentials Service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n+                                \"displayName\": \"Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"channel\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Credentials Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Message Time To Live\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"Maximum time to allow the message to be in the queue\",\n+                                \"displayName\": \"Message Time To Live\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Time To Live\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"inactiveDurationToReconnect\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"If no new event logs are processed for the specified time period, this processor will try reconnecting to recover from a state where any further messages cannot be consumed. Such situation can happen if Windows Event Log service is restarted, or ERROR_EVT_QUERY_RESULT_STALE (15011) is returned. Setting no duration, e.g. '0 ms' disables auto-reconnection.\",\n-                                \"displayName\": \"Inactive duration to reconnect\",\n+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Queue Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Request Timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The timeout for read or write requests to Azure Queue Storage. Defaults to 1 second.\",\n+                                \"displayName\": \"Request Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The length of time during which the message will be invisible after it is read. If the processing unit fails to delete the message after it is read, then the message will reappear in the queue.\",\n+                                \"displayName\": \"Visibility Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Visibility Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, SOCKS In case of SOCKS, it is not guaranteed that the selected SOCKS Version will be used by the processor.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"enqueue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\",\n+                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"inactiveDurationToReconnect\",\n+                                \"name\": \"Application ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"maxBuffer\": {\n-                                \"defaultValue\": \"1048576\",\n-                                \"description\": \"The individual Event Log XMLs are rendered to a buffer.  This specifies the maximum size in bytes that the buffer will be allowed to grow to. (Limiting the maximum size of an individual Event XML.)\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maxBuffer\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"maxQueue\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Events are received asynchronously and must be output as FlowFiles when the processor is triggered.  This specifies the maximum number of events to queue for transformation into FlowFiles.\",\n-                                \"displayName\": \"Maximum queue size\",\n+                            \"Instance ID\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Instance ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Instance URL\": {\n+                                \"defaultValue\": \"http://${hostname(true)}:8080/nifi\",\n+                                \"description\": \"The URL of this instance to use in the Content URI of each event.\",\n+                                \"displayName\": \"Instance URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Job Name\": {\n+                                \"defaultValue\": \"nifi_reporting_job\",\n+                                \"description\": \"The name of the exporting job\",\n+                                \"displayName\": \"Job Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Job Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Log Analytics Custom Log Name\": {\n+                                \"defaultValue\": \"nifiprovenance\",\n+                                \"description\": \"Log Analytics Custom Log Name\",\n+                                \"displayName\": \"Log Analytics Custom Log Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Log Analytics URL Endpoint Format\": {\n+                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n+                                \"description\": \"Log Analytics URL Endpoint Format\",\n+                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Log Analytics Workspace Id\": {\n+                                \"description\": \"Log Analytics Workspace Id\",\n+                                \"displayName\": \"Log Analytics Workspace Id\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Workspace Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Platform\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The value to use for the platform field in each event.\",\n+                                \"displayName\": \"Platform\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"include-null-values\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maxQueue\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"query\": {\n-                                \"defaultValue\": \"*\",\n-                                \"description\": \"XPath Query to filter events. (See https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx for examples.)\",\n-                                \"displayName\": \"XPath Query\",\n+                            \"s2s-prov-task-event-filter\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to filter the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Event Type to Include\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"query\",\n+                                \"name\": \"s2s-prov-task-event-filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-prov-task-event-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of event types that will be used to exclude the provenance events sent by the reporting task. Available event types are [CREATE, RECEIVE, FETCH, SEND, UPLOAD, REMOTE_INVOCATION, DOWNLOAD, DROP, EXPIRE, FORK, JOIN, CLONE, CONTENT_MODIFIED, ATTRIBUTES_MODIFIED, ROUTE, ADDINFO, REPLAY, UNKNOWN]. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If an event type is included in Event Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Event Type to Exclude\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-event-filter-exclude\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-prov-task-id-filter\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to filter the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component ID to Include\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-prov-task-id-filter-exclude\": {\n+                                \"description\": \"Comma-separated list of component UUID that will be used to exclude the provenance events sent by the reporting task. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component UUID is included in Component ID to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component ID to Exclude\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter-exclude\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-prov-task-name-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component name. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Name to Include\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-prov-task-name-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component name. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component name is included in Component Name to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Name to Exclude\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-prov-task-type-filter\": {\n+                                \"description\": \"Regular expression to filter the provenance events based on the component type. Only the events matching the regular expression will be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative.\",\n+                                \"displayName\": \"Component Type to Include\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-prov-task-type-filter-exclude\": {\n+                                \"description\": \"Regular expression to exclude the provenance events based on the component type. The events matching the regular expression will not be sent. If no filter is set, all the events are sent. If multiple filters are set, the filters are cumulative. If a component type is included in Component Type to Include and excluded here, then the exclusion takes precedence and the event will not be sent.\",\n+                                \"displayName\": \"Component Type to Exclude\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"start-position\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n+                                        \"displayName\": \"Beginning of Stream\",\n+                                        \"value\": \"beginning-of-stream\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n+                                        \"displayName\": \"End of Stream\",\n+                                        \"value\": \"end-of-stream\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"beginning-of-stream\",\n+                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n+                                \"displayName\": \"Start Position\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"start-position\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Relationship for successfully consumed events.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"event\",\n-                            \"ingest\",\n-                            \"windows\"\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"provenace\",\n+                            \"reporting\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.windows.event.log.ConsumeWindowsEventLog\",\n-                        \"typeDescription\": \"Registers a Windows Event Log Subscribe Callback to receive FlowFiles from Events on Windows.  These can be filtered via channel and XPath.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Will set a MIME type value of application/xml.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-geohash-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsProvenanceReportingTask\",\n+                        \"typeDescription\": \"Publishes Provenance events to to a Azure Log Analytics workspace.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-geohash-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"geohash-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BASE32\",\n-                                        \"value\": \"BASE32\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"LONG\",\n-                                        \"value\": \"LONG\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"BASE32\",\n-                                \"description\": \"In the ENCODE mode, this property specifies the desired format for encoding geohash; in the DECODE mode, this property specifies the format of geohash provided\",\n-                                \"displayName\": \"Geohash Format\",\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geohash-format\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Application ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geohash-level\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"ENCODE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"The integer precision level(1-12) desired for encoding geohash\",\n-                                \"displayName\": \"Geohash Level\",\n+                            \"Instance ID\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geohash-level\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"geohash-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to put the geohash value; in the DECODE mode, this property specifies the record path to retrieve the geohash value\",\n-                                \"displayName\": \"Geohash Record Path\",\n+                            \"Job Name\": {\n+                                \"defaultValue\": \"nifi_reporting_job\",\n+                                \"description\": \"The name of the exporting job\",\n+                                \"displayName\": \"Job Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geohash-record-path\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Job Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"latitude-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the latitude values. Latitude values should be in the range of [-90, 90]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the latitude value\",\n-                                \"displayName\": \"Latitude Record Path\",\n+                            \"Log Analytics Custom Log Name\": {\n+                                \"defaultValue\": \"nifimetrics\",\n+                                \"description\": \"Log Analytics Custom Log Name\",\n+                                \"displayName\": \"Log Analytics Custom Log Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"latitude-record-path\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"longitude-record-path\": {\n-                                \"description\": \"In the ENCODE mode, this property specifies the record path to retrieve the longitude values; Longitude values should be in the range of [-180, 180]; invalid values will be logged at warn level. In the DECODE mode, this property specifies the record path to put the longitude value\",\n-                                \"displayName\": \"Longitude Record Path\",\n+                            \"Log Analytics URL Endpoint Format\": {\n+                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n+                                \"description\": \"Log Analytics URL Endpoint Format\",\n+                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"longitude-record-path\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ENCODE\",\n-                                        \"value\": \"ENCODE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DECODE\",\n-                                        \"value\": \"DECODE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ENCODE\",\n-                                \"description\": \"Specifies whether to encode latitude/longitude to geohash or decode geohash to latitude/longitude\",\n-                                \"displayName\": \"Mode\",\n+                            \"Log Analytics Workspace Id\": {\n+                                \"description\": \"Log Analytics Workspace Id\",\n+                                \"displayName\": \"Log Analytics Workspace Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Workspace Id\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the record reader service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Workspace Key\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the record writer service to use for writing data\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"Process group ID(s)\": {\n+                                \"description\": \"If specified, the reporting task will send metrics the configured ProcessGroup(s) only. Multiple IDs should be separated by a comma. If none of the group-IDs could be found or no IDs are defined, the Root Process Group is used and global metrics are sent.\",\n+                                \"displayName\": \"Process group ID(s)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Process group ID(s)\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"routing-strategy\": {\n+                            \"Send JVM Metrics\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SKIP\",\n-                                        \"value\": \"SKIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SPLIT\",\n-                                        \"value\": \"SPLIT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRE\",\n-                                        \"value\": \"REQUIRE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SKIP\",\n-                                \"description\": \"Specifies how to route flowfiles after encoding or decoding being performed. SKIP will enrich those records that can be enriched and skip the rest. The SKIP strategy will route a flowfile to failure only if unable to parse the data. Otherwise, it will route the enriched flowfile to success, and the original input to original. SPLIT will separate the records that have been enriched from those that have not and send them to matched, while unenriched records will be sent to unmatched; the original input flowfile will be sent to original. The SPLIT strategy will route a flowfile to failure only if unable to parse the data. REQUIRE will route a flowfile to success only if all of its records are enriched, and the original input will be sent to original. The REQUIRE strategy will route the original input flowfile to failure if any of its records cannot be enriched or unable to be parsed\",\n-                                \"displayName\": \"Routing Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n+                                \"displayName\": \"Send JVM Metrics\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-strategy\",\n+                                \"name\": \"Send JVM Metrics\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Flowfiles that cannot be encoded or decoded will be routed to failure\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original input flowfile will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"geo\",\n-                            \"geohash\",\n-                            \"record\"\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"metrics\",\n+                            \"reporting\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.geohash.GeohashRecord\",\n-                        \"typeDescription\": \"A record-based processor that encodes and decodes Geohashes from and to latitude/longitude coordinates.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsReportingTask\",\n+                        \"typeDescription\": \"Sends JVM-metrics as well as Apache NiFi-metrics to a Azure Log Analytics workspace.Apache NiFi-metrics can be either configured global or on process-group level.\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n-                ],\n-                \"reportingTasks\": []\n+                ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"artifact\": \"nifi-dbcp-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            },\n+                            {\n+                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"SENSITIVE.JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal.\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"Database Connection URL\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"Database Connection URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Driver Class Name\": {\n+                                \"description\": \"Database driver class name\",\n+                                \"displayName\": \"Database Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Database Driver Class Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Database User\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Total Connections\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n+                                \"displayName\": \"Max Total Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Max Total Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Validation-query\": {\n+                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Validation-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"database-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"database-driver-locations\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                            \"dbcp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-max-conn-lifetime\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-max-idle-conns\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n+                                \"displayName\": \"Max Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-max-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"30 mins\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-idle-conns\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-soft-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n+                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-time-between-eviction-runs\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n+                                \"displayName\": \"Time Between Eviction Runs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-time-between-eviction-runs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n                                 \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": true,\n+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n                         \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Keytab\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosKeytabUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and keytab that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n+                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"The name to register DBCPService\",\n+                                \"value\": \"The DBCPService\"\n                             }\n-                        },\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Password\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosPasswordUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and password that other components are able to use in order to perform authentication using Kerberos.\",\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n+                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access ticket cache\"\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n+                            \"hikaricp-connection-url\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"hikaricp-connection-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kerberos Ticket Cache File\": {\n-                                \"description\": \"Kerberos ticket cache associated with the principal.\",\n-                                \"displayName\": \"Kerberos Ticket Cache File\",\n+                            \"hikaricp-driver-classname\": {\n+                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n+                                \"displayName\": \"Database Driver Class Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Ticket Cache File\",\n+                                \"name\": \"hikaricp-driver-classname\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-driver-locations\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Authentication\",\n-                            \"Cache\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Principal\",\n-                            \"Security\",\n-                            \"Ticket\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosTicketCacheUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and ticket cache that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it an administrator is able to choose which users are allowed to use which ticket caches and principals. This provides a more robust security model for multi-tenant use cases.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-social-media-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-social-media-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"backfill-minutes\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of minutes (up to 5 minutes) of streaming data to be requested after a disconnect. Only available for project with academic research access. See https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/recovery-and-redundancy-features\",\n-                                \"displayName\": \"Backfill Minutes\",\n+                            \"hikaricp-kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backfill-minutes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"hikaricp-kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"backoff-attempts\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"The number of reconnection tries the processor will attempt in the event of a disconnection of the stream for any reason, before throwing an exception. To start a stream after this exception occur and the connection is fixed, please stop and restart the processor. If the valueof this property is 0, then backoff will never occur and the processor will always need to be restartedif the stream fails.\",\n-                                \"displayName\": \"Backoff Attempts\",\n+                            \"hikaricp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-attempts\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-max-conn-lifetime\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"backoff-time\": {\n-                                \"defaultValue\": \"1 mins\",\n-                                \"description\": \"The duration to backoff before requesting a new stream ifthe current one fails for any reason. Will increase by factor of 2 every time a restart fails\",\n-                                \"displayName\": \"Backoff Time\",\n+                            \"hikaricp-max-total-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n+                                \"displayName\": \"Max Total Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-time\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-max-total-conns\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"base-path\": {\n-                                \"defaultValue\": \"https://api.twitter.com\",\n-                                \"description\": \"The base path that the processor will use for making HTTP requests. The default value should be sufficient for most use cases.\",\n-                                \"displayName\": \"Base Path\",\n+                            \"hikaricp-max-wait-time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"base-path\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-max-wait-time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"batch-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"The maximum size of the number of Tweets to be written to a single FlowFile. Will write fewer Tweets based on the number available in the queue at the time of processor invocation.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"hikaricp-min-idle-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-min-idle-conns\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bearer-token\": {\n-                                \"description\": \"The Bearer Token provided by Twitter.\",\n-                                \"displayName\": \"Bearer Token\",\n+                            \"hikaricp-password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bearer-token\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"connect-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum time in which client should establish a connection with the Twitter API before a time out. Setting the value to 0 disables connection timeouts.\",\n-                                \"displayName\": \"Connect Timeout\",\n+                            \"hikaricp-username\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connect-timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"expansions\": {\n-                                \"description\": \"A comma-separated list of expansions for objects in the returned tweet. See https://developer.twitter.com/en/docs/twitter-api/expansions for proper usage. Possible field values include: author_id, referenced_tweets.id, referenced_tweets.id.author_id, entities.mentions.username, attachments.poll_ids, attachments.media_keys ,in_reply_to_user_id, geo.place_id\",\n-                                \"displayName\": \"Expansions\",\n+                            \"hikaricp-validation-query\": {\n+                                \"description\": \"Validation Query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. NOTE: Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expansions\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-validation-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"hikari\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.dbcp.HikariCPConnectionPool\",\n+                        \"typeDescription\": \"Provides Database Connection Pooling Service based on HikariCP. Connections can be asked from pool and returned after usage.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"db-record-sink-catalog-name\": {\n+                                \"description\": \"The name of the catalog that the statement should update. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Catalog Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-catalog-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"maximum-backoff-time\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"The maximum duration to backoff to start attempting a new stream.It is recommended that this number be much higher than the 'Backoff Time' property\",\n-                                \"displayName\": \"Maximum Backoff Time\",\n+                            \"db-record-sink-dcbp-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain a connection to the database for sending records.\",\n+                                \"displayName\": \"Database Connection Pooling Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-backoff-time\",\n+                                \"name\": \"db-record-sink-dcbp-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"media-fields\": {\n-                                \"description\": \"A comma-separated list of media fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media for proper usage. Possible field values include: alt_text, duration_ms, height, media_key, non_public_metrics, organic_metrics, preview_image_url, promoted_metrics, public_metrics, type, url, width\",\n-                                \"displayName\": \"Media Fields\",\n+                            \"db-record-sink-query-timeout\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a running SQL statement , zero means there is no limit. Max time less than 1 second will be equal to zero.\",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"media-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"db-record-sink-query-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"place-fields\": {\n-                                \"description\": \"A comma-separated list of place fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place for proper usage. Possible field values include: contained_within, country, country_code, full_name, geo, id, name, place_type\",\n-                                \"displayName\": \"Place Fields\",\n+                            \"db-record-sink-quoted-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause all column names to be quoted, allowing you to use reserved words as column names in your tables.\",\n+                                \"displayName\": \"Quote Column Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"place-fields\",\n+                                \"name\": \"db-record-sink-quoted-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"poll-fields\": {\n-                                \"description\": \"A comma-separated list of poll fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll for proper usage. Possible field values include: duration_minutes, end_datetime, id, options, voting_status\",\n-                                \"displayName\": \"Poll Fields\",\n+                            \"db-record-sink-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-fields\",\n+                                \"name\": \"db-record-sink-quoted-table-identifiers\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"queue-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Maximum size of internal queue for streamed messages\",\n-                                \"displayName\": \"Queue Size\",\n+                            \"db-record-sink-schema-name\": {\n+                                \"description\": \"The name of the schema that the table belongs to. This may not apply for the database that you are updating. In this case, leave the field empty\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"queue-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"read-timeout\": {\n-                                \"defaultValue\": \"10 secs\",\n-                                \"description\": \"The maximum time of inactivity between receiving tweets from Twitter through the API before a timeout. Setting the value to 0 disables read timeouts.\",\n-                                \"displayName\": \"Read Timeout\",\n+                            \"db-record-sink-table-name\": {\n+                                \"description\": \"The name of the table that the statement should affect.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"stream-endpoint\": {\n+                            \"db-record-sink-translate-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Streams about one percent of all Tweets. https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream\",\n-                                        \"displayName\": \"Sample Stream\",\n-                                        \"value\": \"Sample Endpoint\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The search stream produces Tweets that match filtering rules configured on Twitter services. At least one well-formed filtering rule must be configured. https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream\",\n-                                        \"displayName\": \"Search Stream\",\n-                                        \"value\": \"Search Endpoint\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Sample Endpoint\",\n-                                \"description\": \"The source from which the processor will consume Tweets.\",\n-                                \"displayName\": \"Stream Endpoint\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, the Processor will attempt to translate field names into the appropriate column names for the table specified. If false, the field names must match the column names exactly, or the column will not be updated\",\n+                                \"displayName\": \"Translate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"stream-endpoint\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-translate-field-names\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tweet-fields\": {\n-                                \"description\": \"A comma-separated list of tweet fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet for proper usage. Possible field values include: attachments, author_id, context_annotations, conversation_id, created_at, entities, geo, id, in_reply_to_user_id, lang, non_public_metrics, organic_metrics, possibly_sensitive, promoted_metrics, public_metrics, referenced_tweets, reply_settings, source, text, withheld\",\n-                                \"displayName\": \"Tweet Fields\",\n+                            \"db-record-sink-unmatched-column-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming record does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"tweet-fields\",\n+                                \"name\": \"db-record-sink-unmatched-column-behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-fields\": {\n-                                \"description\": \"A comma-separated list of user fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user for proper usage. Possible field values include: created_at, description, entities, id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld\",\n-                                \"displayName\": \"User Fields\",\n+                            \"db-record-sink-unmatched-field-behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail on Unmatched Fields\",\n+                                        \"value\": \"Fail on Unmatched Fields\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"user-fields\",\n+                                \"name\": \"db-record-sink-unmatched-field-behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"social media\",\n-                            \"status\",\n-                            \"tweets\",\n-                            \"twitter\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"db\",\n+                            \"jdbc\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.twitter.ConsumeTwitter\",\n-                        \"typeDescription\": \"Streams tweets from Twitter's streaming API v2. The stream provides a sample stream or a search stream based on previously uploaded rules. This processor also provides a pass through for certain fields of the tweet to be returned as part of the response. See https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction for more information regarding the Tweet object model.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME Type set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of Tweets in the FlowFile\",\n-                                \"name\": \"tweets\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n+                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-poi-nar\",\n+            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"artifact\": \"nifi-dropbox-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Date Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Date fields. If not specified, Date fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters, as in 01/01/2017).\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PASSWORD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protection Type\",\n-                                        \"propertyName\": \"Protection Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The password for a password protected Excel spreadsheet\",\n-                                \"displayName\": \"Password\",\n+                            \"access-token\": {\n+                                \"description\": \"Access Token of the user's Dropbox app. See Additional Details for more information about Access Token generation.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"Protection Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n-                                        \"displayName\": \"Unprotected\",\n-                                        \"value\": \"UNPROTECTED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An Excel spreadsheet protected by a password\",\n-                                        \"displayName\": \"Password Protected\",\n-                                        \"value\": \"PASSWORD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UNPROTECTED\",\n-                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n-                                \"displayName\": \"Protection Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protection Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Required Sheets\": {\n-                                \"description\": \"Comma-separated list of Excel document sheet names whose rows should be extracted from the excel document. If this property is left blank then all the rows from all the sheets will be extracted from the Excel document. The list of names is case sensitive. Any sheets not specified in this value will be ignored. An exception will be thrown if a specified sheet(s) are not found.\",\n-                                \"displayName\": \"Required Sheets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Required Sheets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Starting Row\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The row number of the first row to start processing (One based). Use this to skip over rows of data at the top of a worksheet that are not part of the dataset.\",\n-                                \"displayName\": \"Starting Row\",\n+                            \"app-key\": {\n+                                \"description\": \"App Key of the user's Dropbox app. See Additional Details for more information.\",\n+                                \"displayName\": \"App Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Starting Row\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Time fields. If not specified, Time fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Timestamp Format\": {\n-                                \"description\": \"Specifies the format to use when reading/writing Timestamp fields. If not specified, Timestamp fields will be assumed to be number of milliseconds since epoch (Midnight, Jan 1, 1970 GMT). If specified, the value must match the Java Simple Date Format (for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by a two-digit day, followed by a four-digit year, all separated by '/' characters; and then followed by a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 01/01/2017 18:04:15).\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Schema of the data will be inferred automatically when the data is read. See component Usage and Additional Details for information about how the schema is inferred.\",\n-                                        \"displayName\": \"Infer Schema\",\n-                                        \"value\": \"infer-schema\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"infer-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                            \"app-secret\": {\n+                                \"description\": \"App Secret of the user's Dropbox app. See Additional Details for more information.\",\n+                                \"displayName\": \"App Secret\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n+                            \"refresh-token\": {\n+                                \"description\": \"Refresh Token of the user's Dropbox app. See Additional Details for more information about Refresh Token generation.\",\n+                                \"displayName\": \"Refresh Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-reader\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"refresh-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cell\",\n-                            \"excel\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"spreadsheet\",\n-                            \"values\",\n-                            \"xlsx\"\n+                            \"credentials\",\n+                            \"dropbox\",\n+                            \"provider\"\n                         ],\n-                        \"type\": \"org.apache.nifi.excel.ExcelReader\",\n-                        \"typeDescription\": \"Parses a Microsoft Excel document returning each row in each sheet as a separate record. This reader allows for inferring a schema from all the required sheets or providing an explicit schema for interpreting the values.See Controller Service's Usage for further documentation. This reader is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n+                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-workday-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-workday-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -99601,685 +99547,456 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PASSWORD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protection Type\",\n-                                        \"propertyName\": \"Protection Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The password for a password protected Excel spreadsheet\",\n-                                \"displayName\": \"Password\",\n+                            \"Web Client Service Provider\": {\n+                                \"description\": \"Web client which is used to communicate with the Workday API.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Web Client Service Provider\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Workday Password\": {\n+                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Workday Password\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"Protection Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n-                                        \"displayName\": \"Unprotected\",\n-                                        \"value\": \"UNPROTECTED\"\n-                                    },\n+                            \"Workday Report URL\": {\n+                                \"description\": \"HTTP remote URL of Workday report including a scheme of http or https, as well as a hostname or IP address with optional port and path elements.\",\n+                                \"displayName\": \"Workday Report URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Workday Report URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Workday Username\": {\n+                                \"description\": \"The username provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Workday Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"An Excel spreadsheet protected by a password\",\n-                                        \"displayName\": \"Password Protected\",\n-                                        \"value\": \"PASSWORD\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNPROTECTED\",\n-                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n-                                \"displayName\": \"Protection Type\",\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protection Type\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The individual Excel 'segments' of the original Excel FlowFile will be routed to this relationship.\",\n-                                \"name\": \"split\"\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"split\",\n-                            \"text\"\n+                            \"Workday\",\n+                            \"report\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.excel.SplitExcel\",\n-                        \"typeDescription\": \"Splits a multi sheet Microsoft Excel spreadsheet into multiple Microsoft Excel spreadsheets where each sheet from the original file is converted to an individual spreadsheet in its own flow file.  This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"type\": \"org.apache.nifi.processors.workday.GetWorkdayReport\",\n+                        \"typeDescription\": \"A processor which can interact with a configurable Workday Report. The processor can forward the content without modification, or you can transform it by providing the specific Record Reader and Record Writer services based on your needs. You can also remove fields by defining schema in the Record Writer. Supported Workday report formats are: csv, simplexml, json\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split Excel FlowFiles produced from the same parent Excel FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split Excel FlowFiles that were created from a single parent Excel FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split Excel FlowFiles generated from the parent Excel FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.class\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent Excel FlowFile\",\n-                                \"name\": \"segment.original.filename\"\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The name of the Excel sheet from the original spreadsheet.\",\n-                                \"name\": \"sheetname\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Source / Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of rows in the Excel sheet from the original spreadsheet.\",\n-                                \"name\": \"total.rows\"\n+                                \"description\": \"The number of records in an outgoing FlowFile. This is only populated on the 'success' relationship when Record Reader and Writer is set.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-protobuf-services-nar\",\n+            \"artifact\": \"nifi-aws-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-proxy-configuration-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-protobuf-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-proxy-configuration-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Message Type\": {\n-                                \"description\": \"Fully qualified name of the Protocol Buffers message type including its package (eg. mypackage.MyMessage). The .proto files configured in 'Proto Directory' must contain the definition of this message type.\",\n-                                \"displayName\": \"Message Type\",\n+                            \"proxy-server-host\": {\n+                                \"description\": \"Proxy server hostname or ip-address.\",\n+                                \"displayName\": \"Proxy Server Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Type\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-server-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proto Directory\": {\n-                                \"description\": \"Directory containing Protocol Buffers message definition (.proto) file(s).\",\n-                                \"displayName\": \"Proto Directory\",\n+                            \"proxy-server-port\": {\n+                                \"description\": \"Proxy server port number.\",\n+                                \"displayName\": \"Proxy Server Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proto Directory\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-server-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"proxy-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"The record schema is generated from the provided proto file\",\n-                                        \"displayName\": \"Generate from Proto file\",\n-                                        \"value\": \"generate-from-proto-file\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"generate-from-proto-file\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type.\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"proxy-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the branch to use when looking up the schema in the Schema Registry property. If the chosen Schema Registry does not support branching, this value will be ignored.\",\n-                                \"displayName\": \"Schema Branch\",\n+                            \"proxy-user-name\": {\n+                                \"description\": \"The name of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"proxy-user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                            \"proxy-user-password\": {\n+                                \"description\": \"The password of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"proxy-user-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n+                            \"socks-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS4\",\n+                                        \"value\": \"SOCKS4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS5\",\n+                                        \"value\": \"SOCKS5\"\n                                     }\n                                 ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-reader\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"schema-registry\": {\n+                                \"defaultValue\": \"SOCKS5\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n+                                            \"SOCKS\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Proxy Type\",\n+                                        \"propertyName\": \"proxy-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"description\": \"SOCKS Protocol Version\",\n+                                \"displayName\": \"SOCKS Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the version of the schema to lookup in the Schema Registry. If not specified then the latest version of the schema will be retrieved.\",\n-                                \"displayName\": \"Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"socks-version\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"protobuf\",\n-                            \"reader\",\n-                            \"record\"\n+                            \"Proxy\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n-                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\n+                        \"type\": \"org.apache.nifi.proxy.StandardProxyConfigurationService\",\n+                        \"typeDescription\": \"Provides a set of configurations for different NiFi components to use a proxy server.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-dropbox-services-nar\",\n+            \"artifact\": \"nifi-registry-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-dropbox-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-registry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Access Token of the user's Dropbox app. See Additional Details for more information about Access Token generation.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"app-key\": {\n-                                \"description\": \"App Key of the user's Dropbox app. See Additional Details for more information.\",\n-                                \"displayName\": \"App Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"app-key\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"app-secret\": {\n-                                \"description\": \"App Secret of the user's Dropbox app. See Additional Details for more information.\",\n-                                \"displayName\": \"App Secret\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"app-secret\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"refresh-token\": {\n-                                \"description\": \"Refresh Token of the user's Dropbox app. See Additional Details for more information about Refresh Token generation.\",\n-                                \"displayName\": \"Refresh Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"refresh-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Adds a named schema using the JSON string representation of an Avro schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Schema name\",\n+                                \"value\": \"Schema Content\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"credentials\",\n-                            \"dropbox\",\n-                            \"provider\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n-                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-client-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hubspot-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hubspot-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"10 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Access Token to authenticate requests\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"incremental-delay\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"The ending timestamp of the time window will be adjusted earlier by the amount configured in this property. For example, with a property value of 10 seconds, an ending timestamp of 12:30:45 would be changed to 12:30:35. Set this property to avoid missing objects when the clock of your local machines and HubSpot servers' clock are not in sync and to protect against HubSpot's mechanism that changes last updated timestamps after object creation.\",\n-                                \"displayName\": \"Incremental Delay\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"incremental-delay\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"incremental-initial-start-time\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n-                                    }\n-                                ],\n-                                \"description\": \"This property specifies the start time that the processor applies when running the first request. The expected format is a UTC date-time such as '2011-12-03T10:15:30Z'\",\n-                                \"displayName\": \"Incremental Initial Start Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"incremental-initial-start-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"is-incremental\": {\n+                            \"avro-reg-validated-field-names\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"The processor can incrementally load the queried objects so that each object is queried exactly once. For each query, the processor queries objects within a time window where the objects were modified between the previous run time and the current time (optionally adjusted by the Incremental Delay property).\",\n-                                \"displayName\": \"Incremental Loading\",\n+                                \"description\": \"Whether or not to validate the field names in the Avro schema based on Avro naming rules. If set to true, all field names must be valid Avro names, which must begin with [A-Za-z_], and subsequently contain only [A-Za-z0-9_]. If set to false, no validation will be performed on the field names.\",\n+                                \"displayName\": \"Validate Field Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"is-incremental\",\n+                                \"name\": \"avro-reg-validated-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"object-type\": {\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.schemaregistry.services.AvroSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a service for registering and accessing schemas. You can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of Avro's Schema format.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-registry-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds a named schema using the JSON string representation of a JSON schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Schema Name\",\n+                                \"value\": \"Schema Content\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"JSON Schema Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In HubSpot, the companies object is a standard CRM object. Individual company records can be used to store information about businesses and organizations within company properties.\",\n-                                        \"displayName\": \"Companies\",\n-                                        \"value\": \"/crm/v3/objects/companies\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, contacts store information about individuals. From marketing automation to smart content, the lead-specific data found in contact records helps users leverage much of HubSpot's functionality.\",\n-                                        \"displayName\": \"Contacts\",\n-                                        \"value\": \"/crm/v3/objects/contacts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, a deal represents an ongoing transaction that a sales team is pursuing with a contact or company. It\\u2019s tracked through pipeline stages until won or lost.\",\n-                                        \"displayName\": \"Deals\",\n-                                        \"value\": \"/crm/v3/objects/deals\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, line items can be thought of as a subset of products. When a product is attached to a deal, it becomes a line item. Line items can be created that are unique to an individual quote, but they will not be added to the product library.\",\n-                                        \"displayName\": \"Line Items\",\n-                                        \"value\": \"/crm/v3/objects/line_items\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, products represent the goods or services to be sold. Building a product library allows the user to quickly add products to deals, generate quotes, and report on product performance.\",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"/crm/v3/objects/products\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, a ticket represents a customer request for help or support.\",\n-                                        \"displayName\": \"Tickets\",\n-                                        \"value\": \"/crm/v3/objects/tickets\"\n-                                    },\n-                                    {\n-                                        \"description\": \"In HubSpot, quotes are used to share pricing information with potential buyers.\",\n-                                        \"displayName\": \"Quotes\",\n-                                        \"value\": \"/crm/v3/objects/quotes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Get calls on CRM records and on the calls index page.\",\n-                                        \"displayName\": \"Calls\",\n-                                        \"value\": \"/crm/v3/objects/calls\"\n+                                        \"description\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\n                                     },\n                                     {\n-                                        \"description\": \"Get emails on CRM records.\",\n-                                        \"displayName\": \"Emails\",\n-                                        \"value\": \"/crm/v3/objects/emails\"\n+                                        \"description\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\n                                     },\n                                     {\n-                                        \"description\": \"Get meetings on CRM records.\",\n-                                        \"displayName\": \"Meetings\",\n-                                        \"value\": \"/crm/v3/objects/meetings\"\n+                                        \"description\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\n                                     },\n                                     {\n-                                        \"description\": \"Get notes on CRM records.\",\n-                                        \"displayName\": \"Notes\",\n-                                        \"value\": \"/crm/v3/objects/notes\"\n+                                        \"description\": \"Draft Version 2019-09\",\n+                                        \"displayName\": \"Draft 2019-09\",\n+                                        \"value\": \"DRAFT_2019_09\"\n                                     },\n                                     {\n-                                        \"description\": \"Get tasks on CRM records.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"/crm/v3/objects/tasks\"\n+                                        \"description\": \"Draft Version 2020-12\",\n+                                        \"displayName\": \"Draft 2020-12\",\n+                                        \"value\": \"DRAFT_2020_12\"\n                                     }\n                                 ],\n-                                \"description\": \"The HubSpot Object Type requested\",\n-                                \"displayName\": \"Object Type\",\n+                                \"defaultValue\": \"DRAFT_2020_12\",\n+                                \"description\": \"The JSON schema specification\",\n+                                \"displayName\": \"JSON Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"object-type\",\n+                                \"name\": \"JSON Schema Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"result-limit\": {\n-                                \"description\": \"The maximum number of results to request for each invocation of the Processor\",\n-                                \"displayName\": \"Result Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"result-limit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"web-client-service-provider\": {\n-                                \"description\": \"Controller service for HTTP client operations\",\n-                                \"displayName\": \"Web Client Service Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"In case of incremental loading, the start and end timestamps of the last query time window are stored in the state. When the 'Result Limit' property is set, the paging cursor is saved after executing a request. Only the objects after the paging cursor will be retrieved. The maximum number of retrieved objects can be set in the 'Result Limit' property.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"hubspot\"\n+                            \"json\",\n+                            \"registry\",\n+                            \"schema\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.hubspot.GetHubSpot\",\n-                        \"typeDescription\": \"Retrieves JSON data from a private HubSpot application. This processor is intended to be run on the Primary Node only.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.schemaregistry.services.StandardJsonSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a service for registering and accessing JSON schemas. One can register a schema as a dynamic property where 'name' represents the schema name and 'value' represents the textual representation of the actual schema following the syntax and semantics of the JSON Schema format. Empty schemas and schemas only consisting of whitespace are not acceptable schemas.The registry is heterogeneous registry as it can store schemas of different schema draft versions. By default the registry is configured to store schemas of Draft 2020-12. When a schema is added, the version which is currently is set, is what the schema is saved as.\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n             \"artifact\": \"nifi-ssl-context-service-nar\",\n@@ -100670,23 +100387,35 @@\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-avro-nar\",\n+            \"artifact\": \"nifi-standard-shared-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jslt-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-jslt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -100699,300 +100428,354 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Count Items\": {\n+                            \"jslt-transform-cache-size\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Compiling a JSLT Transform can be fairly expensive. Ideally, this will be done only once. However, if the Expression Language is used in the transform, we may need a new Transform for each FlowFile. This value controls how many of those Transforms we cache in memory in order to avoid having to compile the Transform each time.\",\n+                                \"displayName\": \"Transform Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jslt-transform-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"jslt-transform-pretty_print\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true the number of items in the datafile will be counted and stored in a FlowFile attribute 'item.count'. The counting is done by reading blocks and getting the number of items for each block, thus avoiding de-serializing. The items being counted will be the top-level items in the datafile. For example, with a schema of type record the items will be the records, and for a schema of type Array the items will be the arrays (not the number of entries in each array).\",\n-                                \"displayName\": \"Count Items\",\n+                                \"description\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Count Items\",\n+                                \"name\": \"jslt-transform-pretty_print\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fingerprint Algorithm\": {\n+                            \"jslt-transform-result-filter\": {\n+                                \"defaultValue\": \". != null and . != {} and . != []\",\n+                                \"description\": \"A filter for output JSON results using a JSLT expression. This property supports changing the default filter, which removes JSON objects with null values, empty objects and empty arrays from the output JSON. This JSLT must return true for each JSON object to be included and false for each object to be removed. Using a filter value of \\\"true\\\" to disables filtering.\",\n+                                \"displayName\": \"Transform Result Filter\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jslt-transform-result-filter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"jslt-transform-transformation\": {\n+                                \"description\": \"JSLT Transformation for transform of JSON data. Any NiFi Expression Language present will be evaluated first to get the final transform to be applied. The JSLT Tutorial provides an overview of supported expressions: https://github.com/schibsted/jslt/blob/master/tutorial.md\",\n+                                \"displayName\": \"JSLT Transformation\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"jslt-transform-transformation\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"jslt-transform-transformation-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CRC-64-AVRO\",\n-                                        \"value\": \"CRC-64-AVRO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n+                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n+                                        \"displayName\": \"Entire FlowFile\",\n+                                        \"value\": \"ENTIRE_FLOWFILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n+                                        \"description\": \"Apply transformation each JSON Object in an array\",\n+                                        \"displayName\": \"Each JSON Object\",\n+                                        \"value\": \"EACH_OBJECT\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"CRC-64-AVRO\",\n-                                \"description\": \"The algorithm used to generate the schema fingerprint. Available choices are based on the Avro recommended practices for fingerprint generation.\",\n-                                \"displayName\": \"Fingerprint Algorithm\",\n+                                \"defaultValue\": \"EACH_OBJECT\",\n+                                \"description\": \"Whether to apply the JSLT transformation to the entire FlowFile contents or each JSON object in the root-level array\",\n+                                \"displayName\": \"Transformation Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fingerprint Algorithm\",\n+                                \"name\": \"jslt-transform-transformation-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Metadata Keys\": {\n-                                \"description\": \"A comma-separated list of keys indicating key/value pairs to extract from the Avro file header. The key 'avro.schema' can be used to extract the full schema in JSON format, and 'avro.codec' can be used to extract the codec name if one exists.\",\n-                                \"displayName\": \"Metadata Keys\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Metadata Keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after metadata has been extracted.\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be parsed as Avro or metadata cannot be extracted for any reason\",\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"avro\",\n-                            \"metadata\",\n-                            \"schema\"\n+                            \"jslt\",\n+                            \"json\",\n+                            \"transform\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.ExtractAvroMetadata\",\n-                        \"typeDescription\": \"Extracts metadata from the header of an Avro datafile.\",\n+                        \"type\": \"org.apache.nifi.processors.jslt.JSLTTransformJSON\",\n+                        \"typeDescription\": \"Applies a JSLT transformation to the FlowFile JSON payload. A new FlowFile is created with transformed content and is routed to the 'success' relationship. If the JSLT transform fails, the original FlowFile is routed to the 'failure' relationship.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n-                                \"name\": \"schema.type\"\n-                            },\n-                            {\n-                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n-                                \"name\": \"schema.name\"\n-                            },\n-                            {\n-                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n-                                \"name\": \"schema.fingerprint\"\n-                            },\n-                            {\n-                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n-                                \"name\": \"item.count\"\n+                                \"description\": \"Always set to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-opentelemetry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-opentelemetry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n+                            \"TIMER_DRIVEN\": \"25 ms\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Output Size\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The number of Avro records to include per split file. In cases where the incoming file has less records than the Output Size, or when the total number of records does not divide evenly by the Output Size, it is possible to get a split file with less records.\",\n-                                \"displayName\": \"Output Size\",\n+                            \"Address\": {\n+                                \"defaultValue\": \"0.0.0.0\",\n+                                \"description\": \"Internet Protocol Address on which to listen for OTLP Export Service Requests. The default value enables listening on all addresses.\",\n+                                \"displayName\": \"Address\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Size\",\n+                                \"name\": \"Address\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Strategy\": {\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of OTLP request resource elements included in each FlowFile produced\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Avro's object container file format\",\n-                                        \"displayName\": \"Datafile\",\n-                                        \"value\": \"Datafile\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Bare Avro records\",\n-                                        \"displayName\": \"Bare Record\",\n-                                        \"value\": \"Bare Record\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Datafile\",\n-                                \"description\": \"Determines the format of the output. Either Avro Datafile, or bare record. Bare record output is only intended for use with systems that already require it, and shouldn't be needed for normal use.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"WANT\",\n+                                \"description\": \"Client authentication policy for TLS communication with HTTPS\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Strategy\",\n+                                \"name\": \"Client Authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Split Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Split at Record boundaries\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Record\",\n-                                \"description\": \"The strategy for splitting the incoming datafile. The Record strategy will read the incoming datafile by de-serializing each record.\",\n-                                \"displayName\": \"Split Strategy\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"4317\",\n+                                \"description\": \"TCP port number on which to listen for OTLP Export Service Requests over HTTP and gRPC\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Strategy\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Metadata\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to transfer metadata from the parent datafile to the children. If the Output Strategy is Bare Record, then the metadata will be stored as FlowFile attributes, otherwise it will be in the Datafile header.\",\n-                                \"displayName\": \"Transfer Metadata\",\n+                            \"Queue Capacity\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Maximum number of OTLP request resource elements that can be received and queued\",\n+                                \"displayName\": \"Queue Capacity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Metadata\",\n+                                \"name\": \"Queue Capacity\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service enables TLS communication for HTTPS\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Worker Threads\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"Number of threads responsible for decoding and queuing incoming OTLP Export Service Requests\",\n+                                \"displayName\": \"Worker Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Worker Threads\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid Avro), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"All new files split from the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"description\": \"Export Service Requests containing OTLP Telemetry\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"avro\",\n-                            \"split\"\n+                            \"OTLP\",\n+                            \"OTel\",\n+                            \"OpenTelemetry\",\n+                            \"logs\",\n+                            \"metrics\",\n+                            \"telemetry\",\n+                            \"traces\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.avro.SplitAvro\",\n-                        \"typeDescription\": \"Splits a binary encoded Avro datafile into smaller files based on the configured Output Size. The Output Strategy determines if the smaller files will be Avro datafiles, or bare Avro records with metadata in the FlowFile attributes. The output will always be binary encoded.\",\n+                        \"type\": \"org.apache.nifi.processors.opentelemetry.ListenOTLP\",\n+                        \"typeDescription\": \"Collect OpenTelemetry messages over HTTP or gRPC. Supports standard Export Service Request messages for logs, metrics, and traces. Implements OpenTelemetry OTLP Specification 1.0.0 with OTLP/gRPC and OTLP/HTTP. Provides protocol detection using the HTTP Content-Type header.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n-                                \"name\": \"fragment.index\"\n+                                \"description\": \"Content-Type set to application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"OpenTelemetry Resource Type: LOGS, METRICS, or TRACES\",\n+                                \"name\": \"resource.type\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"Count of resource elements included in messages\",\n+                                \"name\": \"resource.count\"\n                             }\n                         ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-smb-nar\",\n+            \"artifact\": \"nifi-standard-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-compress-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-compress-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -101005,866 +100788,969 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n+                            \"Input Compression Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leaves the file as-is.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\n                                     },\n                                     {\n-                                        \"description\": \"Moves the file to the specified directory on the remote system. This option cannot be used when DFS is enabled on 'SMB Client Provider Service'.\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"MOVE\"\n+                                        \"description\": \"Use the [mime.type] attribute from the input FlowFile to determine the format\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Deletes the file from the remote system.\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"DELETE\"\n+                                        \"description\": \"GZIP\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deflate\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP2\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"XZ-LZMA2\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZMA\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Framed\",\n+                                        \"displayName\": \"snappy-framed\",\n+                                        \"value\": \"snappy-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ZSTD\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Brotli\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been processed. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n+                                \"defaultValue\": \"no compression\",\n+                                \"description\": \"The strategy to use for decompressing input FlowFiles\",\n+                                \"displayName\": \"Input Compression Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"name\": \"Input Compression Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Destination Directory\": {\n+                            \"Output Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"MOVE\"\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Completion Strategy\",\n-                                        \"propertyName\": \"Completion Strategy\"\n+                                        \"propertyDisplayName\": \"Output Compression Strategy\",\n+                                        \"propertyName\": \"Output Compression Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Destination Directory\",\n+                                \"description\": \"The compression level for output FlowFiles for supported formats. A lower value results in faster processing but less compression; a value of 0 indicates no (that is, simple archiving) for gzip or minimal for xz-lzma2 compression. Higher levels can mean much larger memory usage such as the case with levels 7-9 for xz-lzma/2 so be careful relative to heap size.\",\n+                                \"displayName\": \"Output Compression Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Destination Directory\",\n+                                \"name\": \"Output Compression Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Directory\": {\n-                                \"dependencies\": [\n+                            \"Output Compression Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"MOVE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Completion Strategy\",\n-                                        \"propertyName\": \"Completion Strategy\"\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\n+                                    },\n+                                    {\n+                                        \"description\": \"GZIP\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deflate\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"BZIP2\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"XZ-LZMA2\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZMA\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Hadoop\",\n+                                        \"displayName\": \"snappy-hadoop\",\n+                                        \"value\": \"snappy-hadoop\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Snappy-Framed\",\n+                                        \"displayName\": \"snappy-framed\",\n+                                        \"value\": \"snappy-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"LZ4\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ZSTD\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Brotli\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n                                     }\n                                 ],\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been processed.\",\n-                                \"displayName\": \"Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Destination Directory\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"remote-file\": {\n-                                \"defaultValue\": \"${path}/${filename}\",\n-                                \"description\": \"The full path of the file to be retrieved from the remote server. Expression language is supported.\",\n-                                \"displayName\": \"Remote File\",\n+                                \"defaultValue\": \"no compression\",\n+                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n+                                \"displayName\": \"Output Compression Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"remote-file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Compression Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-client-provider-service\": {\n-                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n-                                \"displayName\": \"SMB Client Provider Service\",\n+                            \"Output Filename Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n+                                        \"displayName\": \"Original\",\n+                                        \"value\": \"ORIGINAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Remove the filename extension when decompressing and add a new extension for compressed output FlowFiles\",\n+                                        \"displayName\": \"Updated\",\n+                                        \"value\": \"UPDATED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UPDATED\",\n+                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n+                                \"displayName\": \"Output Filename Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n+                                \"name\": \"Output Filename Strategy\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-smb-client-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the Decompression Format is set to 'use mime.type attribute', this attribute is used to determine the decompression type. Otherwise, this attribute is ignored.\",\n+                                \"name\": \"mime.type\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched file.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here when failed to fetch its content.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"cifs\",\n-                            \"fetch\",\n-                            \"files\",\n-                            \"samba\",\n-                            \"smb\"\n+                            \"brotli\",\n+                            \"bzip2\",\n+                            \"compress\",\n+                            \"content\",\n+                            \"deflate\",\n+                            \"gzip\",\n+                            \"lz4-framed\",\n+                            \"lzma\",\n+                            \"recompress\",\n+                            \"snappy\",\n+                            \"snappy framed\",\n+                            \"snappy-hadoop\",\n+                            \"xz-lzma2\",\n+                            \"zstd\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.FetchSmb\",\n-                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\n+                        \"type\": \"org.apache.nifi.processors.compress.ModifyCompression\",\n+                        \"typeDescription\": \"Changes the compression algorithm used to compress the contents of a FlowFile by decompressing the contents of FlowFiles using a user-specified compression algorithm and recompressing the contents using the specified compression format properties. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error code returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.code\"\n-                            },\n-                            {\n-                                \"description\": \"The error message returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The appropriate MIME Type is set based on the value of the Compression Format property. If the Compression Format is 'no compression' this attribute is removed as the MIME Type is no longer known.\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-flow-registry-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of files to pull in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Cluster Max Redirects\": {\n+                                \"defaultValue\": \"5\",\n+                                \"description\": \"The maximum number of redirects that can be performed when clustered.\",\n+                                \"displayName\": \"Cluster Max Redirects\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"name\": \"Cluster Max Redirects\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2].\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n+                            \"Communication Timeout\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The timeout to use when attempting to communicate with Redis.\",\n+                                \"displayName\": \"Communication Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Domain\",\n-                                \"required\": false,\n+                                \"name\": \"Communication Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Filter\": {\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Connection String\": {\n+                                \"description\": \"The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.\",\n+                                \"displayName\": \"Connection String\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Connection String\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Database Index\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The database index to be used by connections created from this connection pool. See the databases property in redis.conf, by default databases 0-15 will be available.\",\n+                                \"displayName\": \"Database Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Database Index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"Password\": {\n+                                \"description\": \"The password used to authenticate to the Redis server. See the 'requirepass' property in redis.conf.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Pool - Block When Exhausted\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"description\": \"Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.\",\n+                                \"displayName\": \"Pool - Block When Exhausted\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"Pool - Block When Exhausted\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n-                                \"displayName\": \"Keep Source File\",\n+                            \"Pool - Max Idle\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.\",\n+                                \"displayName\": \"Pool - Max Idle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Source File\",\n+                                \"name\": \"Pool - Max Idle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n-                                \"displayName\": \"Password\",\n+                            \"Pool - Max Total\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.\",\n+                                \"displayName\": \"Pool - Max Total\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Pool - Max Total\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Path Filter\": {\n-                                \"description\": \"When Recurse Subdirectories is true, then only subdirectories whose path matches the given regular expression will be scanned\",\n-                                \"displayName\": \"Path Filter\",\n+                            \"Pool - Max Wait Time\": {\n+                                \"defaultValue\": \"10 seconds\",\n+                                \"description\": \"The amount of time to wait for an available connection when Block When Exhausted is set to true.\",\n+                                \"displayName\": \"Pool - Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n-                                \"required\": false,\n+                                \"name\": \"Pool - Max Wait Time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Polling Interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Indicates how long to wait before performing a directory listing\",\n-                                \"displayName\": \"Polling Interval\",\n+                            \"Pool - Min Evictable Idle Time\": {\n+                                \"defaultValue\": \"60 seconds\",\n+                                \"description\": \"The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Pool - Min Evictable Idle Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"Pool - Min Evictable Idle Time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                            \"Pool - Min Idle\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.\",\n+                                \"displayName\": \"Pool - Min Idle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Recurse Subdirectories\",\n+                                \"name\": \"Pool - Min Idle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Share\": {\n-                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n-                                \"displayName\": \"Share\",\n+                            \"Pool - Num Tests Per Eviction Run\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The number of connections to tests per eviction attempt. A negative value indicates to test all connections.\",\n+                                \"displayName\": \"Pool - Num Tests Per Eviction Run\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share\",\n+                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\n+                            \"Pool - Test On Borrow\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the read. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n+                                \"displayName\": \"Pool - Test On Borrow\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share Access Strategy\",\n+                                \"name\": \"Pool - Test On Borrow\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-dfs\": {\n+                            \"Pool - Test On Create\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n+                                \"description\": \"Whether or not connections should be tested upon creation.\",\n+                                \"displayName\": \"Pool - Test On Create\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n+                                \"name\": \"Pool - Test On Create\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"Pool - Test On Return\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether or not connections should be tested upon returning to the pool.\",\n+                                \"displayName\": \"Pool - Test On Return\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"name\": \"Pool - Test On Return\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n+                            \"Pool - Test While Idle\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not connections should be tested while idle.\",\n+                                \"displayName\": \"Pool - Test While Idle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n+                                \"name\": \"Pool - Test While Idle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All files are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"samba, smb, cifs, files, get\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on the network share\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was created. May not work on all file systems\",\n-                                \"name\": \"file.creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last modified. May not work on all file systems\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n                             },\n-                            {\n-                                \"description\": \"The full path from where a file was picked up. This includes the hostname and the share name\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n-                        \"propertyDescriptors\": {\n-                            \"directory\": {\n-                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"Pool - Time Between Eviction Runs\": {\n+                                \"defaultValue\": \"30 seconds\",\n+                                \"description\": \"The amount of time between attempting to evict idle connections from the pool.\",\n+                                \"displayName\": \"Pool - Time Between Eviction Runs\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"directory\",\n-                                \"required\": false,\n+                                \"name\": \"Pool - Time Between Eviction Runs\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Redis Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"A single standalone Redis instance.\",\n+                                        \"displayName\": \"Standalone\",\n+                                        \"value\": \"Standalone\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n+                                        \"displayName\": \"Sentinel\",\n+                                        \"value\": \"Sentinel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n+                                        \"displayName\": \"Cluster\",\n+                                        \"value\": \"Cluster\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"defaultValue\": \"Standalone\",\n+                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n+                                \"displayName\": \"Redis Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Redis Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"Sentinel Master\": {\n+                                \"description\": \"The name of the sentinel master, require when Mode is set to Sentinel\",\n+                                \"displayName\": \"Sentinel Master\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"Sentinel Master\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name-suffix-filter\": {\n-                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n-                                \"displayName\": \"File Name Suffix Filter\",\n+                            \"Sentinel Password\": {\n+                                \"description\": \"The password used to authenticate to the Redis Sentinel server. See the 'requirepass' and 'sentinel sentinel-pass' properties in sentinel.conf.\",\n+                                \"displayName\": \"Sentinel Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-name-suffix-filter\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Sentinel Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Sentinel Username\": {\n+                                \"description\": \"The username used to authenticate to the Redis sentinel server.\",\n+                                \"displayName\": \"Sentinel Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Sentinel Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\n+                            \"Username\": {\n+                                \"description\": \"The username used to authenticate to the Redis server.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-redis-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"redis\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n+                        \"typeDescription\": \"A service that provides connections to Redis.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"redis-cache-ttl\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n+                                \"displayName\": \"TTL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"redis-cache-ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-file-age\": {\n-                                \"description\": \"Any file older than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-age\",\n-                                \"required\": false,\n+                                \"name\": \"redis-connection-pool\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"redis\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.redis.service.RedisDistributedMapCacheClientService\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service relies on the WATCH, MULTI, and EXEC commands in Redis, which are not fully supported when Redis is clustered. As a result, this service can only be used with a Redis Connection Pool that is configured for standalone or sentinel mode. Sentinel mode can be used to provide high-availability configurations.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"redis-cache-ttl\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever\",\n+                                \"displayName\": \"TTL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redis-cache-ttl\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-file-size\": {\n-                                \"description\": \"Any file larger than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-size\",\n-                                \"required\": false,\n+                                \"name\": \"redis-connection-pool\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"redis\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.redis.service.SimpleRedisDistributedMapCacheClientService\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service is intended to be used when a non-atomic DistributedMapCacheClient is required.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set to use when storing record field values as strings. All fields will be converted to strings using this character set before being stored in Redis.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"charset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-file-age\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"data-record-path\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"This property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to Redis instead of sending the entire incoming Record. The property defaults to the root '/' which corresponds to a 'flat' record (all fields/values at the top level of  the Record.\",\n+                                \"displayName\": \"Data Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-file-age\",\n+                                \"name\": \"data-record-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-file-size\": {\n-                                \"description\": \"Any file smaller than the given value will be omitted.\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"hash-value-record-path\": {\n+                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the hash value associated with all the record fields/values (see 'hset' in Redis documentation for more details). The RecordPath must point at exactly one field or an error will occur.\",\n+                                \"displayName\": \"Hash Value Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-file-size\",\n-                                \"required\": false,\n+                                \"name\": \"hash-value-record-path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Record Writer to use for creating the listing. If not specified, one FlowFile will be created for each entity that is listed. If the Record Writer is specified, all entities will be written to a single FlowFile instead of adding attributes to individual FlowFiles.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"smb-client-provider-service\": {\n-                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n-                                \"displayName\": \"SMB Client Provider Service\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n+                                \"name\": \"redis-connection-pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"target-system-timestamp-precision\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"FlowFiles having all Records stored in Redis will be routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles containing Records with processing errors will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"list\",\n-                            \"samba, smb, cifs, files\"\n+                            \"hash\",\n+                            \"put\",\n+                            \"record\",\n+                            \"redis\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n-                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"type\": \"org.apache.nifi.redis.processor.PutRedisHashRecord\",\n+                        \"typeDescription\": \"Puts record field data into Redis using a specified hash value, which is determined by a RecordPath to a field in each record containing the hash value. The record fields and values are stored as key/value pairs associated by the hash value. NOTE: Neither the evaluated hash value nor any of the field values can be null. If the hash value is null, the FlowFile will be routed to failure. For each of the field values, if the value is null that field will be not set in Redis.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The short name of the file that was read from filesystem.\",\n-                                \"name\": \"shortName\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The SMB URL of the share.\",\n-                                \"name\": \"serviceLocation\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"changeTime\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file in bytes.\",\n-                                \"name\": \"size\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes allocated for the file on the server.\",\n-                                \"name\": \"allocationSize\"\n+                                \"description\": \"Number of records written to Redis\",\n+                                \"name\": \"redis.success.record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cdc-mysql-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-cdc-mysql-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -101872,325 +101758,439 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to put in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"SSL Context Service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PREFERRED\",\n+                                            \"VERIFY_IDENTITY\",\n+                                            \"REQUIRED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SSL Mode\",\n+                                        \"propertyName\": \"SSL Mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"SSL Context Service supporting encrypted socket communication\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Conflict Resolution Strategy\": {\n+                            \"SSL Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"Connect without TLS\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Connect with TLS when server support enabled, otherwise connect without TLS\",\n+                                        \"displayName\": \"PREFERRED\",\n+                                        \"value\": \"PREFERRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Connect with TLS or fail when server support not enabled\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n+                                        \"description\": \"Connect with TLS or fail when server support not enabled. Verify server hostname matches presented X.509 certificate names or fail when not matched\",\n+                                        \"displayName\": \"VERIFY_IDENTITY\",\n+                                        \"value\": \"VERIFY_IDENTITY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DISABLED\",\n+                                \"description\": \"SSL Mode used when SSL Context Service configured supporting certificate verification options\",\n+                                \"displayName\": \"SSL Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-db-name-pattern\": {\n+                                \"description\": \"A regular expression (regex) for matching databases (or schemas, depending on your RDBMS' terminology) against the list of CDC events. The regex must match the database name as it is stored in the RDBMS. If the property is not set, the database name will not be used to filter the CDC events. NOTE: DDL events, even if they affect different databases, are associated with the database used by the session to execute the DDL. This means if a connection is made to one database, but the DDL is issued against another, then the connected database will be the one matched against the specified pattern.\",\n+                                \"displayName\": \"Database/Schema Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-db-name-pattern\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-dist-map-cache-client\": {\n+                                \"description\": \"This is a legacy property that is no longer used to store table information, the processor will handle the table information (column names, types, etc.)\",\n+                                \"displayName\": \"Distributed Map Cache Client - unused\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-dist-map-cache-client\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"capture-change-mysql-driver-class\": {\n+                                \"defaultValue\": \"com.mysql.jdbc.Driver\",\n+                                \"description\": \"The class name of the MySQL database driver class\",\n+                                \"displayName\": \"MySQL Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-driver-class\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the MySQL driver JAR and its dependencies (if any). For example '/var/tmp/mysql-connector-java-5.1.38-bin.jar'\",\n+                                \"displayName\": \"MySQL Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-driver-locations\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-hosts\": {\n+                                \"description\": \"A list of hostname (and optional port) entries corresponding to nodes in a MySQL cluster. The entries should be comma separated using a colon (if the port is to be specified) such as host1:port,host2:port,....  For example mysql.myhost.com:3306. The port need not be specified, when omitted the default MySQL port value of 3306 will be used. This processor will attempt to connect to the hosts in the list in order. If one node goes down and failover is enabled for the cluster, then the processor will connect to the active node (assuming its node entry is specified in this property).\",\n+                                \"displayName\": \"MySQL Nodes\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-include-begin-commit\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"replace\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether to emit events corresponding to a BEGIN or COMMIT event in the binary log. Set to true if the BEGIN/COMMIT events are necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n+                                \"displayName\": \"Include Begin/Commit Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"name\": \"capture-change-mysql-include-begin-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Missing Directories\": {\n+                            \"capture-change-mysql-include-ddl-events\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\n+                                \"description\": \"Specifies whether to emit events corresponding to Data Definition Language (DDL) events such as ALTER TABLE, TRUNCATE TABLE, e.g. in the binary log. Set to true if the DDL events are desired/necessary in the downstream flow, otherwise set to false, which suppresses generation of these events and can increase flow performance.\",\n+                                \"displayName\": \"Include DDL Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Create Missing Directories\",\n+                                \"name\": \"capture-change-mysql-include-ddl-events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n-                                \"displayName\": \"Directory\",\n+                            \"capture-change-mysql-init-binlog-filename\": {\n+                                \"description\": \"Specifies an initial binlog filename to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used along with Initial Binlog Position to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the environment properties.\",\n+                                \"displayName\": \"Initial Binlog Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-init-binlog-filename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n+                            \"capture-change-mysql-init-binlog-position\": {\n+                                \"description\": \"Specifies an initial offset into a binlog (specified by Initial Binlog Filename) to use if this processor's State does not have a current binlog filename. If a filename is present in the processor's State or \\\"Use GTID\\\" property is false, this property is ignored. This can be used along with Initial Binlog Filename to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the environment properties.\",\n+                                \"displayName\": \"Initial Binlog Position\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Domain\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-init-binlog-position\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\n+                            \"capture-change-mysql-init-gtid\": {\n+                                \"description\": \"Specifies an initial GTID to use if this processor's State does not have a current GTID. If a GTID is present in the processor's State or \\\"Use GTID\\\" property is set to false, this property is ignored. This can be used to \\\"skip ahead\\\" if previous events are not desired. Note that NiFi Expression Language is supported, but this property is evaluated when the processor is configured, so FlowFile attributes may not be used. Expression Language is supported to enable the use of the environment properties.\",\n+                                \"displayName\": \"Initial Binlog GTID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-init-gtid\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n-                                \"displayName\": \"Password\",\n+                            \"capture-change-mysql-init-seq-id\": {\n+                                \"description\": \"Specifies an initial sequence identifier to use if this processor's State does not have a current sequence identifier. If a sequence identifier is present in the processor's State, this property is ignored. Sequence identifiers are monotonically increasing integers that record the order of flow files generated by the processor. They can be used with the EnforceOrder processor to guarantee ordered delivery of CDC events.\",\n+                                \"displayName\": \"Initial Sequence ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-init-seq-id\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Share\": {\n-                                \"description\": \"The network share to which files should be written. This is the \\\"first folder\\\"after the hostname: \\\\\\\\hostname\\\\[share]\\\\dir1\\\\dir2\",\n-                                \"displayName\": \"Share\",\n+                            \"capture-change-mysql-max-wait-time\": {\n+                                \"defaultValue\": \"30 seconds\",\n+                                \"description\": \"The maximum amount of time allowed for a connection to be established, zero means there is effectively no limit.\",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-max-wait-time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-name-pattern\": {\n+                                \"description\": \"A regular expression (regex) for matching CDC events affecting matching tables. The regex must match the table name as it is stored in the database. If the property is not set, no events will be filtered based on table name.\",\n+                                \"displayName\": \"Table Name Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share\",\n-                                \"required\": true,\n+                                \"name\": \"capture-change-mysql-name-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\n+                            \"capture-change-mysql-password\": {\n+                                \"description\": \"Password to access the MySQL cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"capture-change-mysql-retrieve-all-records\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether to get all available CDC events, regardless of the current binlog filename and/or position. If binlog filename and position values are present in the processor's State, this property's value is ignored. This allows for 4 different configurations: 1) If binlog data is available in processor State, that is used to determine the start location and the value of Retrieve All Records is ignored. 2) If no binlog data is in processor State, then Retrieve All Records set to true means start at the beginning of the binlog history. 3) If no binlog data is in processor State and Initial Binlog Filename/Position are not set, then Retrieve All Records set to false means start at the end of the binlog history. 4) If no binlog data is in processor State and Initial Binlog Filename/Position are set, then Retrieve All Records set to false means start at the specified initial binlog file/position. To reset the behavior, clear the processor state (refer to the State Management section of the processor's documentation).\",\n+                                \"displayName\": \"Retrieve All Records\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Share Access Strategy\",\n+                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Temporary Suffix\": {\n-                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n-                                \"displayName\": \"Temporary Suffix\",\n+                            \"capture-change-mysql-server-id\": {\n+                                \"description\": \"The client connecting to the MySQL replication group is actually a simplified replica (server), and the Server ID value must be unique across the whole replication group (i.e. different from any other Server ID being used by any primary or replica). Thus, each instance of CaptureChangeMySQL must have a Server ID unique across the replication group. If the Server ID is not specified, it defaults to 65535.\",\n+                                \"displayName\": \"Server ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Temporary Suffix\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-server-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n-                                \"displayName\": \"Username\",\n+                            \"capture-change-mysql-state-update-interval\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"DEPRECATED. This property is no longer used and exists solely for backward compatibility purposes. Indicates how often to update the processor's state with binlog file/position values. A value of zero means that state will only be updated when the processor is stopped or shutdown. If at some point the processor state does not contain the desired binlog values, the last flow file emitted will contain the last observed values, and the processor can be returned to that state by using the Initial Binlog File, Initial Binlog Position, and Initial Sequence ID properties.\",\n+                                \"displayName\": \"State Update Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-state-update-interval\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dfs\": {\n+                            \"capture-change-mysql-use-gtid\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n+                                \"description\": \"Specifies whether to use Global Transaction ID (GTID) for binlog tracking. If set to true, processor's state of binlog file name and position is ignored. The main benefit of using GTID is to have much reliable failover than using binlog filename/position.\",\n+                                \"displayName\": \"Use Binlog GTID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n+                                \"name\": \"capture-change-mysql-use-gtid\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"capture-change-mysql-username\": {\n+                                \"description\": \"Username to access the MySQL cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"events-per-flowfile-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n+                                        \"description\": \"This strategy causes at most the number of events specified in the 'Number of Events Per FlowFile' property to be written per FlowFile. If the processor is stopped before the specified number of events has been written (or the event queue becomes empty), the fewer number of events will still be written as a FlowFile before stopping.\",\n+                                        \"displayName\": \"Max Events Per FlowFile\",\n+                                        \"value\": \"MAX_EVENTS_PER_FLOWFILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n+                                        \"description\": \"This strategy causes each event from a transaction (from BEGIN to COMMIT) to be written to a FlowFile\",\n+                                        \"displayName\": \"One Transaction Per FlowFile\",\n+                                        \"value\": \"ONE_TRANSACTION_PER_FLOWFILE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                                \"defaultValue\": \"MAX_EVENTS_PER_FLOWFILE\",\n+                                \"description\": \"Specifies the strategy to use when writing events to FlowFile(s), such as 'Max Events Per FlowFile'\",\n+                                \"displayName\": \"Event Processing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"name\": \"events-per-flowfile-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"number-of-events-per-flowfile\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"MAX_EVENTS_PER_FLOWFILE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Event Processing Strategy\",\n+                                        \"propertyName\": \"events-per-flowfile-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                                \"description\": \"Specifies how many events should be written to a single FlowFile. If the processor is stopped before the specified number of events has been written,the events will still be written as a FlowFile before stopping.\",\n+                                \"displayName\": \"Events Per FlowFile\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"number-of-events-per-flowfile\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\"\n-                        ],\n+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Information such as a 'pointer' to the current CDC event in the database is stored by this processor, such that it can continue from the same location if restarted.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"samba, smb, cifs, files, put\"\n+                            \"cdc\",\n+                            \"event\",\n+                            \"jdbc\",\n+                            \"mysql\",\n+                            \"sql\",\n+                            \"transaction\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.PutSmbFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n+                        \"type\": \"org.apache.nifi.cdc.mysql.processors.CaptureChangeMySQL\",\n+                        \"typeDescription\": \"Retrieves Change Data Capture (CDC) events from a MySQL database. CDC Events include INSERT, UPDATE, DELETE operations. Events are output as either a group of a specified number of events (the default is 1 so each event becomes its own flow file) or grouped as a full transaction (BEGIN to COMMIT). All events are ordered by the time at which the operation occurred. NOTE: If the processor is stopped before the specified number of events have been written to a flow file, the partial flow file will be output in order to maintain the consistency of the event stream.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n+                                \"name\": \"cdc.sequence.id\"\n+                            },\n+                            {\n+                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n+                                \"name\": \"cdc.event.type\"\n+                            },\n+                            {\n+                                \"description\": \"The processor outputs flow file content in JSON format, and sets the mime.type attribute to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         }\n"}]}]}
